2 * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.pcep.cli.utils;
10 import static org.junit.Assert.assertEquals;
12 import com.google.common.io.Resources;
13 import java.io.ByteArrayOutputStream;
14 import java.io.IOException;
15 import java.io.PrintStream;
16 import java.nio.charset.StandardCharsets;
17 import java.util.concurrent.ExecutionException;
18 import org.junit.Test;
19 import org.opendaylight.mdsal.binding.api.WriteTransaction;
20 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest;
21 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdStatsAug;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdStatsAugBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesStatsAug;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesStatsAugBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulMessagesStatsAug;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulMessagesStatsAugBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.error.messages.grouping.ErrorMessages;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.error.messages.grouping.ErrorMessagesBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.LocalPref;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.LocalPrefBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.Messages;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.MessagesBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.PeerCapabilities;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.PeerCapabilitiesBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.PeerPrefBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.grouping.PcepSessionState;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.grouping.PcepSessionStateBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.reply.time.grouping.ReplyTime;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.reply.time.grouping.ReplyTimeBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.stats.rev181109.PcepTopologyNodeStatsAug;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.stats.rev181109.PcepTopologyNodeStatsAugBuilder;
43 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
44 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
45 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
46 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
47 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
48 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
49 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
50 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
51 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
52 import org.opendaylight.yangtools.yang.common.Uint16;
53 import org.opendaylight.yangtools.yang.common.Uint32;
54 import org.opendaylight.yangtools.yang.common.Uint8;
56 public class PcepStateUtilsTest extends AbstractConcurrentDataBrokerTest {
57 private static final String PCEP_TOPOLOGY = "pcep-topology";
58 private static final String IP_ADDRESS = "127.0.0.1";
59 private static final String RIB_NOT_FOUND = "Node [pcc://" + IP_ADDRESS + "] not found\n";
60 private static final String NODE_ID = "pcc://127.0.0.1";
61 private static final byte[] SPEAKER_ID = {0x01, 0x02, 0x03, 0x04};
63 private final ByteArrayOutputStream output = new ByteArrayOutputStream();
64 private final PrintStream stream = new PrintStream(this.output);
67 public void testNodeStateNotFound() {
68 PcepStateUtils.displayNodeState(getDataBroker(), this.stream, PCEP_TOPOLOGY, NODE_ID);
69 assertEquals(RIB_NOT_FOUND, this.output.toString());
73 public void testDisplayNodeState() throws IOException, ExecutionException, InterruptedException {
74 createDefaultProtocol();
75 PcepStateUtils.displayNodeState(getDataBroker(), this.stream, PCEP_TOPOLOGY, NODE_ID);
76 final String expected = Resources.toString(getClass().getClassLoader().getResource("node.txt"),
77 StandardCharsets.UTF_8);
78 assertEquals(expected, this.output.toString());
81 private void createDefaultProtocol() throws ExecutionException, InterruptedException {
82 final WriteTransaction wt = getDataBroker().newWriteOnlyTransaction();
83 final Node node = new NodeBuilder()
84 .setNodeId(new NodeId(NODE_ID))
85 .addAugmentation(PcepTopologyNodeStatsAug.class,
86 new PcepTopologyNodeStatsAugBuilder().setPcepSessionState(createPcepSessionState())
90 final InstanceIdentifier<Node> topology = InstanceIdentifier.builder(NetworkTopology.class)
91 .child(Topology.class, new TopologyKey(new TopologyId(PCEP_TOPOLOGY)))
92 .child(Node.class, new NodeKey(new NodeId(NODE_ID))).build();
93 wt.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, topology, node);
97 private static PcepSessionState createPcepSessionState() {
98 final LocalPref pref = new LocalPrefBuilder()
99 .setKeepalive(Uint8.valueOf(30))
100 .setDeadtimer(Uint8.valueOf(120))
101 .setIpAddress(IP_ADDRESS)
102 .setSessionId(Uint16.ZERO)
103 .addAugmentation(PcepEntityIdStatsAug.class, new PcepEntityIdStatsAugBuilder()
104 .setSpeakerEntityIdValue(SPEAKER_ID).build())
107 final PeerCapabilities capa = new PeerCapabilitiesBuilder()
108 .addAugmentation(StatefulCapabilitiesStatsAug.class, new StatefulCapabilitiesStatsAugBuilder()
109 .setStateful(Boolean.TRUE)
110 .setInstantiation(Boolean.TRUE)
111 .setActive(Boolean.TRUE)
115 final ReplyTime reply = new ReplyTimeBuilder()
116 .setAverageTime(Uint32.ONE)
117 .setMaxTime(Uint32.valueOf(3))
118 .setMinTime(Uint32.valueOf(2))
121 final ErrorMessages errorMsg = new ErrorMessagesBuilder()
122 .setReceivedErrorMsgCount(Uint32.ONE)
123 .setSentErrorMsgCount(Uint32.valueOf(2))
126 final StatefulMessagesStatsAug statefulMsg = new StatefulMessagesStatsAugBuilder()
127 .setLastReceivedRptMsgTimestamp(Uint32.valueOf(1512043769L))
128 .setSentUpdMsgCount(Uint32.ONE)
129 .setReceivedRptMsgCount(Uint32.valueOf(2))
130 .setSentInitMsgCount(Uint32.valueOf(3))
133 final Messages messages = new MessagesBuilder()
134 .setLastSentMsgTimestamp(Uint32.valueOf(1512043828L))
135 .setUnknownMsgReceived(Uint16.ONE)
136 .setSentMsgCount(Uint32.valueOf(5))
137 .setReceivedMsgCount(Uint32.valueOf(4))
139 .setErrorMessages(errorMsg)
140 .addAugmentation(StatefulMessagesStatsAug.class, statefulMsg)
143 return new PcepSessionStateBuilder()
144 .setSynchronized(Boolean.TRUE)
145 .setSessionDuration("0:00:01:26")
146 .setDelegatedLspsCount(Uint16.ONE)
148 .setPeerPref(new PeerPrefBuilder(pref).build())
149 .setPeerCapabilities(capa)
150 .setMessages(messages)