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 java.io.ByteArrayOutputStream;
13 import java.io.IOException;
14 import java.io.PrintStream;
15 import java.util.concurrent.ExecutionException;
16 import org.apache.commons.io.IOUtils;
17 import org.junit.Test;
18 import org.opendaylight.mdsal.binding.api.WriteTransaction;
19 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest;
20 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdStatsAug;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdStatsAugBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesStatsAug;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesStatsAugBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulMessagesStatsAug;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulMessagesStatsAugBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.error.messages.grouping.ErrorMessages;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.error.messages.grouping.ErrorMessagesBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.LocalPref;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.LocalPrefBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.Messages;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.MessagesBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.PeerCapabilities;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.PeerCapabilitiesBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.PeerPrefBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.grouping.PcepSessionState;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.grouping.PcepSessionStateBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.reply.time.grouping.ReplyTime;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.reply.time.grouping.ReplyTimeBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.stats.rev181109.PcepTopologyNodeStatsAug;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.stats.rev181109.PcepTopologyNodeStatsAugBuilder;
42 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
43 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
44 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
45 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
46 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
47 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
48 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
49 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
50 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
52 public class PcepStateUtilsTest extends AbstractConcurrentDataBrokerTest {
53 private static final String PCEP_TOPOLOGY = "pcep-topology";
54 private static final String IP_ADDRESS = "127.0.0.1";
55 private static final String RIB_NOT_FOUND = "Node [pcc://" + IP_ADDRESS + "] not found\n";
56 private static final String NODE_ID = "pcc://127.0.0.1";
57 private static final String UTF8 = "UTF-8";
58 private static final byte[] SPEAKER_ID = {0x01, 0x02, 0x03, 0x04};
59 private final ByteArrayOutputStream output = new ByteArrayOutputStream();
60 private final PrintStream stream = new PrintStream(this.output);
63 public void testNodeStateNotFound() {
64 PcepStateUtils.displayNodeState(getDataBroker(), this.stream, PCEP_TOPOLOGY, NODE_ID);
65 assertEquals(RIB_NOT_FOUND, this.output.toString());
69 public void testDisplayNodeState() throws IOException, ExecutionException, InterruptedException {
70 createDefaultProtocol();
71 PcepStateUtils.displayNodeState(getDataBroker(), this.stream, PCEP_TOPOLOGY, NODE_ID);
72 final String expected = IOUtils.toString(
73 getClass().getClassLoader().getResourceAsStream("node.txt"), UTF8);
74 assertEquals(expected, this.output.toString());
77 private void createDefaultProtocol() throws ExecutionException, InterruptedException {
78 final WriteTransaction wt = getDataBroker().newWriteOnlyTransaction();
79 final Node node = new NodeBuilder()
80 .setNodeId(new NodeId(NODE_ID))
81 .addAugmentation(PcepTopologyNodeStatsAug.class,
82 new PcepTopologyNodeStatsAugBuilder().setPcepSessionState(createPcepSessionState())
86 final InstanceIdentifier<Node> topology = InstanceIdentifier.builder(NetworkTopology.class)
87 .child(Topology.class, new TopologyKey(new TopologyId(PCEP_TOPOLOGY)))
88 .child(Node.class, new NodeKey(new NodeId(NODE_ID))).build();
89 wt.put(LogicalDatastoreType.OPERATIONAL, topology, node, true);
93 private PcepSessionState createPcepSessionState() {
94 final LocalPref pref = new LocalPrefBuilder()
95 .setKeepalive((short) 30)
96 .setDeadtimer((short) 120)
97 .setIpAddress(IP_ADDRESS)
99 .addAugmentation(PcepEntityIdStatsAug.class, new PcepEntityIdStatsAugBuilder()
100 .setSpeakerEntityIdValue(SPEAKER_ID).build())
103 final PeerCapabilities capa = new PeerCapabilitiesBuilder()
104 .addAugmentation(StatefulCapabilitiesStatsAug.class, new StatefulCapabilitiesStatsAugBuilder()
106 .setInstantiation(true)
111 final ReplyTime reply = new ReplyTimeBuilder()
117 final ErrorMessages errorMsg = new ErrorMessagesBuilder()
118 .setReceivedErrorMsgCount(1L)
119 .setSentErrorMsgCount(2L)
122 final StatefulMessagesStatsAug statefulMsg = new StatefulMessagesStatsAugBuilder()
123 .setLastReceivedRptMsgTimestamp(1512043769L)
124 .setSentUpdMsgCount(1L)
125 .setReceivedRptMsgCount(2L)
126 .setSentInitMsgCount(3L)
129 final Messages messages = new MessagesBuilder()
130 .setLastSentMsgTimestamp(1512043828L)
131 .setUnknownMsgReceived(1)
133 .setReceivedMsgCount(4L)
135 .setErrorMessages(errorMsg)
136 .addAugmentation(StatefulMessagesStatsAug.class, statefulMsg)
139 return new PcepSessionStateBuilder()
140 .setSynchronized(true)
141 .setSessionDuration("0:00:01:26")
142 .setDelegatedLspsCount(1)
144 .setPeerPref(new PeerPrefBuilder(pref).build())
145 .setPeerCapabilities(capa)
146 .setMessages(messages)