2 * Copyright © 2020 Orange, Inc. and others. 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
9 package org.opendaylight.transportpce.pce.networkanalyzer;
11 import com.google.common.collect.ImmutableList;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.List;
15 import org.junit.Assert;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.mockito.Mockito;
19 import org.opendaylight.transportpce.common.NetworkUtils;
20 import org.opendaylight.transportpce.test.AbstractTest;
21 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengthsBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.DegreeAttributes;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.DegreeAttributesBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.SrgAttributes;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.SrgAttributesBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.CpAttributesBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.CtpAttributesBuilder;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.PpAttributesBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.RxTtpAttributesBuilder;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.TxTtpAttributesBuilder;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrClientAttributesBuilder;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrPortAttributesBuilder;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.TpSupportedInterfaces;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.If100GEODU4;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.If10GEODU2e;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.If1GEODU0;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.IfOCHOTU4ODU4;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder;
59 import org.opendaylight.yangtools.yang.common.Uint32;
63 public class PceOtnNodeTest extends AbstractTest {
65 private PceOtnNode pceOtnNode;
70 node = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.XPONDERNETWORK).build();
74 public void testInitXndrTpsODU4() {
75 pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
76 new NodeId("optical"), ServiceFormat.OMS.getName(), "ODU4");
77 pceOtnNode.initXndrTps("AZ");
78 pceOtnNode.checkAvailableTribPort();
79 pceOtnNode.checkAvailableTribSlot();
80 Assert.assertTrue("valid otn service type " , pceOtnNode.isValid());
81 Assert.assertFalse("checkWl returns by default false" , pceOtnNode.checkWL(5L));
82 Assert.assertNotNull("tpAvailableTribPort isn't null !" , pceOtnNode.getAvailableTribPorts());
86 public void testInitXndrTps10GE() {
87 pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
88 new NodeId("optical"), ServiceFormat.OMS.getName(), "10GE");
89 pceOtnNode.initXndrTps("mode");
90 pceOtnNode.checkAvailableTribPort();
91 pceOtnNode.checkAvailableTribSlot();
92 Assert.assertFalse("not valid otn service type" , pceOtnNode.isValid());
96 public void testInitXndrTps10GXponderClient1() {
97 node = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.XPONDERCLIENT).build();
98 pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.ROADM,
99 new NodeId("optical"), ServiceFormat.OMS.getName(), "10GE");
100 pceOtnNode.initXndrTps("mode");
101 pceOtnNode.checkAvailableTribPort();
102 pceOtnNode.checkAvailableTribSlot();
103 Assert.assertFalse("not valid otn service type", pceOtnNode.isValid());
104 Assert.assertTrue("this.nodeType isn'tOpenroadmNodeType.TPDR" ,
105 pceOtnNode.validateSwitchingPoolBandwidth(null,null,1L));
110 public void testInitXndrTps1GXponderClient() {
111 node = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.XPONDERCLIENT).build();
112 pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
113 new NodeId("optical"), ServiceFormat.OMS.getName(), "1GE");
114 pceOtnNode.initXndrTps("mode");
115 pceOtnNode.checkAvailableTribPort();
116 pceOtnNode.checkAvailableTribSlot();
117 Assert.assertFalse("not valid otn service type" , pceOtnNode.isValid());
121 public void testInitXndrTps10GXponderClient() {
122 pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
123 new NodeId("optical"), ServiceFormat.OMS.getName(), "10GE");
124 pceOtnNode.validateXponder("optical", "sl");
125 pceOtnNode.validateXponder("not optical", "sl");
126 pceOtnNode.initXndrTps("AZ");
127 pceOtnNode.checkAvailableTribPort();
128 pceOtnNode.checkAvailableTribSlot();
129 Assert.assertFalse("not valid otn service type" , pceOtnNode.isValid());
130 Assert.assertFalse("checkTp returns false by default " , pceOtnNode.checkTP("tp"));
135 public void testIsPceOtnNodeValid() {
136 pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
137 new NodeId("optical"), ServiceFormat.OMS.getName(), "10GE");
138 pceOtnNode.initXndrTps("AZ");
139 pceOtnNode.checkAvailableTribPort();
140 pceOtnNode.checkAvailableTribSlot();
141 Assert.assertFalse("not valid otn service Type" , pceOtnNode.isPceOtnNodeValid(pceOtnNode));
145 public void testIsPceOtnNodeValidNode() {
146 pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.DEGREE,
147 new NodeId("optical"), ServiceFormat.OMS.getName(), "100GE");
148 pceOtnNode.initXndrTps("AZ");
149 pceOtnNode.checkAvailableTribPort();
150 pceOtnNode.checkAvailableTribSlot();
151 pceOtnNode = Mockito.spy(pceOtnNode);
152 Mockito.when(pceOtnNode.getNodeId()).thenReturn(null);
153 Assert.assertFalse("not valid node , nodeId is null" , pceOtnNode.isPceOtnNodeValid(pceOtnNode));
158 public void testIsPceOtnNodeValidNodeTypeNull() {
159 pceOtnNode = new PceOtnNode(node, null,
160 new NodeId("optical"), ServiceFormat.OMS.getName(), "100GE");
161 pceOtnNode.initXndrTps("AZ");
162 pceOtnNode.checkAvailableTribPort();
163 pceOtnNode.checkAvailableTribSlot();
164 Assert.assertFalse("not valid type, nodeType is null " , pceOtnNode.isPceOtnNodeValid(pceOtnNode));
168 public void testIsPceOtnNodeValidNodeTypeDeg() {
169 pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.DEGREE,
170 new NodeId("optical"), ServiceFormat.OMS.getName(), "100GE");
171 pceOtnNode.initXndrTps("AZ");
172 Assert.assertFalse("not valid node , its type isn't one of MUXPDR or SWITCH or TPDR" ,
173 pceOtnNode.isPceOtnNodeValid(pceOtnNode));
177 public void testIsPceOtnNodeValidTrue() {
178 pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
179 new NodeId("optical"), ServiceFormat.OMS.getName(), "ODU4");
180 pceOtnNode.initXndrTps("AZ");
181 pceOtnNode.checkAvailableTribPort();
182 pceOtnNode.checkAvailableTribSlot();
183 Assert.assertTrue("valid otn service type ", pceOtnNode.isPceOtnNodeValid(pceOtnNode));
187 public void testIsPceOtnNodeValidChecksw() {
188 node = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.XPONDERCLIENT).build();
189 pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
190 new NodeId("optical"), ServiceFormat.OMS.getName(), "1GE");
191 pceOtnNode.initXndrTps("mode");
192 Assert.assertFalse("not valid otn service Type" , pceOtnNode.isPceOtnNodeValid(pceOtnNode));
195 private List<SupportingNode> geSupportingNodes() {
196 List<SupportingNode> supportingNodes1 = new ArrayList<>();
198 .add(new SupportingNodeBuilder()
199 .setNodeRef(new NodeId("node 1"))
200 .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))
204 .add(new SupportingNodeBuilder()
205 .setNodeRef(new NodeId("node 2"))
206 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
208 return supportingNodes1;
211 private NodeBuilder getNodeBuilder(List<SupportingNode> supportingNodes1, OpenroadmTpType openroadmTpType) {
213 TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType);
214 TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(openroadmTpType);
215 xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
217 xpdrTpBldr.addAugmentation(
218 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
219 .TerminationPoint1.class,
220 createAnother2TerminationPoint(openroadmTpType).build());
221 xpdrTpBldr.addAugmentation(
222 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1.class,
223 createAnotherTerminationPoint(openroadmTpType).build());
225 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1();
226 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 =
228 .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build()))
232 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 nodeIetf =
233 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
235 .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build()))
238 return new NodeBuilder()
239 .setNodeId(new NodeId("node_test"))
240 .withKey(new NodeKey(new NodeId("node 1")))
242 Node1.class, node1Rev180226)
245 .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class,
249 .yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class,
252 .setSupportingNode(supportingNodes1);
255 private NodeBuilder getNodeBuilderEmpty(List<SupportingNode> supportingNodes1, OpenroadmTpType openroadmTpType) {
257 TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType);
258 TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(openroadmTpType);
259 xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
260 xpdrTpBldr.addAugmentation(
261 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
262 .TerminationPoint1.class,
263 createAnotherTerminationPoint(openroadmTpType).build());
265 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1Empty();
266 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 =
268 .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build()))
272 return new NodeBuilder()
273 .setNodeId(new NodeId("node_test"))
274 .withKey(new NodeKey(new NodeId("node 1")))
276 Node1.class, node1Rev180226)
278 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class,
280 .setSupportingNode(supportingNodes1);
283 private org.opendaylight
284 .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 getNode1() {
285 return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1Builder()
286 .setSrgAttributes(getSrgAttributes())
287 .setDegreeAttributes(getDegAttributes())
291 private org.opendaylight
292 .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 getNode1Empty() {
293 return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1Builder()
294 .setSrgAttributes(getEmptySrgAttributes())
295 .setDegreeAttributes(getEmptyDegAttributes())
299 private DegreeAttributes getDegAttributes() {
300 return (new DegreeAttributesBuilder())
301 .setAvailableWavelengths(
302 Collections.singletonList(new AvailableWavelengthsBuilder()
308 private SrgAttributes getSrgAttributes() {
309 return new SrgAttributesBuilder().setAvailableWavelengths(create96AvalWaveSrg()).build();
312 private DegreeAttributes getEmptyDegAttributes() {
313 return (new DegreeAttributesBuilder())
314 .setAvailableWavelengths(
319 private SrgAttributes getEmptySrgAttributes() {
320 List<org.opendaylight.yang.gen
321 .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
322 waveList = new ArrayList<>();
323 return new SrgAttributesBuilder().setAvailableWavelengths(waveList).build();
326 private TerminationPointBuilder getTerminationPointBuilder(OpenroadmTpType openroadmTpType) {
327 return new TerminationPointBuilder()
328 .setTpId(new TpId("2"))
330 org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130
331 .TerminationPoint1.class,
332 createOTNTerminationPoint(openroadmTpType).build());
335 private TerminationPoint1Builder getTerminationPoint1Builder(OpenroadmTpType openroadmTpType) {
337 return new TerminationPoint1Builder()
338 .setTpType(openroadmTpType);
342 private org.opendaylight.yang.gen
343 .v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder createAnotherTerminationPoint(
344 OpenroadmTpType openroadmTpType
346 return new org.opendaylight
347 .yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder()
348 .setTpType(openroadmTpType)
349 .setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
350 .setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
351 .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
352 .setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
353 .setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(new ArrayList<>()).build())
354 .setXpdrClientAttributes((new XpdrClientAttributesBuilder()).build())
355 .setXpdrPortAttributes((new XpdrPortAttributesBuilder()).build())
356 .setXpdrNetworkAttributes(new XpdrNetworkAttributesBuilder()
357 .setTailEquipmentId("destNode" + "--" + "destTp").build());
360 private org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130
361 .TerminationPoint1Builder createOTNTerminationPoint(OpenroadmTpType openroadmTpType) {
363 SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
364 .setIfCapType(IfOCHOTU4ODU4.class)
367 SupportedInterfaceCapability supIfCapa1 = new SupportedInterfaceCapabilityBuilder()
368 .setIfCapType(If100GEODU4.class)
370 SupportedInterfaceCapability supIfCapa2 = new SupportedInterfaceCapabilityBuilder()
371 .setIfCapType(If10GEODU2e.class)
373 SupportedInterfaceCapability supIfCapa3 = new SupportedInterfaceCapabilityBuilder()
374 .setIfCapType(If1GEODU0.class)
377 List<SupportedInterfaceCapability> supIfCapaList = new ArrayList<>();
378 supIfCapaList.add(supIfCapa);
379 supIfCapaList.add(supIfCapa1);
380 supIfCapaList.add(supIfCapa2);
381 supIfCapaList.add(supIfCapa3);
383 TpSupportedInterfaces tpSupIf = new TpSupportedInterfacesBuilder()
384 .setSupportedInterfaceCapability(supIfCapaList)
387 XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder();
389 return new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130
390 .TerminationPoint1Builder()
391 .setTpType(openroadmTpType)
392 .setTpSupportedInterfaces(tpSupIf)
393 .setXpdrTpPortConnectionAttributes(xtpcaBldr.build());
396 private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
397 .TerminationPoint1Builder createAnother2TerminationPoint(OpenroadmTpType openroadmTpType) {
398 return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
399 .TerminationPoint1Builder()
400 .setTpType(openroadmTpType);
403 private static List<org.opendaylight.yang.gen
404 .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths> create96AvalWaveSrg() {
406 List<org.opendaylight.yang.gen
407 .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
408 waveList = new ArrayList<>();
410 for (int i = 1; i < 97; i++) {
411 org.opendaylight.yang.gen
412 .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengthsBuilder
413 avalBldr = new org.opendaylight.yang.gen
414 .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengthsBuilder()
415 .setIndex(Uint32.valueOf(i))
416 .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes
417 .AvailableWavelengthsKey(Uint32.valueOf(i)));
418 waveList.add(avalBldr.build());