2 * Copyright © 2020 Orange Labs, 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
8 package org.opendaylight.transportpce.networkmodel.util;
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertFalse;
12 import static org.junit.jupiter.api.Assertions.assertNotNull;
13 import static org.junit.jupiter.api.Assertions.assertThrows;
14 import static org.junit.jupiter.api.Assertions.assertTrue;
15 import static org.mockito.ArgumentMatchers.any;
16 import static org.mockito.Mockito.never;
17 import static org.mockito.Mockito.verify;
18 import static org.mockito.Mockito.when;
20 import com.google.common.util.concurrent.FluentFuture;
21 import com.google.common.util.concurrent.ListenableFuture;
22 import java.util.ArrayList;
23 import java.util.Arrays;
24 import java.util.List;
25 import java.util.Optional;
26 import java.util.concurrent.ExecutionException;
27 import java.util.concurrent.Executor;
28 import java.util.concurrent.TimeUnit;
29 import java.util.concurrent.TimeoutException;
30 import java.util.stream.Collectors;
31 import org.junit.jupiter.api.Test;
32 import org.junit.jupiter.api.extension.ExtendWith;
33 import org.mockito.Mock;
34 import org.mockito.invocation.InvocationOnMock;
35 import org.mockito.junit.jupiter.MockitoExtension;
36 import org.mockito.stubbing.Answer;
37 import org.opendaylight.mdsal.common.api.CommitInfo;
38 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
39 import org.opendaylight.transportpce.common.NetworkUtils;
40 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
41 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
42 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
43 import org.opendaylight.transportpce.networkmodel.util.test.NetworkmodelTestUtil;
44 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.Nodes;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMaps;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
61 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
63 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
64 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
65 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder;
66 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
67 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder;
68 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder;
69 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint;
70 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
71 import org.opendaylight.yangtools.yang.common.Uint16;
74 @ExtendWith(MockitoExtension.class)
75 public class OpenRoadmTopologyTest {
77 private NetworkTransactionService networkTransactionService;
80 void createTopologyShardForDegreeTest() {
81 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 2, List.of());
82 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
83 assertNotNull(topologyShard);
84 assertEquals(2, topologyShard.getNodes().size(), "Should contain 2 Degree nodes only");
85 assertEquals(2, topologyShard.getLinks().size(), "Should contain 2 links");
86 List<Node> nodes = topologyShard.getNodes().stream()
87 .sorted((n1, n2) -> n1.getNodeId().getValue().compareTo(n2.getNodeId().getValue()))
88 .collect(Collectors.toList());
89 for (Node node : nodes) {
90 String nodeNb = node.getNodeId().getValue().substring(node.getNodeId().getValue().length() - 1);
91 checkDegreeNode(nodeNb, node);
94 List<Link> links = topologyShard.getLinks().stream()
95 .sorted((l1, l2) -> l1.getLinkId().getValue().compareTo(l2.getLinkId().getValue()))
96 .collect(Collectors.toList());
97 assertEquals(2, links.size(), "Should contain 2 express links");
98 assertEquals("ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX", links.get(0).getLinkId().getValue());
99 assertEquals("ROADMA01-DEG1", links.get(0).getSource().getSourceNode().getValue());
100 assertEquals("DEG1-CTP-TXRX", links.get(0).getSource().getSourceTp().getValue());
101 assertEquals("ROADMA01-DEG2", links.get(0).getDestination().getDestNode().getValue());
102 assertEquals("DEG2-CTP-TXRX", links.get(0).getDestination().getDestTp().getValue());
103 assertEquals("ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX", links.get(1).getLinkId().getValue());
104 assertEquals("ROADMA01-DEG2", links.get(1).getSource().getSourceNode().getValue());
105 assertEquals("DEG2-CTP-TXRX", links.get(1).getSource().getSourceTp().getValue());
106 assertEquals("ROADMA01-DEG1", links.get(1).getDestination().getDestNode().getValue());
107 assertEquals("DEG1-CTP-TXRX", links.get(1).getDestination().getDestTp().getValue());
111 void createTopologyShardForSrgTest() {
112 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm(
113 "ROADMA01", "nodeA", 0, List.of(Integer.valueOf(1)));
114 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
115 assertNotNull(topologyShard);
116 List<Node> nodes = topologyShard.getNodes();
117 assertEquals(1, nodes.size(), "Should contain 1 SRG node only");
118 assertEquals(0, topologyShard.getLinks().size(), "Should contain 0 link");
119 checkSrgNode("1", nodes.get(0));
123 void createTopologyShardForMultipleSrgTest() {
124 List<Integer> srgNbs = List.of(Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(10),
125 Integer.valueOf(11));
126 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 0, srgNbs);
127 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
128 assertNotNull(topologyShard);
129 List<Node> nodes = topologyShard.getNodes().stream()
130 .sorted((n1, n2) -> n1.getNodeId().getValue().compareTo(n2.getNodeId().getValue()))
131 .collect(Collectors.toList());
132 assertEquals(4, nodes.size(), "Should contain 4 SRG nodes");
133 assertEquals(0, topologyShard.getLinks().size(), "Should contain 0 link");
134 checkSrgNode("1", nodes.get(0));
135 checkSrgNode("10", nodes.get(1));
136 checkSrgNode("11", nodes.get(2));
137 checkSrgNode("2", nodes.get(3));
141 void createTopologyShardForCompleteRdmNodeTest() {
142 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 2,
143 List.of(Integer.valueOf(1), Integer.valueOf(2)));
144 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
145 assertNotNull(topologyShard);
146 assertEquals(4, topologyShard.getNodes().size(), "Should contain 2 Deg and 2 SRG nodes");
147 List<Link> addLinks = topologyShard.getLinks().stream()
148 .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.ADDLINK))
149 .collect(Collectors.toList());
150 assertEquals(4, addLinks.size(), "Should contain 4 add links");
151 List<Link> dropLinks = topologyShard.getLinks().stream()
152 .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.DROPLINK))
153 .collect(Collectors.toList());
154 assertEquals(4, dropLinks.size(), "Should contain 4 drop links");
155 List<Link> expressLinks = topologyShard.getLinks().stream()
156 .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.EXPRESSLINK))
157 .collect(Collectors.toList());
158 assertEquals(2, expressLinks.size(), "Should contain 2 express links");
162 void createTopologyShardForTpdrNodeTest() {
163 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, null);
164 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
165 assertNotNull(topologyShard);
166 assertEquals(1, topologyShard.getNodes().size(), "Should contain a single node");
167 assertEquals(0, topologyShard.getLinks().size(), "Should contain 0 link");
168 checkTpdrNode(topologyShard.getNodes().get(0));
172 void createTopologyShardForTpdrNode2Test() {
173 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, XpdrNodeTypes.Tpdr);
174 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
175 assertNotNull(topologyShard);
176 assertEquals(1, topologyShard.getNodes().size(), "Should contain a single node");
177 assertEquals(0, topologyShard.getLinks().size(), "Should contain 0 link");
178 checkTpdrNode(topologyShard.getNodes().get(0));
182 void createTopologyShardForMpdrNodeTest() {
183 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, XpdrNodeTypes.Mpdr);
184 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
185 assertNotNull(topologyShard);
186 assertEquals(1, topologyShard.getNodes().size(), "Should contain a single node");
187 assertEquals(0, topologyShard.getLinks().size(), "Should contain 0 link");
188 checkOtnXpdrNode(topologyShard.getNodes().get(0));
192 void createTopologyShardForSwitchNodeTest() {
193 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, XpdrNodeTypes.Switch);
194 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
195 assertNotNull(topologyShard);
196 assertEquals(1, topologyShard.getNodes().size(), "Should contain a single node");
197 assertEquals(0, topologyShard.getLinks().size(), "Should contain 0 link");
198 checkOtnXpdrNode(topologyShard.getNodes().get(0));
202 void createTopologyShardForRdmWithoutClliTest() {
203 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", null, 2, List.of());
204 Exception exception = assertThrows(NullPointerException.class, () -> {
205 OpenRoadmTopology.createTopologyShard(mappingNode);
207 assertTrue("Supplied value may not be null".contains(exception.getMessage()));
211 void deleteLinkOkTest() throws InterruptedException, ExecutionException {
212 String srcNode = "ROADM-A1-DEG1";
213 String dstNode = "ROADM-A1-SRG1";
214 String srcTp = "DEG1-CTP-TXRX";
215 String destTp = "SRG1-CP-TXRX";
216 LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp);
217 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1 link1 =
218 new Link1Builder().build();
219 Link link = new LinkBuilder()
221 .setSource(new SourceBuilder().setSourceNode(new NodeId(srcNode)).setSourceTp(new TpId(srcTp)).build())
222 .setDestination(new DestinationBuilder().setDestNode(new NodeId(dstNode)).setDestTp(new TpId(destTp))
224 .addAugmentation(link1)
226 InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Networks.class)
227 .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
228 .augmentation(Network1.class)
229 .child(Link.class, new LinkKey(linkId))
231 when(networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID))
232 .thenReturn(new LinkFuture(link));
234 Answer<FluentFuture<CommitInfo>> answer = new Answer<FluentFuture<CommitInfo>>() {
237 public FluentFuture<CommitInfo> answer(InvocationOnMock invocation) throws Throwable {
238 return CommitInfo.emptyFluentFuture();
242 when(networkTransactionService.commit()).then(answer);
244 boolean result = OpenRoadmTopology.deleteLink("ROADM-A1-DEG1", "ROADM-A1-SRG1", "DEG1-CTP-TXRX", "SRG1-CP-TXRX",
245 networkTransactionService);
246 assertTrue(result, "link deletion should be ok");
250 void deleteLinkNotOkTest() throws InterruptedException, ExecutionException {
251 String srcNode = "ROADM-A1-DEG1";
252 String dstNode = "ROADM-A1-SRG1";
253 String srcTp = "DEG1-CTP-TXRX";
254 String destTp = "SRG1-CP-TXRX";
255 LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp);
257 InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Networks.class)
258 .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
259 .augmentation(Network1.class)
260 .child(Link.class, new LinkKey(linkId))
262 when(networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID)).thenReturn(new LinkFuture());
264 boolean result = OpenRoadmTopology.deleteLink(
265 "ROADM-A1-DEG1", "ROADM-A1-SRG1", "DEG1-CTP-TXRX", "SRG1-CP-TXRX", networkTransactionService);
266 assertFalse(result, "link deletion should not be ok");
270 void deleteLinkExceptionTest() throws InterruptedException, ExecutionException {
271 String srcNode = "ROADM-A1-DEG1";
272 String dstNode = "ROADM-A1-SRG1";
273 String srcTp = "DEG1-CTP-TXRX";
274 String destTp = "SRG1-CP-TXRX";
275 LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp);
277 InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Networks.class)
278 .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
279 .augmentation(Network1.class)
280 .child(Link.class, new LinkKey(linkId))
282 when(networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID))
283 .thenReturn(new InterruptedLinkFuture());
284 boolean result = OpenRoadmTopology.deleteLink(
285 "ROADM-A1-DEG1", "ROADM-A1-SRG1", "DEG1-CTP-TXRX", "SRG1-CP-TXRX", networkTransactionService);
286 verify(networkTransactionService, never()).merge(any(), any(), any());
287 assertFalse(result, "Result should be false du to InterruptedException");
290 private void checkDegreeNode(String nodeNb, Node node) {
291 assertEquals("ROADMA01-DEG" + nodeNb, node.getNodeId().getValue());
292 List<SupportingNode> supportingNodes = node.nonnullSupportingNode().values().stream()
293 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
294 .collect(Collectors.toList());
295 assertEquals(2, supportingNodes.size());
296 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
297 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
298 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
299 assertEquals("ROADMA01", supportingNodes.get(1).getNodeRef().getValue());
300 assertEquals(OpenroadmNodeType.DEGREE, node.augmentation(Node1.class).getNodeType());
302 Uint16.valueOf(nodeNb),
303 node.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1.class)
304 .getDegreeAttributes().getDegreeNumber());
305 List<AvailFreqMaps> availFreqMapsValues = new ArrayList<>(node.augmentation(
306 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1.class)
307 .getDegreeAttributes().getAvailFreqMaps().values());
308 assertEquals(GridConstant.NB_OCTECTS, availFreqMapsValues.get(0).getFreqMap().length);
309 byte[] byteArray = new byte[GridConstant.NB_OCTECTS];
310 Arrays.fill(byteArray, (byte) GridConstant.AVAILABLE_SLOT_VALUE);
311 assertEquals(Arrays.toString(byteArray), Arrays.toString(availFreqMapsValues.get(0).getFreqMap()));
312 List<TerminationPoint> tps = node.augmentation(
313 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
314 .nonnullTerminationPoint().values().stream()
315 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
316 .collect(Collectors.toList());
317 assertEquals(2, tps.size());
318 assertEquals("DEG" + nodeNb + "-CTP-TXRX", tps.get(0).getTpId().getValue());
319 assertEquals(OpenroadmTpType.DEGREETXRXCTP, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
320 assertEquals("DEG" + nodeNb + "-TTP-TXRX", tps.get(1).getTpId().getValue());
321 assertEquals(OpenroadmTpType.DEGREETXRXTTP, tps.get(1).augmentation(TerminationPoint1.class).getTpType());
324 private void checkSrgNode(String nodeNb, Node node) {
325 assertEquals("ROADMA01-SRG" + nodeNb, node.getNodeId().getValue());
326 List<SupportingNode> supportingNodes = node.nonnullSupportingNode().values().stream()
327 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
328 .collect(Collectors.toList());
329 assertEquals(2, supportingNodes.size());
330 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
331 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
332 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
333 assertEquals("ROADMA01", supportingNodes.get(1).getNodeRef().getValue());
334 assertEquals(OpenroadmNodeType.SRG, node.augmentation(Node1.class).getNodeType());
335 List<AvailFreqMaps> availFreqMapsValues = new ArrayList<>(node.augmentation(
336 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1.class)
337 .getSrgAttributes().getAvailFreqMaps().values());
338 assertEquals(GridConstant.NB_OCTECTS, availFreqMapsValues.get(0).getFreqMap().length);
339 byte[] byteArray = new byte[GridConstant.NB_OCTECTS];
340 Arrays.fill(byteArray, (byte) GridConstant.AVAILABLE_SLOT_VALUE);
341 assertEquals(Arrays.toString(byteArray), Arrays.toString(availFreqMapsValues.get(0).getFreqMap()));
342 List<TerminationPoint> tps = node.augmentation(
343 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
344 .nonnullTerminationPoint().values().stream()
345 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
346 .collect(Collectors.toList());
347 assertEquals(5, tps.size());
348 assertEquals("SRG" + nodeNb + "-CP-TXRX", tps.get(0).getTpId().getValue());
349 assertEquals(OpenroadmTpType.SRGTXRXCP, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
350 assertEquals("SRG" + nodeNb + "-PP3-TXRX", tps.get(3).getTpId().getValue());
351 assertEquals(OpenroadmTpType.SRGTXRXPP, tps.get(3).augmentation(TerminationPoint1.class).getTpType());
354 private void checkTpdrNode(Node node) {
355 assertEquals("XPDRA01-XPDR1", node.getNodeId().getValue());
356 List<SupportingNode> supportingNodes = node.nonnullSupportingNode().values().stream()
357 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
358 .collect(Collectors.toList());
359 assertEquals(2, supportingNodes.size());
360 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
361 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
362 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
363 assertEquals("XPDRA01", supportingNodes.get(1).getNodeRef().getValue());
364 assertEquals(OpenroadmNodeType.XPONDER, node.augmentation(Node1.class).getNodeType());
365 List<TerminationPoint> tps = node.augmentation(
366 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
367 .nonnullTerminationPoint().values().stream()
368 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
369 .collect(Collectors.toList());
370 assertEquals(4, tps.size());
371 assertEquals("XPDR1-CLIENT1", tps.get(0).getTpId().getValue());
372 assertEquals(OpenroadmTpType.XPONDERCLIENT, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
375 tps.get(0).augmentation(TerminationPoint1.class).getAssociatedConnectionMapTp().iterator().next()
377 assertEquals("XPDR1-NETWORK1", tps.get(2).getTpId().getValue());
378 assertEquals(OpenroadmTpType.XPONDERNETWORK, tps.get(2).augmentation(TerminationPoint1.class).getTpType());
381 tps.get(2).augmentation(TerminationPoint1.class).getAssociatedConnectionMapTp().iterator().next()
385 private void checkOtnXpdrNode(Node node) {
386 assertEquals("XPDRA01-XPDR1", node.getNodeId().getValue());
387 List<SupportingNode> supportingNodes = node.nonnullSupportingNode().values().stream()
388 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
389 .collect(Collectors.toList());
390 assertEquals(2, supportingNodes.size());
391 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
392 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
393 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
394 assertEquals("XPDRA01", supportingNodes.get(1).getNodeRef().getValue());
395 assertEquals(OpenroadmNodeType.XPONDER, node.augmentation(Node1.class).getNodeType());
396 List<TerminationPoint> tps = node.augmentation(
397 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
398 .nonnullTerminationPoint().values().stream()
399 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
400 .collect(Collectors.toList());
401 assertEquals(2, tps.size());
402 assertEquals("XPDR1-NETWORK1", tps.get(0).getTpId().getValue());
403 assertEquals(OpenroadmTpType.XPONDERNETWORK, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
406 private class LinkFuture implements ListenableFuture<Optional<Link>> {
413 LinkFuture(Link link) {
418 public boolean cancel(boolean arg0) {
423 public Optional<Link> get() throws InterruptedException, ExecutionException {
425 return Optional.of(link);
427 return Optional.empty();
432 public Optional<Link> get(long arg0, TimeUnit arg1)
433 throws InterruptedException, ExecutionException, TimeoutException {
435 return Optional.of(link);
437 return Optional.empty();
442 public boolean isCancelled() {
447 public boolean isDone() {
452 public void addListener(Runnable listener, Executor executor) {
456 private class InterruptedLinkFuture implements ListenableFuture<Optional<Link>> {
459 public boolean cancel(boolean arg0) {
464 public Optional<Link> get() throws InterruptedException, ExecutionException {
465 throw new InterruptedException("Interrupted");
469 public Optional<Link> get(long arg0, TimeUnit arg1)
470 throws InterruptedException, ExecutionException, TimeoutException {
471 throw new InterruptedException("Interrupted");
475 public boolean isCancelled() {
480 public boolean isDone() {
485 public void addListener(Runnable listener, Executor executor) {