65ec2b9eb9d2eec4ef3504b0b7b431a308bc3bc1
[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     private List<SupportingNode> geSupportingNodes() {
131         List<SupportingNode> supportingNodes1 = new ArrayList<>();
132         supportingNodes1
133                 .add(new SupportingNodeBuilder()
134                         .setNodeRef(new NodeId("node 1"))
135                         .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))
136                         .build());
137
138         supportingNodes1
139                 .add(new SupportingNodeBuilder()
140                         .setNodeRef(new NodeId("node 2"))
141                         .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
142                         .build());
143         return supportingNodes1;
144     }
145
146     private NodeBuilder getNodeBuilder(List<SupportingNode> supportingNodes1, OpenroadmTpType openroadmTpType) {
147
148         TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType);
149         TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(openroadmTpType);
150         xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
151
152         xpdrTpBldr.addAugmentation(
153                 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
154                         .TerminationPoint1.class,
155                 createAnother2TerminationPoint(openroadmTpType).build());
156         xpdrTpBldr.addAugmentation(
157                 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1.class,
158                 createAnotherTerminationPoint(openroadmTpType).build());
159
160         org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1();
161         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 =
162                 new Node1Builder()
163                         .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build()))
164                         .build();
165
166
167         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 nodeIetf =
168                 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
169                         .Node1Builder()
170                         .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build()))
171                         .build();
172
173         return new NodeBuilder()
174                 .setNodeId(new NodeId("node_test"))
175                 .withKey(new NodeKey(new NodeId("node 1")))
176                 .addAugmentation(
177                         Node1.class, node1Rev180226)
178                 .addAugmentation(
179                         org.opendaylight
180                                 .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class,
181                         node1)
182                 .addAugmentation(
183                         org.opendaylight
184                                 .yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class,
185                         nodeIetf
186                 )
187                 .setSupportingNode(supportingNodes1);
188     }
189
190     private NodeBuilder getNodeBuilderEmpty(List<SupportingNode> supportingNodes1, OpenroadmTpType openroadmTpType) {
191
192         TerminationPoint1Builder tp1Bldr = getTerminationPoint1Builder(openroadmTpType);
193         TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder(openroadmTpType);
194         xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
195         xpdrTpBldr.addAugmentation(
196                 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
197                         .TerminationPoint1.class,
198                 createAnotherTerminationPoint(openroadmTpType).build());
199
200         org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 node1 = getNode1Empty();
201         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 =
202                 new Node1Builder()
203                         .setTerminationPoint(ImmutableList.of(xpdrTpBldr.build()))
204                         .build();
205
206
207         return new NodeBuilder()
208                 .setNodeId(new NodeId("node_test"))
209                 .withKey(new NodeKey(new NodeId("node 1")))
210                 .addAugmentation(
211                         Node1.class, node1Rev180226)
212                 .addAugmentation(
213                         org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class,
214                         node1)
215                 .setSupportingNode(supportingNodes1);
216     }
217
218     private org.opendaylight
219             .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 getNode1() {
220         return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1Builder()
221                 .setSrgAttributes(getSrgAttributes())
222                 .setDegreeAttributes(getDegAttributes())
223                 .build();
224     }
225
226     private org.opendaylight
227             .yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1 getNode1Empty() {
228         return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1Builder()
229                 .setSrgAttributes(getEmptySrgAttributes())
230                 .setDegreeAttributes(getEmptyDegAttributes())
231                 .build();
232     }
233
234     private DegreeAttributes getDegAttributes() {
235         return (new DegreeAttributesBuilder())
236                 .setAvailableWavelengths(
237                         Collections.singletonList(new AvailableWavelengthsBuilder()
238                                 .setIndex(20L)
239                                 .build()))
240                 .build();
241     }
242
243     private SrgAttributes getSrgAttributes() {
244         return new SrgAttributesBuilder().setAvailableWavelengths(create96AvalWaveSrg()).build();
245     }
246
247     private DegreeAttributes getEmptyDegAttributes() {
248         return (new DegreeAttributesBuilder())
249                 .setAvailableWavelengths(
250                         new ArrayList<>())
251                 .build();
252     }
253
254     private SrgAttributes getEmptySrgAttributes() {
255         List<org.opendaylight.yang.gen
256                 .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
257                 waveList = new ArrayList<>();
258         return new SrgAttributesBuilder().setAvailableWavelengths(waveList).build();
259     }
260
261     private TerminationPointBuilder getTerminationPointBuilder(OpenroadmTpType openroadmTpType) {
262         return new TerminationPointBuilder()
263                 .setTpId(new TpId("2"))
264                 .addAugmentation(
265                         org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130
266                                 .TerminationPoint1.class,
267                         createOTNTerminationPoint(openroadmTpType).build());
268     }
269
270     private TerminationPoint1Builder getTerminationPoint1Builder(OpenroadmTpType openroadmTpType) {
271
272         return new TerminationPoint1Builder()
273                 .setTpType(openroadmTpType);
274
275     }
276
277     private org.opendaylight.yang.gen
278             .v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder createAnotherTerminationPoint(
279             OpenroadmTpType openroadmTpType
280     ) {
281         return new org.opendaylight
282                 .yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder()
283                 .setTpType(openroadmTpType)
284                 .setCtpAttributes((new CtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
285                 .setCpAttributes((new CpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
286                 .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
287                 .setRxTtpAttributes((new RxTtpAttributesBuilder()).setUsedWavelengths(new ArrayList<>()).build())
288                 .setPpAttributes((new PpAttributesBuilder()).setUsedWavelength(new ArrayList<>()).build())
289                 .setXpdrClientAttributes((new XpdrClientAttributesBuilder()).build())
290                 .setXpdrPortAttributes((new XpdrPortAttributesBuilder()).build())
291                 .setXpdrNetworkAttributes(new XpdrNetworkAttributesBuilder()
292                         .setTailEquipmentId("destNode" + "--" + "destTp").build());
293     }
294
295     private org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130
296             .TerminationPoint1Builder createOTNTerminationPoint(OpenroadmTpType openroadmTpType) {
297
298         SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
299                 .setIfCapType(IfOCHOTU4ODU4.class)
300                 .build();
301
302         SupportedInterfaceCapability supIfCapa1 = new SupportedInterfaceCapabilityBuilder()
303                 .setIfCapType(If100GEODU4.class)
304                 .build();
305         SupportedInterfaceCapability supIfCapa2 = new SupportedInterfaceCapabilityBuilder()
306                 .setIfCapType(If10GEODU2e.class)
307                 .build();
308         SupportedInterfaceCapability supIfCapa3 = new SupportedInterfaceCapabilityBuilder()
309                 .setIfCapType(If1GEODU0.class)
310                 .build();
311
312         List<SupportedInterfaceCapability> supIfCapaList = new ArrayList<>();
313         supIfCapaList.add(supIfCapa);
314         supIfCapaList.add(supIfCapa1);
315         supIfCapaList.add(supIfCapa2);
316         supIfCapaList.add(supIfCapa3);
317
318         TpSupportedInterfaces tpSupIf = new TpSupportedInterfacesBuilder()
319                 .setSupportedInterfaceCapability(supIfCapaList)
320                 .build();
321
322         XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder();
323
324         return new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130
325                 .TerminationPoint1Builder()
326                 .setTpType(openroadmTpType)
327                 .setTpSupportedInterfaces(tpSupIf)
328                 .setXpdrTpPortConnectionAttributes(xtpcaBldr.build());
329     }
330
331     private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
332             .TerminationPoint1Builder createAnother2TerminationPoint(OpenroadmTpType openroadmTpType) {
333         return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130
334                 .TerminationPoint1Builder()
335                 .setTpType(openroadmTpType);
336     }
337
338     private static List<org.opendaylight.yang.gen
339             .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths> create96AvalWaveSrg() {
340
341         List<org.opendaylight.yang.gen
342                 .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengths>
343                 waveList = new ArrayList<>();
344
345         for (int i = 1; i < 97; i++) {
346             org.opendaylight.yang.gen
347                     .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengthsBuilder
348                     avalBldr = new org.opendaylight.yang.gen
349                     .v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengthsBuilder()
350                     .setIndex(Uint32.valueOf(i))
351                     .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes
352                             .AvailableWavelengthsKey(Uint32.valueOf(i)));
353             waveList.add(avalBldr.build());
354         }
355         return waveList;
356     }
357
358 }