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.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.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.Ignore;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 import org.mockito.Mock;
35 import org.mockito.invocation.InvocationOnMock;
36 import org.mockito.junit.MockitoJUnitRunner;
37 import org.mockito.stubbing.Answer;
38 import org.opendaylight.mdsal.common.api.CommitInfo;
39 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
40 import org.opendaylight.transportpce.common.NetworkUtils;
41 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
42 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
43 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
44 import org.opendaylight.transportpce.networkmodel.util.test.NetworkmodelTestUtil;
45 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.Nodes;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
54 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMaps;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
61 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
63 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
64 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
65 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
66 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder;
67 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
68 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder;
69 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder;
70 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint;
71 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
72 import org.opendaylight.yangtools.yang.common.Uint16;
75 @RunWith(MockitoJUnitRunner.StrictStubs.class)
76 public class OpenRoadmTopologyTest {
78 private NetworkTransactionService networkTransactionService;
81 public void createTopologyShardForDegreeTest() {
82 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 2, List.of());
83 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
84 assertNotNull(topologyShard);
85 assertEquals("Should contain 2 Degree nodes only", 2, topologyShard.getNodes().size());
86 assertEquals("Should contain 2 links", 2, topologyShard.getLinks().size());
87 List<Node> nodes = topologyShard.getNodes().stream()
88 .sorted((n1, n2) -> n1.getNodeId().getValue().compareTo(n2.getNodeId().getValue()))
89 .collect(Collectors.toList());
90 for (Node node : nodes) {
91 String nodeNb = node.getNodeId().getValue().substring(node.getNodeId().getValue().length() - 1);
92 checkDegreeNode(nodeNb, node);
95 List<Link> links = topologyShard.getLinks().stream()
96 .sorted((l1, l2) -> l1.getLinkId().getValue().compareTo(l2.getLinkId().getValue()))
97 .collect(Collectors.toList());
98 assertEquals("Should contain 2 express links", 2, links.size());
99 assertEquals("ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX", links.get(0).getLinkId().getValue());
100 assertEquals("ROADMA01-DEG1", links.get(0).getSource().getSourceNode().getValue());
101 assertEquals("DEG1-CTP-TXRX", links.get(0).getSource().getSourceTp().getValue());
102 assertEquals("ROADMA01-DEG2", links.get(0).getDestination().getDestNode().getValue());
103 assertEquals("DEG2-CTP-TXRX", links.get(0).getDestination().getDestTp().getValue());
104 assertEquals("ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX", links.get(1).getLinkId().getValue());
105 assertEquals("ROADMA01-DEG2", links.get(1).getSource().getSourceNode().getValue());
106 assertEquals("DEG2-CTP-TXRX", links.get(1).getSource().getSourceTp().getValue());
107 assertEquals("ROADMA01-DEG1", links.get(1).getDestination().getDestNode().getValue());
108 assertEquals("DEG1-CTP-TXRX", links.get(1).getDestination().getDestTp().getValue());
112 public void createTopologyShardForSrgTest() {
113 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 0,
114 List.of(Integer.valueOf(1)));
115 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
116 assertNotNull(topologyShard);
117 List<Node> nodes = topologyShard.getNodes();
118 assertEquals("Should contain 1 SRG node only", 1, nodes.size());
119 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
120 checkSrgNode("1", nodes.get(0));
124 public void createTopologyShardForMultipleSrgTest() {
125 List<Integer> srgNbs = List.of(Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(10),
126 Integer.valueOf(11));
127 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 0, srgNbs);
128 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
129 assertNotNull(topologyShard);
130 List<Node> nodes = topologyShard.getNodes().stream()
131 .sorted((n1, n2) -> n1.getNodeId().getValue().compareTo(n2.getNodeId().getValue()))
132 .collect(Collectors.toList());
133 assertEquals("Should contain 4 SRG nodes", 4, nodes.size());
134 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
135 checkSrgNode("1", nodes.get(0));
136 checkSrgNode("10", nodes.get(1));
137 checkSrgNode("11", nodes.get(2));
138 checkSrgNode("2", nodes.get(3));
142 public void createTopologyShardForCompleteRdmNodeTest() {
143 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 2,
144 List.of(Integer.valueOf(1), Integer.valueOf(2)));
145 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
146 assertNotNull(topologyShard);
147 assertEquals("Should contain 2 Deg and 2 SRG nodes", 4, topologyShard.getNodes().size());
148 List<Link> addLinks = topologyShard.getLinks().stream()
149 .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.ADDLINK))
150 .collect(Collectors.toList());
151 assertEquals("Should contain 4 add links", 4, addLinks.size());
152 List<Link> dropLinks = topologyShard.getLinks().stream()
153 .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.DROPLINK))
154 .collect(Collectors.toList());
155 assertEquals("Should contain 4 drop links", 4, dropLinks.size());
156 List<Link> expressLinks = topologyShard.getLinks().stream()
157 .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.EXPRESSLINK))
158 .collect(Collectors.toList());
159 assertEquals("Should contain 2 express links", 2, expressLinks.size());
163 public void createTopologyShardForTpdrNodeTest() {
164 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, null);
165 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
166 assertNotNull(topologyShard);
167 assertEquals("Should contain a single node", 1, topologyShard.getNodes().size());
168 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
169 checkTpdrNode(topologyShard.getNodes().get(0));
173 public void createTopologyShardForTpdrNode2Test() {
174 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, XpdrNodeTypes.Tpdr);
175 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
176 assertNotNull(topologyShard);
177 assertEquals("Should contain a single node", 1, topologyShard.getNodes().size());
178 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
179 checkTpdrNode(topologyShard.getNodes().get(0));
183 public void createTopologyShardForMpdrNodeTest() {
184 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, XpdrNodeTypes.Mpdr);
185 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
186 assertNotNull(topologyShard);
187 assertEquals("Should contain a single node", 1, topologyShard.getNodes().size());
188 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
189 checkOtnXpdrNode(topologyShard.getNodes().get(0));
193 public void createTopologyShardForSwitchNodeTest() {
194 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, XpdrNodeTypes.Switch);
195 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
196 assertNotNull(topologyShard);
197 assertEquals("Should contain a single node", 1, topologyShard.getNodes().size());
198 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
199 checkOtnXpdrNode(topologyShard.getNodes().get(0));
204 public void createTopologyShardForRdmWithoutClliTest() {
205 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", null, 2, List.of());
206 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
207 assertNull("clli must not be null", topologyShard);
211 public 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).child(Network.class,
227 new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).augmentation(Network1.class)
228 .child(Link.class, new LinkKey(linkId)).build();
229 when(networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID))
230 .thenReturn(new LinkFuture(link));
232 Answer<FluentFuture<CommitInfo>> answer = new Answer<FluentFuture<CommitInfo>>() {
235 public FluentFuture<CommitInfo> answer(InvocationOnMock invocation) throws Throwable {
236 return CommitInfo.emptyFluentFuture();
240 when(networkTransactionService.commit()).then(answer);
242 boolean result = OpenRoadmTopology.deleteLink("ROADM-A1-DEG1", "ROADM-A1-SRG1", "DEG1-CTP-TXRX", "SRG1-CP-TXRX",
243 networkTransactionService);
244 assertTrue("link deletion should be ok", result);
248 public void deleteLinkNotOkTest() throws InterruptedException, ExecutionException {
249 String srcNode = "ROADM-A1-DEG1";
250 String dstNode = "ROADM-A1-SRG1";
251 String srcTp = "DEG1-CTP-TXRX";
252 String destTp = "SRG1-CP-TXRX";
253 LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp);
255 InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Networks.class).child(Network.class,
256 new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).augmentation(Network1.class)
257 .child(Link.class, new LinkKey(linkId)).build();
258 when(networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID)).thenReturn(new LinkFuture());
260 boolean result = OpenRoadmTopology.deleteLink("ROADM-A1-DEG1", "ROADM-A1-SRG1", "DEG1-CTP-TXRX", "SRG1-CP-TXRX",
261 networkTransactionService);
262 assertFalse("link deletion should not be ok", result);
266 public void deleteLinkExceptionTest() throws InterruptedException, ExecutionException {
267 String srcNode = "ROADM-A1-DEG1";
268 String dstNode = "ROADM-A1-SRG1";
269 String srcTp = "DEG1-CTP-TXRX";
270 String destTp = "SRG1-CP-TXRX";
271 LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp);
273 InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Networks.class)
274 .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
275 .augmentation(Network1.class).child(Link.class, new LinkKey(linkId)).build();
276 when(networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID))
277 .thenReturn(new InterruptedLinkFuture());
278 boolean result = OpenRoadmTopology.deleteLink("ROADM-A1-DEG1", "ROADM-A1-SRG1", "DEG1-CTP-TXRX", "SRG1-CP-TXRX",
279 networkTransactionService);
280 verify(networkTransactionService, never()).merge(any(), any(), any());
281 assertFalse("Result should be false du to InterruptedException", result);
284 private void checkDegreeNode(String nodeNb, Node node) {
285 assertEquals("ROADMA01-DEG" + nodeNb, node.getNodeId().getValue());
286 List<SupportingNode> supportingNodes = node.nonnullSupportingNode().values().stream()
287 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
288 .collect(Collectors.toList());
289 assertEquals(2, supportingNodes.size());
290 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
291 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
292 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
293 assertEquals("ROADMA01", supportingNodes.get(1).getNodeRef().getValue());
294 assertEquals(OpenroadmNodeType.DEGREE, node.augmentation(Node1.class).getNodeType());
295 assertEquals(Uint16.valueOf(nodeNb), node.augmentation(
296 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1.class)
297 .getDegreeAttributes().getDegreeNumber());
298 List<AvailFreqMaps> availFreqMapsValues = new ArrayList<>(node.augmentation(
299 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1.class)
300 .getDegreeAttributes().getAvailFreqMaps().values());
301 assertEquals(GridConstant.NB_OCTECTS, availFreqMapsValues.get(0).getFreqMap().length);
302 byte[] byteArray = new byte[GridConstant.NB_OCTECTS];
303 Arrays.fill(byteArray, (byte) GridConstant.AVAILABLE_SLOT_VALUE);
304 assertEquals(Arrays.toString(byteArray), Arrays.toString(availFreqMapsValues.get(0).getFreqMap()));
305 List<TerminationPoint> tps = node.augmentation(
306 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
307 .nonnullTerminationPoint().values().stream()
308 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
309 .collect(Collectors.toList());
310 assertEquals(2, tps.size());
311 assertEquals("DEG" + nodeNb + "-CTP-TXRX", tps.get(0).getTpId().getValue());
312 assertEquals(OpenroadmTpType.DEGREETXRXCTP, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
313 assertEquals("DEG" + nodeNb + "-TTP-TXRX", tps.get(1).getTpId().getValue());
314 assertEquals(OpenroadmTpType.DEGREETXRXTTP, tps.get(1).augmentation(TerminationPoint1.class).getTpType());
317 private void checkSrgNode(String nodeNb, Node node) {
318 assertEquals("ROADMA01-SRG" + nodeNb, node.getNodeId().getValue());
319 List<SupportingNode> supportingNodes = node.nonnullSupportingNode().values().stream()
320 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
321 .collect(Collectors.toList());
322 assertEquals(2, supportingNodes.size());
323 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
324 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
325 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
326 assertEquals("ROADMA01", supportingNodes.get(1).getNodeRef().getValue());
327 assertEquals(OpenroadmNodeType.SRG, node.augmentation(Node1.class).getNodeType());
328 List<AvailFreqMaps> availFreqMapsValues = new ArrayList<>(node.augmentation(
329 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1.class)
330 .getSrgAttributes().getAvailFreqMaps().values());
331 assertEquals(GridConstant.NB_OCTECTS, availFreqMapsValues.get(0).getFreqMap().length);
332 byte[] byteArray = new byte[GridConstant.NB_OCTECTS];
333 Arrays.fill(byteArray, (byte) GridConstant.AVAILABLE_SLOT_VALUE);
334 assertEquals(Arrays.toString(byteArray), Arrays.toString(availFreqMapsValues.get(0).getFreqMap()));
335 List<TerminationPoint> tps = node.augmentation(
336 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
337 .nonnullTerminationPoint().values().stream()
338 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
339 .collect(Collectors.toList());
340 assertEquals(5, tps.size());
341 assertEquals("SRG" + nodeNb + "-CP-TXRX", tps.get(0).getTpId().getValue());
342 assertEquals(OpenroadmTpType.SRGTXRXCP, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
343 assertEquals("SRG" + nodeNb + "-PP3-TXRX", tps.get(3).getTpId().getValue());
344 assertEquals(OpenroadmTpType.SRGTXRXPP, tps.get(3).augmentation(TerminationPoint1.class).getTpType());
347 private void checkTpdrNode(Node node) {
348 assertEquals("XPDRA01-XPDR1", node.getNodeId().getValue());
349 List<SupportingNode> supportingNodes = node.nonnullSupportingNode().values().stream()
350 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
351 .collect(Collectors.toList());
352 assertEquals(2, supportingNodes.size());
353 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
354 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
355 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
356 assertEquals("XPDRA01", supportingNodes.get(1).getNodeRef().getValue());
357 assertEquals(OpenroadmNodeType.XPONDER, node.augmentation(Node1.class).getNodeType());
358 List<TerminationPoint> tps = node.augmentation(
359 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
360 .nonnullTerminationPoint().values().stream()
361 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
362 .collect(Collectors.toList());
363 assertEquals(4, tps.size());
364 assertEquals("XPDR1-CLIENT1", tps.get(0).getTpId().getValue());
365 assertEquals(OpenroadmTpType.XPONDERCLIENT, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
366 assertEquals("XPDR1-NETWORK1", tps.get(0).augmentation(
367 org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1.class)
368 .getAssociatedConnectionMapPort());
369 assertEquals("XPDR1-NETWORK1", tps.get(2).getTpId().getValue());
370 assertEquals(OpenroadmTpType.XPONDERNETWORK, tps.get(2).augmentation(TerminationPoint1.class).getTpType());
371 assertEquals("XPDR1-CLIENT1", tps.get(2).augmentation(
372 org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1.class)
373 .getAssociatedConnectionMapPort());
376 private void checkOtnXpdrNode(Node node) {
377 assertEquals("XPDRA01-XPDR1", node.getNodeId().getValue());
378 List<SupportingNode> supportingNodes = node.nonnullSupportingNode().values().stream()
379 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
380 .collect(Collectors.toList());
381 assertEquals(2, supportingNodes.size());
382 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
383 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
384 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
385 assertEquals("XPDRA01", supportingNodes.get(1).getNodeRef().getValue());
386 assertEquals(OpenroadmNodeType.XPONDER, node.augmentation(Node1.class).getNodeType());
387 List<TerminationPoint> tps = node.augmentation(
388 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
389 .nonnullTerminationPoint().values().stream()
390 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
391 .collect(Collectors.toList());
392 assertEquals(2, tps.size());
393 assertEquals("XPDR1-NETWORK1", tps.get(0).getTpId().getValue());
394 assertEquals(OpenroadmTpType.XPONDERNETWORK, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
397 private class LinkFuture implements ListenableFuture<Optional<Link>> {
404 LinkFuture(Link link) {
409 public boolean cancel(boolean arg0) {
414 public Optional<Link> get() throws InterruptedException, ExecutionException {
416 return Optional.of(link);
418 return Optional.empty();
423 public Optional<Link> get(long arg0, TimeUnit arg1)
424 throws InterruptedException, ExecutionException, TimeoutException {
426 return Optional.of(link);
428 return Optional.empty();
433 public boolean isCancelled() {
438 public boolean isDone() {
443 public void addListener(Runnable listener, Executor executor) {
447 private class InterruptedLinkFuture implements ListenableFuture<Optional<Link>> {
450 public boolean cancel(boolean arg0) {
455 public Optional<Link> get() throws InterruptedException, ExecutionException {
456 throw new InterruptedException("Interrupted");
460 public Optional<Link> get(long arg0, TimeUnit arg1)
461 throws InterruptedException, ExecutionException, TimeoutException {
462 throw new InterruptedException("Interrupted");
466 public boolean isCancelled() {
471 public boolean isDone() {
476 public void addListener(Runnable listener, Executor executor) {