b0276c81695a81883a352b2a05952e7f470791d6
[transportpce.git] / pce / src / test / java / org / opendaylight / transportpce / pce / networkanalyzer / PceOtnNodeTest.java
1 /*
2  * Copyright © 2020 Orange, Inc. and others.  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
9 package org.opendaylight.transportpce.pce.networkanalyzer;
10
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.opendaylight.transportpce.common.NetworkUtils;
19 import org.opendaylight.transportpce.test.AbstractTest;
20 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1;
21 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1Builder;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengthsBuilder;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.DegreeAttributes;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.DegreeAttributesBuilder;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.SrgAttributes;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.SrgAttributesBuilder;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.CpAttributesBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.CtpAttributesBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.PpAttributesBuilder;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.RxTtpAttributesBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.TxTtpAttributesBuilder;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrClientAttributesBuilder;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.node.termination.point.XpdrPortAttributesBuilder;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.TpSupportedInterfaces;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.If100GEODU4;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.If10GEODU2e;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.If1GEODU0;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.IfOCHOTU4ODU4;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder;
58 import org.opendaylight.yangtools.yang.common.Uint32;
59
60
61
62 public class PceOtnNodeTest extends AbstractTest {
63
64     private PceOtnNode pceOtnNode;
65     private Node node;
66
67     @Before
68     public void setUp() {
69         node = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.XPONDERNETWORK).build();
70     }
71
72     @Test
73     public void testInitXndrTpsODU4() {
74         pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
75                 new NodeId("optical"), ServiceFormat.OMS.getName(), "ODU4");
76         pceOtnNode.initXndrTps("AZ");
77         pceOtnNode.checkAvailableTribPort();
78         pceOtnNode.checkAvailableTribSlot();
79         Assert.assertTrue(pceOtnNode.isValid());
80         Assert.assertFalse(pceOtnNode.checkWL(5L));
81         Assert.assertNotNull(pceOtnNode.getAvailableTribPorts());
82     }
83
84     @Test
85     public void testInitXndrTps10GE() {
86         pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
87                 new NodeId("optical"), ServiceFormat.OMS.getName(), "10GE");
88         pceOtnNode.initXndrTps("mode");
89         pceOtnNode.checkAvailableTribPort();
90         pceOtnNode.checkAvailableTribSlot();
91         Assert.assertFalse(pceOtnNode.isValid());
92     }
93
94     @Test
95     public void testInitXndrTps10GXponderClient1() {
96         node = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.XPONDERCLIENT).build();
97         pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.ROADM,
98                 new NodeId("optical"), ServiceFormat.OMS.getName(), "10GE");
99         pceOtnNode.initXndrTps("mode");
100         pceOtnNode.checkAvailableTribPort();
101         pceOtnNode.checkAvailableTribSlot();
102         Assert.assertFalse(pceOtnNode.isValid());
103     }
104
105     @Test
106     public void testInitXndrTps1GXponderClient() {
107         node = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.XPONDERCLIENT).build();
108         pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
109                 new NodeId("optical"), ServiceFormat.OMS.getName(), "1GE");
110         pceOtnNode.initXndrTps("mode");
111         pceOtnNode.checkAvailableTribPort();
112         pceOtnNode.checkAvailableTribSlot();
113         Assert.assertFalse(pceOtnNode.isValid());
114     }
115
116     @Test
117     public void testInitXndrTps10GXponderClient() {
118         pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
119                 new NodeId("optical"), ServiceFormat.OMS.getName(), "10GE");
120         pceOtnNode.validateXponder("optical", "sl");
121         pceOtnNode.validateXponder("not optical", "sl");
122         pceOtnNode.initXndrTps("AZ");
123         pceOtnNode.checkAvailableTribPort();
124         pceOtnNode.checkAvailableTribSlot();
125         Assert.assertFalse(pceOtnNode.isValid());
126         Assert.assertFalse(pceOtnNode.checkTP("tp"));
127
128     }
129
130     @Test
131     public void testIsPceOtnNodeValid() {
132         pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
133                 new NodeId("optical"), ServiceFormat.OMS.getName(), "10GE");
134         pceOtnNode.initXndrTps("AZ");
135         Assert.assertFalse(pceOtnNode.isPceOtnNodeValid(pceOtnNode));
136     }
137
138     @Test
139     public void testIsPceOtnNodeValidNodeTypeNull() {
140         pceOtnNode = new PceOtnNode(node, null,
141                 new NodeId("optical"), ServiceFormat.OMS.getName(), "100GE");
142         pceOtnNode.initXndrTps("AZ");
143         Assert.assertFalse(pceOtnNode.isPceOtnNodeValid(pceOtnNode));
144     }
145
146     @Test
147     public void testIsPceOtnNodeValidNodeTypeDeg() {
148         pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.DEGREE,
149                 new NodeId("optical"), ServiceFormat.OMS.getName(), "100GE");
150         pceOtnNode.initXndrTps("AZ");
151         Assert.assertFalse(pceOtnNode.isPceOtnNodeValid(pceOtnNode));
152     }
153
154     @Test
155     public void testIsPceOtnNodeValidTrue() {
156         pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
157                 new NodeId("optical"), ServiceFormat.OMS.getName(), "ODU4");
158         pceOtnNode.initXndrTps("AZ");
159         Assert.assertTrue(pceOtnNode.isPceOtnNodeValid(pceOtnNode));
160     }
161
162     @Test
163     public void testIsPceOtnNodeValidChecksw() {
164         node = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.XPONDERCLIENT).build();
165         pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.MUXPDR,
166                 new NodeId("optical"), ServiceFormat.OMS.getName(), "1GE");
167         pceOtnNode.initXndrTps("mode");
168         pceOtnNode.isPceOtnNodeValid(pceOtnNode);
169     }
170
171     private List<SupportingNode> geSupportingNodes() {
172         List<SupportingNode> supportingNodes1 = new ArrayList<>();
173         supportingNodes1
174                 .add(new SupportingNodeBuilder()
175                         .setNodeRef(new NodeId("node 1"))
176                         .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))
177                         .build());
178
179         supportingNodes1
180                 .add(new SupportingNodeBuilder()
181                         .setNodeRef(new NodeId("node 2"))
182                         .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
183                         .build());
184         return supportingNodes1;
185     }
186
187     private NodeBuilder getNodeBuilder(List<SupportingNode> supportingNodes1, OpenroadmTpType openroadmTpType) {
188
189         TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType);
190         TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(openroadmTpType);
191         xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
192
193         xpdrTpBldr.addAugmentation(
194                 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
195                         .TerminationPoint1.class,
196                 createAnother2TerminationPoint(openroadmTpType).build());
197         xpdrTpBldr.addAugmentation(
198                 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1.class,
199                 createAnotherTerminationPoint(openroadmTpType).build());
200
201         org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1();
202         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 =
203                 new Node1Builder()
204                         .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build()))
205                         .build();
206
207
208         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 nodeIetf =
209                 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
210                         .Node1Builder()
211                         .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build()))
212                         .build();
213
214         return new NodeBuilder()
215                 .setNodeId(new NodeId("node_test"))
216                 .withKey(new NodeKey(new NodeId("node 1")))
217                 .addAugmentation(
218                         Node1.class, node1Rev180226)
219                 .addAugmentation(
220                         org.opendaylight
221                                 .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class,
222                         node1)
223                 .addAugmentation(
224                         org.opendaylight
225                                 .yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class,
226                         nodeIetf
227                 )
228                 .setSupportingNode(supportingNodes1);
229     }
230
231     private NodeBuilder getNodeBuilderEmpty(List<SupportingNode> supportingNodes1, OpenroadmTpType openroadmTpType) {
232
233         TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType);
234         TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(openroadmTpType);
235         xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
236         xpdrTpBldr.addAugmentation(
237                 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
238                         .TerminationPoint1.class,
239                 createAnotherTerminationPoint(openroadmTpType).build());
240
241         org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1Empty();
242         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 =
243                 new Node1Builder()
244                         .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build()))
245                         .build();
246
247
248         return new NodeBuilder()
249                 .setNodeId(new NodeId("node_test"))
250                 .withKey(new NodeKey(new NodeId("node 1")))
251                 .addAugmentation(
252                         Node1.class, node1Rev180226)
253                 .addAugmentation(
254                         org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class,
255                         node1)
256                 .setSupportingNode(supportingNodes1);
257     }
258
259     private org.opendaylight
260             .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 getNode1() {
261         return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1Builder()
262                 .setSrgAttributes(getSrgAttributes())
263                 .setDegreeAttributes(getDegAttributes())
264                 .build();
265     }
266
267     private org.opendaylight
268             .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 getNode1Empty() {
269         return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1Builder()
270                 .setSrgAttributes(getEmptySrgAttributes())
271                 .setDegreeAttributes(getEmptyDegAttributes())
272                 .build();
273     }
274
275     private DegreeAttributes getDegAttributes() {
276         return (new DegreeAttributesBuilder())
277                 .setAvailableWavelengths(
278                         Collections.singletonList(new AvailableWavelengthsBuilder()
279                                 .setIndex(20L)
280                                 .build()))
281                 .build();
282     }
283
284     private SrgAttributes getSrgAttributes() {
285         return new SrgAttributesBuilder().setAvailableWavelengths(create96AvalWaveSrg()).build();
286     }
287
288     private DegreeAttributes getEmptyDegAttributes() {
289         return (new DegreeAttributesBuilder())
290                 .setAvailableWavelengths(
291                         new ArrayList<>())
292                 .build();
293     }
294
295     private SrgAttributes getEmptySrgAttributes() {
296         List<org.opendaylight.yang.gen
297                 .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
298                 waveList = new ArrayList<>();
299         return new SrgAttributesBuilder().setAvailableWavelengths(waveList).build();
300     }
301
302     private TerminationPointBuilder getTerminationPointBuilder(OpenroadmTpType openroadmTpType) {
303         return new TerminationPointBuilder()
304                 .setTpId(new TpId("2"))
305                 .addAugmentation(
306                         org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130
307                                 .TerminationPoint1.class,
308                         createOTNTerminationPoint(openroadmTpType).build());
309     }
310
311     private TerminationPoint1Builder getTerminationPoint1Builder(OpenroadmTpType openroadmTpType) {
312
313         return new TerminationPoint1Builder()
314                 .setTpType(openroadmTpType);
315
316     }
317
318     private org.opendaylight.yang.gen
319             .v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder createAnotherTerminationPoint(
320             OpenroadmTpType openroadmTpType
321     ) {
322         return new org.opendaylight
323                 .yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder()
324                 .setTpType(openroadmTpType)
325                 .setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
326                 .setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
327                 .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
328                 .setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
329                 .setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(new ArrayList<>()).build())
330                 .setXpdrClientAttributes((new XpdrClientAttributesBuilder()).build())
331                 .setXpdrPortAttributes((new XpdrPortAttributesBuilder()).build())
332                 .setXpdrNetworkAttributes(new XpdrNetworkAttributesBuilder()
333                         .setTailEquipmentId("destNode" + "--" + "destTp").build());
334     }
335
336     private org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130
337             .TerminationPoint1Builder createOTNTerminationPoint(OpenroadmTpType openroadmTpType) {
338
339         SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
340                 .setIfCapType(IfOCHOTU4ODU4.class)
341                 .build();
342
343         SupportedInterfaceCapability supIfCapa1 = new SupportedInterfaceCapabilityBuilder()
344                 .setIfCapType(If100GEODU4.class)
345                 .build();
346         SupportedInterfaceCapability supIfCapa2 = new SupportedInterfaceCapabilityBuilder()
347                 .setIfCapType(If10GEODU2e.class)
348                 .build();
349         SupportedInterfaceCapability supIfCapa3 = new SupportedInterfaceCapabilityBuilder()
350                 .setIfCapType(If1GEODU0.class)
351                 .build();
352
353         List<SupportedInterfaceCapability> supIfCapaList = new ArrayList<>();
354         supIfCapaList.add(supIfCapa);
355         supIfCapaList.add(supIfCapa1);
356         supIfCapaList.add(supIfCapa2);
357         supIfCapaList.add(supIfCapa3);
358
359         TpSupportedInterfaces tpSupIf = new TpSupportedInterfacesBuilder()
360                 .setSupportedInterfaceCapability(supIfCapaList)
361                 .build();
362
363         XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder();
364
365         return new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130
366                 .TerminationPoint1Builder()
367                 .setTpType(openroadmTpType)
368                 .setTpSupportedInterfaces(tpSupIf)
369                 .setXpdrTpPortConnectionAttributes(xtpcaBldr.build());
370     }
371
372     private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
373             .TerminationPoint1Builder createAnother2TerminationPoint(OpenroadmTpType openroadmTpType) {
374         return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
375                 .TerminationPoint1Builder()
376                 .setTpType(openroadmTpType);
377     }
378
379     private static List<org.opendaylight.yang.gen
380             .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths> create96AvalWaveSrg() {
381
382         List<org.opendaylight.yang.gen
383                 .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
384                 waveList = new ArrayList<>();
385
386         for (int i = 1; i < 97; i++) {
387             org.opendaylight.yang.gen
388                     .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengthsBuilder
389                     avalBldr = new org.opendaylight.yang.gen
390                     .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengthsBuilder()
391                     .setIndex(Uint32.valueOf(i))
392                     .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes
393                             .AvailableWavelengthsKey(Uint32.valueOf(i)));
394             waveList.add(avalBldr.build());
395         }
396         return waveList;
397     }
398
399 }