Fix previous and add new PCE Junit test cases
[transportpce.git] / pce / src / test / java / org / opendaylight / transportpce / pce / networkanalyzer / PceLinkTest.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
13 import java.math.BigDecimal;
14 import java.util.ArrayList;
15 import java.util.Arrays;
16 import java.util.List;
17
18 import org.junit.Assert;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.opendaylight.transportpce.common.NetworkUtils;
22 import org.opendaylight.transportpce.test.AbstractTest;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.RatioDB;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationBuilder;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.OMSAttributesBuilder;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.SpanBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder;
51
52
53
54
55 public class PceLinkTest extends AbstractTest {
56
57     private static final String LINK_ID_FORMAT = "%1$s-%2$sto%3$s-%4$s";
58     private static final Long WAVE_LENGTH = 20L;
59     private PceLink pceLink = null;
60
61     @Before
62     public void setup() {
63
64     }
65
66     @Test
67     public void testBuildPceLinkRoadmToRoadm() {
68         Link link = createRoadmToRoadm("srcNode",
69                 "destNode",
70                 "srcTp", "destTp").build();
71
72         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
73         Node node = node1Builder.build();
74
75         PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
76                 OpenroadmNodeType.SRG, new NodeId("optical"), ServiceFormat.OMS, "test");
77         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
78     }
79
80     @Test
81     public void testBuildPceLinkOTN() {
82         Link link = createOTNLink("srcNode",
83                 "destNode",
84                 "srcTp", "destTp").build();
85
86         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
87         Node node = node1Builder.build();
88
89         PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
90                 OpenroadmNodeType.SRG, new NodeId("optical"), ServiceFormat.OMS, "test");
91         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
92
93     }
94
95     @Test
96     public void testBuildPceLinkExponder() {
97         Link link = createXponderLink("srcNode",
98                 "destNode",
99                 "srcTp", "destTp").build();
100
101         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
102         Node node = node1Builder.build();
103
104         PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
105                 OpenroadmNodeType.SRG, new NodeId("optical"), ServiceFormat.OMS, "test");
106         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
107     }
108
109     @Test
110     public void testCalcSpanOSNR() {
111         Link link = createRoadmToRoadm("srcNode",
112                 "destNode",
113                 "srcTp", "destTp").build();
114
115         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
116         Node node = node1Builder.build();
117
118         PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
119                 OpenroadmNodeType.SRG, new NodeId("optical"), ServiceFormat.OMS, "test");
120         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
121         Assert.assertNotNull(MapUtils.getOmsAttributesSpan(link));
122         Assert.assertNotNull(pceLink.calcSpanOSNR());
123         Assert.assertEquals(0, pceLink.getsrlgList().size());
124         Assert.assertTrue(7.857119000000001 == pceLink.calcSpanOSNR());
125         Assert.assertNull(pceLink.getOppositeLink());
126         Assert.assertNull(pceLink.getOppositeLink());
127         Assert.assertNotNull(pceLink.getDestTP());
128         Assert.assertNotNull(pceLink.getlinkType());
129         Assert.assertNotNull(pceLink.getLinkId());
130         Assert.assertNotNull(pceLink.getSourceId());
131         Assert.assertNotNull(pceLink.getDestId());
132         Assert.assertNotNull(pceLink.getClient());
133         Assert.assertNotNull(pceLink.getLatency());
134         Assert.assertNotNull(pceLink.getAvailableBandwidth());
135         Assert.assertNotNull(pceLink.getUsedBandwidth());
136         Assert.assertNotNull(pceLink.getsourceNetworkSupNodeId());
137         Assert.assertNotNull(pceLink.getdestNetworkSupNodeId());
138         Assert.assertNotNull(pceLink.getosnr());
139         Assert.assertNull(pceLink.getsourceCLLI());
140         Assert.assertNull(pceLink.getdestCLLI());
141     }
142
143     @Test
144     public void testPceOpticalNode() {
145         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
146         Node node = node1Builder.build();
147
148         PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
149                 OpenroadmNodeType.ROADM, new NodeId("optical"), ServiceFormat.OMS, "test");
150         pceOpticalNode.initSrgTps();
151         pceOpticalNode.initXndrTps();
152         pceOpticalNode.initWLlist();
153         Assert.assertFalse(pceOpticalNode.isValid());
154         Assert.assertFalse(pceOpticalNode.checkWL(12));
155         Assert.assertTrue(pceOpticalNode.checkTP("testTP"));
156     }
157
158     @Test(expected = NullPointerException.class)
159     public void testPceOTNNode() {
160         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
161         Node node = node1Builder.build();
162         Assert.assertNotNull(node.augmentation(Node1.class));
163         // OpenroadmNodeType nodeType = node.augmentation(Node1.class).;
164
165         PceOtnNode pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.SRG, node.getNodeId(), "otn", "serviceType");
166
167         //pceOtnNode.validateXponder(anodeId, znodeId);
168         /*
169         PceOtnNode pceOtnNode =
170                 new PceOtnNode(node, OpenroadmNodeType.DEGREE,
171                         new NodeId("optical"),
172                         ServiceFormat.OTM.getName(), "test");*/
173         // pceOtnNode.initXndrTps("mode");
174        /* pceOtnNode.initSrgTps();
175         pceOtnNode.initXndrTps();
176         pceOtnNode.initWLlist();
177         Assert.assertFalse(pceOtnNode.isValid());
178         Assert.assertFalse(pceOtnNode.checkWL(12));
179         Assert.assertTrue(pceOtnNode.checkTP("testTP"));*/
180     }
181
182     private static LinkBuilder createOTNLink(String srcNode, String destNode, String srcTp, String destTp) {
183         Link1Builder link1Builder = new Link1Builder()
184                 .setLinkType(OpenroadmLinkType.OTNLINK);
185
186         //create source link
187         return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder);
188
189     }
190
191     private static LinkBuilder createXponderLink(String srcNode, String destNode, String srcTp, String destTp) {
192         Link1Builder link1Builder = new Link1Builder()
193                 .setLinkType(OpenroadmLinkType.XPONDERINPUT);
194
195         //create source link
196         return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder);
197
198     }
199
200     private static LinkBuilder createLinkBuilder(
201             String srcNode, String destNode, String srcTp, String destTp, Link1Builder link1Builder) {
202         SourceBuilder ietfSrcLinkBldr =
203                 new SourceBuilder().setSourceNode(new NodeId(srcNode)).setSourceTp(srcTp);
204         //create destination link
205         DestinationBuilder ietfDestLinkBldr =
206                 new DestinationBuilder().setDestNode(new NodeId(destNode))
207                         .setDestTp(destTp);
208         LinkId linkId = new LinkId(String.format(LINK_ID_FORMAT, srcNode, srcTp, destNode, destTp));
209
210         LinkId oppositeLinkId = new LinkId("opposite");
211         //For setting up attributes for openRoadm augment
212         OMSAttributesBuilder omsAttributesBuilder =
213                 new OMSAttributesBuilder()
214                         .setSpan(new SpanBuilder()
215                                 .setSpanlossCurrent(new RatioDB(new BigDecimal("55")))
216                                 .setLinkConcatenation(Arrays.asList(
217                                         new LinkConcatenationBuilder()
218                                                 .setFiberType(LinkConcatenation.FiberType.Dsf)
219                                                 .build()
220                                 )).build()).setOppositeLink(oppositeLinkId);
221
222
223         LinkBuilder linkBuilder = new LinkBuilder()
224                 .setSource(ietfSrcLinkBldr.build())
225                 .setDestination(ietfDestLinkBldr.build())
226                 .setLinkId(linkId)
227                 .withKey(new LinkKey(linkId));
228
229         linkBuilder.addAugmentation(
230                 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class,
231                 link1Builder.build());
232
233         org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder linkBuilderNetworkLink
234                 = new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder()
235                 .setOMSAttributes(omsAttributesBuilder
236                         .build());
237
238
239         linkBuilder.addAugmentation(
240                 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1.class,
241                 linkBuilderNetworkLink.build());
242
243         return linkBuilder;
244     }
245
246     private static LinkBuilder createRoadmToRoadm(String srcNode, String destNode, String srcTp, String destTp) {
247         Link1Builder link1Builder = new Link1Builder()
248                 .setLinkLatency(100L)
249                 .setLinkType(OpenroadmLinkType.ROADMTOROADM);
250         return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder);
251
252     }
253
254     private List<SupportingNode> geSupportingNodes() {
255         List<SupportingNode> supportingNodes1 = new ArrayList<>();
256         /* supportingNodes1
257                 .add(new SupportingNodeBuilder()
258                         .setNodeRef(new NodeId("node 1"))
259                         .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))
260                         .build());*/
261
262         supportingNodes1
263                 .add(new SupportingNodeBuilder()
264                         .setNodeRef(new NodeId("node 2"))
265                         .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
266                         .build());
267         return supportingNodes1;
268     }
269
270     private NodeBuilder getNodeBuilder(List<SupportingNode> supportingNodes1) {
271
272
273         //update tp of nodes
274         TerminationPointBuilder xpdrTpBldr = new TerminationPointBuilder();
275         TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder();
276
277         tp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK);
278         xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
279         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1 =
280                 new Node1Builder().setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())).build();
281
282
283         return new NodeBuilder()
284                 .setNodeId(new NodeId("node 1"))
285                 .withKey(new NodeKey(new NodeId("node 1")))
286                 .addAugmentation(
287                         Node1.class, node1)
288                 .setSupportingNode(supportingNodes1);
289     }
290
291 }