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.List;
23 import java.util.Optional;
24 import java.util.concurrent.ExecutionException;
25 import java.util.concurrent.Executor;
26 import java.util.concurrent.TimeUnit;
27 import java.util.concurrent.TimeoutException;
28 import java.util.stream.Collectors;
29 import org.junit.Ignore;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.mockito.Mock;
33 import org.mockito.invocation.InvocationOnMock;
34 import org.mockito.junit.MockitoJUnitRunner;
35 import org.mockito.stubbing.Answer;
36 import org.opendaylight.mdsal.common.api.CommitInfo;
37 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
38 import org.opendaylight.transportpce.common.NetworkUtils;
39 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
40 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
41 import org.opendaylight.transportpce.networkmodel.util.test.NetworkmodelTestUtil;
42 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200827.network.Nodes;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.XpdrNodeTypes;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
61 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder;
63 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
64 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder;
65 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder;
66 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint;
67 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
68 import org.opendaylight.yangtools.yang.common.Uint16;
71 @RunWith(MockitoJUnitRunner.StrictStubs.class)
72 public class OpenRoadmTopologyTest {
74 private NetworkTransactionService networkTransactionService;
77 public void createTopologyShardForDegreeTest() {
78 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 2, 0);
79 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
80 assertNotNull(topologyShard);
81 assertEquals("Should contain 2 Degree nodes only", 2, topologyShard.getNodes().size());
82 assertEquals("Should contain 2 links", 2, topologyShard.getLinks().size());
83 List<Node> nodes = topologyShard.getNodes().stream()
84 .sorted((n1, n2) -> n1.getNodeId().getValue().compareTo(n2.getNodeId().getValue()))
85 .collect(Collectors.toList());
86 for (Node node : nodes) {
87 String nodeNb = node.getNodeId().getValue().substring(node.getNodeId().getValue().length() - 1);
88 checkDegreeNode(nodeNb, node);
91 List<Link> links = topologyShard.getLinks().stream()
92 .sorted((l1, l2) -> l1.getLinkId().getValue().compareTo(l2.getLinkId().getValue()))
93 .collect(Collectors.toList());
94 assertEquals("Should contain 2 express links", 2, links.size());
95 assertEquals("ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX", links.get(0).getLinkId().getValue());
96 assertEquals("ROADMA01-DEG1", links.get(0).getSource().getSourceNode().getValue());
97 assertEquals("DEG1-CTP-TXRX", links.get(0).getSource().getSourceTp());
98 assertEquals("ROADMA01-DEG2", links.get(0).getDestination().getDestNode().getValue());
99 assertEquals("DEG2-CTP-TXRX", links.get(0).getDestination().getDestTp());
100 assertEquals("ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX", links.get(1).getLinkId().getValue());
101 assertEquals("ROADMA01-DEG2", links.get(1).getSource().getSourceNode().getValue());
102 assertEquals("DEG2-CTP-TXRX", links.get(1).getSource().getSourceTp());
103 assertEquals("ROADMA01-DEG1", links.get(1).getDestination().getDestNode().getValue());
104 assertEquals("DEG1-CTP-TXRX", links.get(1).getDestination().getDestTp());
108 public void createTopologyShardForSrgTest() {
109 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 0, 1);
110 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
111 assertNotNull(topologyShard);
112 List<Node> nodes = topologyShard.getNodes();
113 assertEquals("Should contain 1 SRG node only", 1, nodes.size());
114 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
115 checkSrgNode("1", nodes.get(0));
119 public void createTopologyShardForCompleteRdmNodeTest() {
120 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 2, 2);
121 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
122 assertNotNull(topologyShard);
123 assertEquals("Should contain 2 Deg and 2 SRG nodes", 4, topologyShard.getNodes().size());
124 List<Link> addLinks = topologyShard.getLinks().stream()
125 .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.ADDLINK))
126 .collect(Collectors.toList());
127 assertEquals("Should contain 4 add links", 4, addLinks.size());
128 List<Link> dropLinks = topologyShard.getLinks().stream()
129 .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.DROPLINK))
130 .collect(Collectors.toList());
131 assertEquals("Should contain 4 drop links", 4, dropLinks.size());
132 List<Link> expressLinks = topologyShard.getLinks().stream()
133 .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.EXPRESSLINK))
134 .collect(Collectors.toList());
135 assertEquals("Should contain 2 express links", 2, expressLinks.size());
139 public void createTopologyShardForTpdrNodeTest() {
140 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, null);
141 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
142 assertNotNull(topologyShard);
143 assertEquals("Should contain a single node", 1, topologyShard.getNodes().size());
144 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
145 checkTpdrNode(topologyShard.getNodes().get(0));
149 public void createTopologyShardForTpdrNode2Test() {
150 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, XpdrNodeTypes.Tpdr);
151 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
152 assertNotNull(topologyShard);
153 assertEquals("Should contain a single node", 1, topologyShard.getNodes().size());
154 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
155 checkTpdrNode(topologyShard.getNodes().get(0));
159 public void createTopologyShardForMpdrNodeTest() {
160 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, XpdrNodeTypes.Mpdr);
161 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
162 assertNotNull(topologyShard);
163 assertEquals("Should contain a single node", 1, topologyShard.getNodes().size());
164 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
165 checkOtnXpdrNode(topologyShard.getNodes().get(0));
169 public void createTopologyShardForSwitchNodeTest() {
170 Nodes mappingNode = NetworkmodelTestUtil.createMappingForXpdr("XPDRA01", "nodeA", 2, 2, XpdrNodeTypes.Switch);
171 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
172 assertNotNull(topologyShard);
173 assertEquals("Should contain a single node", 1, topologyShard.getNodes().size());
174 assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size());
175 checkOtnXpdrNode(topologyShard.getNodes().get(0));
180 public void createTopologyShardForRdmWithoutClliTest() {
181 Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", null, 2, 0);
182 TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode);
183 assertNull("clli must not be null", topologyShard);
187 public void deleteLinkOkTest() throws InterruptedException, ExecutionException {
188 String srcNode = "ROADM-A1-DEG1";
189 String dstNode = "ROADM-A1-SRG1";
190 String srcTp = "DEG1-CTP-TXRX";
191 String destTp = "SRG1-CP-TXRX";
192 LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp);
193 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1 link1 =
194 new Link1Builder().setAdministrativeState(State.InService).build();
195 Link link = new LinkBuilder()
197 .setSource(new SourceBuilder().setSourceNode(new NodeId(srcNode)).setSourceTp(srcTp).build())
198 .setDestination(new DestinationBuilder().setDestNode(new NodeId(dstNode)).setDestTp(destTp).build())
200 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1.class, link1)
202 InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Networks.class).child(Network.class,
203 new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).augmentation(Network1.class)
204 .child(Link.class, new LinkKey(linkId)).build();
205 when(networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID))
206 .thenReturn(new LinkFuture(link));
208 Answer<FluentFuture<CommitInfo>> answer = new Answer<FluentFuture<CommitInfo>>() {
211 public FluentFuture<CommitInfo> answer(InvocationOnMock invocation) throws Throwable {
212 return CommitInfo.emptyFluentFuture();
216 when(networkTransactionService.commit()).then(answer);
218 boolean result = OpenRoadmTopology.deleteLink("ROADM-A1-DEG1", "ROADM-A1-SRG1", "DEG1-CTP-TXRX", "SRG1-CP-TXRX",
219 networkTransactionService);
220 assertTrue("link deletion should be ok", result);
224 public void deleteLinkNotOkTest() throws InterruptedException, ExecutionException {
225 String srcNode = "ROADM-A1-DEG1";
226 String dstNode = "ROADM-A1-SRG1";
227 String srcTp = "DEG1-CTP-TXRX";
228 String destTp = "SRG1-CP-TXRX";
229 LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp);
231 InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Networks.class).child(Network.class,
232 new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).augmentation(Network1.class)
233 .child(Link.class, new LinkKey(linkId)).build();
234 when(networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID)).thenReturn(new LinkFuture());
236 boolean result = OpenRoadmTopology.deleteLink("ROADM-A1-DEG1", "ROADM-A1-SRG1", "DEG1-CTP-TXRX", "SRG1-CP-TXRX",
237 networkTransactionService);
238 assertFalse("link deletion should not be ok", result);
242 public void deleteLinkExceptionTest() throws InterruptedException, ExecutionException {
243 String srcNode = "ROADM-A1-DEG1";
244 String dstNode = "ROADM-A1-SRG1";
245 String srcTp = "DEG1-CTP-TXRX";
246 String destTp = "SRG1-CP-TXRX";
247 LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp);
249 InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Networks.class)
250 .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
251 .augmentation(Network1.class).child(Link.class, new LinkKey(linkId)).build();
252 when(networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID))
253 .thenReturn(new InterruptedLinkFuture());
254 boolean result = OpenRoadmTopology.deleteLink("ROADM-A1-DEG1", "ROADM-A1-SRG1", "DEG1-CTP-TXRX", "SRG1-CP-TXRX",
255 networkTransactionService);
256 verify(networkTransactionService, never()).merge(any(), any(), any());
257 assertFalse("Result should be false du to InterruptedException", result);
260 private void checkDegreeNode(String nodeNb, Node node) {
261 assertEquals("ROADMA01-DEG" + nodeNb, node.getNodeId().getValue());
262 List<SupportingNode> supportingNodes = node.getSupportingNode().stream()
263 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
264 .collect(Collectors.toList());
265 assertEquals(2, supportingNodes.size());
266 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
267 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
268 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
269 assertEquals("ROADMA01", supportingNodes.get(1).getNodeRef().getValue());
270 assertEquals(OpenroadmNodeType.DEGREE, node.augmentation(Node1.class).getNodeType());
271 assertEquals(Uint16.valueOf(nodeNb), node.augmentation(
272 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class)
273 .getDegreeAttributes().getDegreeNumber());
274 assertEquals(96, node.augmentation(
275 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class)
276 .getDegreeAttributes().getAvailableWavelengths().size());
277 List<TerminationPoint> tps = node.augmentation(
278 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
279 .getTerminationPoint().stream()
280 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
281 .collect(Collectors.toList());
282 assertEquals(2, tps.size());
283 assertEquals("DEG" + nodeNb + "-CTP-TXRX", tps.get(0).getTpId().getValue());
284 assertEquals(OpenroadmTpType.DEGREETXRXCTP, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
285 assertEquals("DEG" + nodeNb + "-TTP-TXRX", tps.get(1).getTpId().getValue());
286 assertEquals(OpenroadmTpType.DEGREETXRXTTP, tps.get(1).augmentation(TerminationPoint1.class).getTpType());
289 private void checkSrgNode(String nodeNb, Node node) {
290 assertEquals("ROADMA01-SRG" + nodeNb, node.getNodeId().getValue());
291 List<SupportingNode> supportingNodes = node.getSupportingNode().stream()
292 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
293 .collect(Collectors.toList());
294 assertEquals(2, supportingNodes.size());
295 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
296 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
297 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
298 assertEquals("ROADMA01", supportingNodes.get(1).getNodeRef().getValue());
299 assertEquals(OpenroadmNodeType.SRG, node.augmentation(Node1.class).getNodeType());
300 assertEquals(96, node.augmentation(
301 org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Node1.class)
302 .getSrgAttributes().getAvailableWavelengths().size());
303 List<TerminationPoint> tps = node.augmentation(
304 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
305 .getTerminationPoint().stream()
306 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
307 .collect(Collectors.toList());
308 assertEquals(5, tps.size());
309 assertEquals("SRG" + nodeNb + "-CP-TXRX", tps.get(0).getTpId().getValue());
310 assertEquals(OpenroadmTpType.SRGTXRXCP, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
311 assertEquals("SRG" + nodeNb + "-PP3-TXRX", tps.get(3).getTpId().getValue());
312 assertEquals(OpenroadmTpType.SRGTXRXPP, tps.get(3).augmentation(TerminationPoint1.class).getTpType());
315 private void checkTpdrNode(Node node) {
316 assertEquals("XPDRA01-XPDR1", node.getNodeId().getValue());
317 List<SupportingNode> supportingNodes = node.getSupportingNode().stream()
318 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
319 .collect(Collectors.toList());
320 assertEquals(2, supportingNodes.size());
321 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
322 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
323 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
324 assertEquals("XPDRA01", supportingNodes.get(1).getNodeRef().getValue());
325 assertEquals(OpenroadmNodeType.XPONDER, node.augmentation(Node1.class).getNodeType());
326 List<TerminationPoint> tps = node.augmentation(
327 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
328 .getTerminationPoint().stream()
329 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
330 .collect(Collectors.toList());
331 assertEquals(4, tps.size());
332 assertEquals("XPDR1-CLIENT1", tps.get(0).getTpId().getValue());
333 assertEquals(OpenroadmTpType.XPONDERCLIENT, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
334 assertEquals("XPDR1-NETWORK1", tps.get(0).augmentation(
335 org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200129.TerminationPoint1.class)
336 .getAssociatedConnectionMapPort());
337 assertEquals("XPDR1-NETWORK1", tps.get(2).getTpId().getValue());
338 assertEquals(OpenroadmTpType.XPONDERNETWORK, tps.get(2).augmentation(TerminationPoint1.class).getTpType());
339 assertEquals("XPDR1-CLIENT1", tps.get(2).augmentation(
340 org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200129.TerminationPoint1.class)
341 .getAssociatedConnectionMapPort());
344 private void checkOtnXpdrNode(Node node) {
345 assertEquals("XPDRA01-XPDR1", node.getNodeId().getValue());
346 List<SupportingNode> supportingNodes = node.getSupportingNode().stream()
347 .sorted((sn1, sn2) -> sn1.getNetworkRef().getValue().compareTo(sn2.getNetworkRef().getValue()))
348 .collect(Collectors.toList());
349 assertEquals(2, supportingNodes.size());
350 assertEquals("clli-network", supportingNodes.get(0).getNetworkRef().getValue());
351 assertEquals("nodeA", supportingNodes.get(0).getNodeRef().getValue());
352 assertEquals("openroadm-network", supportingNodes.get(1).getNetworkRef().getValue());
353 assertEquals("XPDRA01", supportingNodes.get(1).getNodeRef().getValue());
354 assertEquals(OpenroadmNodeType.XPONDER, node.augmentation(Node1.class).getNodeType());
355 List<TerminationPoint> tps = node.augmentation(
356 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
357 .getTerminationPoint().stream()
358 .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
359 .collect(Collectors.toList());
360 assertEquals(2, tps.size());
361 assertEquals("XPDR1-NETWORK1", tps.get(0).getTpId().getValue());
362 assertEquals(OpenroadmTpType.XPONDERNETWORK, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
365 private class LinkFuture implements ListenableFuture<Optional<Link>> {
372 LinkFuture(Link link) {
377 public boolean cancel(boolean arg0) {
382 public Optional<Link> get() throws InterruptedException, ExecutionException {
384 return Optional.of(link);
386 return Optional.empty();
391 public Optional<Link> get(long arg0, TimeUnit arg1)
392 throws InterruptedException, ExecutionException, TimeoutException {
394 return Optional.of(link);
396 return Optional.empty();
401 public boolean isCancelled() {
406 public boolean isDone() {
411 public void addListener(Runnable listener, Executor executor) {
415 private class InterruptedLinkFuture implements ListenableFuture<Optional<Link>> {
418 public boolean cancel(boolean arg0) {
423 public Optional<Link> get() throws InterruptedException, ExecutionException {
424 throw new InterruptedException("Interrupted");
428 public Optional<Link> get(long arg0, TimeUnit arg1)
429 throws InterruptedException, ExecutionException, TimeoutException {
430 throw new InterruptedException("Interrupted");
434 public boolean isCancelled() {
439 public boolean isDone() {
444 public void addListener(Runnable listener, Executor executor) {