Add new revision for pcep types model
[bgpcep.git] / pcep / topology / cli / src / test / java / org / opendaylight / protocol / pcep / cli / utils / PcepStateUtilsTest.java
1 /*
2  * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.protocol.pcep.cli.utils;
9
10 import static org.junit.Assert.assertEquals;
11
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;
51
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);
61
62     @Test
63     public void testNodeStateNotFound() {
64         PcepStateUtils.displayNodeState(getDataBroker(), this.stream, PCEP_TOPOLOGY, NODE_ID);
65         assertEquals(RIB_NOT_FOUND, this.output.toString());
66     }
67
68     @Test
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());
75     }
76
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())
83                                 .build())
84                 .build();
85
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);
90         wt.commit().get();
91     }
92
93     private PcepSessionState createPcepSessionState() {
94         final LocalPref pref = new LocalPrefBuilder()
95                 .setKeepalive((short) 30)
96                 .setDeadtimer((short) 120)
97                 .setIpAddress(IP_ADDRESS)
98                 .setSessionId(0)
99                 .addAugmentation(PcepEntityIdStatsAug.class, new PcepEntityIdStatsAugBuilder()
100                         .setSpeakerEntityIdValue(SPEAKER_ID).build())
101                 .build();
102
103         final PeerCapabilities capa = new PeerCapabilitiesBuilder()
104                 .addAugmentation(StatefulCapabilitiesStatsAug.class, new StatefulCapabilitiesStatsAugBuilder()
105                         .setStateful(true)
106                         .setInstantiation(true)
107                         .setActive(true)
108                         .build())
109                 .build();
110
111         final ReplyTime reply = new ReplyTimeBuilder()
112                 .setAverageTime(1L)
113                 .setMaxTime(3L)
114                 .setMinTime(2L)
115                 .build();
116
117         final ErrorMessages errorMsg = new ErrorMessagesBuilder()
118                 .setReceivedErrorMsgCount(1L)
119                 .setSentErrorMsgCount(2L)
120                 .build();
121
122         final StatefulMessagesStatsAug statefulMsg = new StatefulMessagesStatsAugBuilder()
123                 .setLastReceivedRptMsgTimestamp(1512043769L)
124                 .setSentUpdMsgCount(1L)
125                 .setReceivedRptMsgCount(2L)
126                 .setSentInitMsgCount(3L)
127                 .build();
128
129         final Messages messages = new MessagesBuilder()
130                 .setLastSentMsgTimestamp(1512043828L)
131                 .setUnknownMsgReceived(1)
132                 .setSentMsgCount(5L)
133                 .setReceivedMsgCount(4L)
134                 .setReplyTime(reply)
135                 .setErrorMessages(errorMsg)
136                 .addAugmentation(StatefulMessagesStatsAug.class, statefulMsg)
137                 .build();
138
139         return new PcepSessionStateBuilder()
140                 .setSynchronized(true)
141                 .setSessionDuration("0:00:01:26")
142                 .setDelegatedLspsCount(1)
143                 .setLocalPref(pref)
144                 .setPeerPref(new PeerPrefBuilder(pref).build())
145                 .setPeerCapabilities(capa)
146                 .setMessages(messages)
147                 .build();
148     }
149 }