- @SuppressWarnings({ "rawtypes" })
- @Test
- public void testOnNodeRemoved() {
-
- NodeKey topoNodeKey = new NodeKey(new NodeId("node1"));
- InstanceIdentifier<Node> topoNodeII = topologyIID.child(Node.class, topoNodeKey);
- Node topoNode = new NodeBuilder().setKey(topoNodeKey).build();
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
- nodeKey = newInvNodeKey(topoNodeKey.getNodeId().getValue());
- InstanceIdentifier<?> invNodeID = InstanceIdentifier.create(Nodes.class).child(
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node.class,
- nodeKey);
-
- List<Link> linkList = Arrays.asList(
- newLink("link1", newSourceNode("node1"), newDestNode("dest")),
- newLink("link2", newSourceNode("source"), newDestNode("node1")),
- newLink("link2", newSourceNode("source2"), newDestNode("dest2")));
- final Topology topology = new TopologyBuilder().setLink(linkList).build();
-
- InstanceIdentifier[] expDeletedIIDs = {
- topologyIID.child(Link.class, linkList.get(0).getKey()),
- topologyIID.child(Link.class, linkList.get(1).getKey()),
- topologyIID.child(Node.class, new NodeKey(new NodeId("node1")))
- };
-
- SettableFuture<Optional<Topology>> readFuture = SettableFuture.create();
- readFuture.set(Optional.of(topology));
- ReadWriteTransaction mockTx1 = mock(ReadWriteTransaction.class);
- doReturn(Futures.makeChecked(readFuture, ReadFailedException.MAPPER)).when(mockTx1)
- .read(LogicalDatastoreType.OPERATIONAL, topologyIID);
-
- SettableFuture<Optional<Node>> readFutureNode = SettableFuture.create();
- readFutureNode.set(Optional.of(topoNode));
- doReturn(Futures.makeChecked(readFutureNode, ReadFailedException.MAPPER)).when(mockTx1)
- .read(LogicalDatastoreType.OPERATIONAL, topoNodeII);
-
- CountDownLatch submitLatch1 = setupStubbedSubmit(mockTx1);
-
- int expDeleteCalls = expDeletedIIDs.length;
- CountDownLatch deleteLatch = new CountDownLatch(expDeleteCalls);
- ArgumentCaptor<InstanceIdentifier> deletedLinkIDs =
- ArgumentCaptor.forClass(InstanceIdentifier.class);
- setupStubbedDeletes(mockTx1, deletedLinkIDs, deleteLatch);
-
- doReturn(mockTx1).when(mockTxChain).newReadWriteTransaction();
-
- exporter.onNodeRemoved(new NodeRemovedBuilder().setNodeRef(new NodeRef(invNodeID)).build());
-
- waitForSubmit(submitLatch1);
-
- setReadFutureAsync(topology, readFuture);
-
- waitForDeletes(expDeleteCalls, deleteLatch);
-
- assertDeletedIDs(expDeletedIIDs, deletedLinkIDs);
-
- verifyMockTx(mockTx1);
- }
-
- @SuppressWarnings({ "rawtypes" })
- @Test
- public void testOnNodeRemovedWithNoTopology() {
-
- NodeKey topoNodeKey = new NodeKey(new NodeId("node1"));
- InstanceIdentifier<Node> topoNodeII = topologyIID.child(Node.class, topoNodeKey);
- Node topoNode = new NodeBuilder().setKey(topoNodeKey).build();
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
- nodeKey = newInvNodeKey(topoNodeKey.getNodeId().getValue());
- InstanceIdentifier<?> invNodeID = InstanceIdentifier.create(Nodes.class).child(
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node.class,
- nodeKey);
-
- InstanceIdentifier[] expDeletedIIDs = {
- topologyIID.child(Node.class, new NodeKey(new NodeId("node1")))
- };
-
- ReadWriteTransaction mockTx = mock(ReadWriteTransaction.class);
- doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockTx)
- .read(LogicalDatastoreType.OPERATIONAL, topologyIID);
- CountDownLatch submitLatch = setupStubbedSubmit(mockTx);
-
- SettableFuture<Optional<Node>> readFutureNode = SettableFuture.create();
- readFutureNode.set(Optional.of(topoNode));
- doReturn(Futures.makeChecked(readFutureNode, ReadFailedException.MAPPER)).when(mockTx)
- .read(LogicalDatastoreType.OPERATIONAL, topoNodeII);
-
- CountDownLatch deleteLatch = new CountDownLatch(1);
- ArgumentCaptor<InstanceIdentifier> deletedLinkIDs =
- ArgumentCaptor.forClass(InstanceIdentifier.class);
- setupStubbedDeletes(mockTx, deletedLinkIDs, deleteLatch);
-
- doReturn(mockTx).when(mockTxChain).newReadWriteTransaction();
-
- exporter.onNodeRemoved(new NodeRemovedBuilder().setNodeRef(new NodeRef(invNodeID)).build());
-
- waitForSubmit(submitLatch);
-
- waitForDeletes(1, deleteLatch);
-
- assertDeletedIDs(expDeletedIIDs, deletedLinkIDs);
- }
-
- @SuppressWarnings("rawtypes")
- @Test
- public void testOnNodeConnectorRemoved() {
-
- NodeKey topoNodeKey = new NodeKey(new NodeId("node1"));
- TerminationPointKey terminationPointKey = new TerminationPointKey(new TpId("tp1"));
-
- InstanceIdentifier<Node> topoNodeII = topologyIID.child(Node.class, topoNodeKey);
- Node topoNode = new NodeBuilder().setKey(topoNodeKey).build();
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
- nodeKey = newInvNodeKey(topoNodeKey.getNodeId().getValue());
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey ncKey =
- newInvNodeConnKey(terminationPointKey.getTpId().getValue());
-
- InstanceIdentifier<?> invNodeConnID = newNodeConnID(nodeKey, ncKey);
-
- List<Link> linkList = Arrays.asList(
- newLink("link1", newSourceTp("tp1"), newDestTp("dest")),
- newLink("link2", newSourceTp("source"), newDestTp("tp1")),
- newLink("link3", newSourceTp("source2"), newDestTp("dest2")));
- final Topology topology = new TopologyBuilder().setLink(linkList).build();
-
- InstanceIdentifier[] expDeletedIIDs = {
- topologyIID.child(Link.class, linkList.get(0).getKey()),
- topologyIID.child(Link.class, linkList.get(1).getKey()),
- topologyIID.child(Node.class, new NodeKey(new NodeId("node1")))
- .child(TerminationPoint.class, new TerminationPointKey(new TpId("tp1")))
- };
-
- final SettableFuture<Optional<Topology>> readFuture = SettableFuture.create();
- readFuture.set(Optional.of(topology));
- ReadWriteTransaction mockTx1 = mock(ReadWriteTransaction.class);
- doReturn(Futures.makeChecked(readFuture, ReadFailedException.MAPPER)).when(mockTx1)
- .read(LogicalDatastoreType.OPERATIONAL, topologyIID);
-
- SettableFuture<Optional<Node>> readFutureNode = SettableFuture.create();
- readFutureNode.set(Optional.of(topoNode));
- doReturn(Futures.makeChecked(readFutureNode, ReadFailedException.MAPPER)).when(mockTx1)
- .read(LogicalDatastoreType.OPERATIONAL, topoNodeII);
-
- CountDownLatch submitLatch1 = setupStubbedSubmit(mockTx1);
-
- int expDeleteCalls = expDeletedIIDs.length;
- CountDownLatch deleteLatch = new CountDownLatch(expDeleteCalls);
- ArgumentCaptor<InstanceIdentifier> deletedLinkIDs =
- ArgumentCaptor.forClass(InstanceIdentifier.class);
- setupStubbedDeletes(mockTx1, deletedLinkIDs, deleteLatch);
-
- doReturn(mockTx1).when(mockTxChain).newReadWriteTransaction();
-
- exporter.onNodeConnectorRemoved(new NodeConnectorRemovedBuilder().setNodeConnectorRef(
- new NodeConnectorRef(invNodeConnID)).build());
-
- waitForSubmit(submitLatch1);
-
- setReadFutureAsync(topology, readFuture);
-
- waitForDeletes(expDeleteCalls, deleteLatch);
-
- assertDeletedIDs(expDeletedIIDs, deletedLinkIDs);
-
- verifyMockTx(mockTx1);
- }
-
- @SuppressWarnings("rawtypes")
- @Test
- public void testOnNodeConnectorRemovedWithNoTopology() {
-
- NodeKey topoNodeKey = new NodeKey(new NodeId("node1"));
- TerminationPointKey terminationPointKey = new TerminationPointKey(new TpId("tp1"));
-
- InstanceIdentifier<Node> topoNodeII = topologyIID.child(Node.class, topoNodeKey);
- Node topoNode = new NodeBuilder().setKey(topoNodeKey).build();
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
- nodeKey = newInvNodeKey(topoNodeKey.getNodeId().getValue());
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey ncKey =
- newInvNodeConnKey(terminationPointKey.getTpId().getValue());
-
- InstanceIdentifier<?> invNodeConnID = newNodeConnID(nodeKey, ncKey);
-
- InstanceIdentifier[] expDeletedIIDs = {
- topologyIID.child(Node.class, new NodeKey(new NodeId("node1")))
- .child(TerminationPoint.class, new TerminationPointKey(new TpId("tp1")))
- };
-
- ReadWriteTransaction mockTx = mock(ReadWriteTransaction.class);
- doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockTx)
- .read(LogicalDatastoreType.OPERATIONAL, topologyIID);
- CountDownLatch submitLatch = setupStubbedSubmit(mockTx);
-
- SettableFuture<Optional<Node>> readFutureNode = SettableFuture.create();
- readFutureNode.set(Optional.of(topoNode));
- doReturn(Futures.makeChecked(readFutureNode, ReadFailedException.MAPPER)).when(mockTx)
- .read(LogicalDatastoreType.OPERATIONAL, topoNodeII);
-
- CountDownLatch deleteLatch = new CountDownLatch(1);
- ArgumentCaptor<InstanceIdentifier> deletedLinkIDs =
- ArgumentCaptor.forClass(InstanceIdentifier.class);
- setupStubbedDeletes(mockTx, deletedLinkIDs, deleteLatch);
-
- doReturn(mockTx).when(mockTxChain).newReadWriteTransaction();
-
- exporter.onNodeConnectorRemoved(new NodeConnectorRemovedBuilder().setNodeConnectorRef(
- new NodeConnectorRef(invNodeConnID)).build());
-
- waitForSubmit(submitLatch);
-
- waitForDeletes(1, deleteLatch);
-
- assertDeletedIDs(expDeletedIIDs, deletedLinkIDs);
- }
-
- @Test
- public void testOnNodeUpdated() {
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
- nodeKey = newInvNodeKey("node1");
- InstanceIdentifier<?> invNodeID = InstanceIdentifier.create(Nodes.class).child(
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node.class,
- nodeKey);
-
- ReadWriteTransaction mockTx = mock(ReadWriteTransaction.class);
- CountDownLatch submitLatch = setupStubbedSubmit(mockTx);
- doReturn(mockTx).when(mockTxChain).newReadWriteTransaction();
-
- exporter.onNodeUpdated(new NodeUpdatedBuilder().setNodeRef(new NodeRef(invNodeID))
- .setId(nodeKey.getId()).addAugmentation(FlowCapableNodeUpdated.class,
- new FlowCapableNodeUpdatedBuilder().build()).build());
-
- waitForSubmit(submitLatch);
-
- ArgumentCaptor<Node> mergedNode = ArgumentCaptor.forClass(Node.class);
- NodeId expNodeId = new NodeId("node1");
- verify(mockTx).merge(eq(LogicalDatastoreType.OPERATIONAL), eq(topologyIID.child(Node.class,
- new NodeKey(expNodeId))), mergedNode.capture(), eq(true));
- assertEquals("getNodeId", expNodeId, mergedNode.getValue().getNodeId());
- InventoryNode augmentation = mergedNode.getValue().getAugmentation(InventoryNode.class);
- assertNotNull("Missing augmentation", augmentation);
- assertEquals("getInventoryNodeRef", new NodeRef(invNodeID), augmentation.getInventoryNodeRef());
- }
-
- @Test
- public void testOnNodeConnectorUpdated() {
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
- nodeKey = newInvNodeKey("node1");
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey ncKey =
- newInvNodeConnKey("tp1");
-
- InstanceIdentifier<?> invNodeConnID = newNodeConnID(nodeKey, ncKey);
-
- ReadWriteTransaction mockTx = mock(ReadWriteTransaction.class);
- CountDownLatch submitLatch = setupStubbedSubmit(mockTx);
- doReturn(mockTx).when(mockTxChain).newReadWriteTransaction();
-
- exporter.onNodeConnectorUpdated(new NodeConnectorUpdatedBuilder().setNodeConnectorRef(
- new NodeConnectorRef(invNodeConnID)).setId(ncKey.getId()).addAugmentation(
- FlowCapableNodeConnectorUpdated.class,
- new FlowCapableNodeConnectorUpdatedBuilder().build()).build());
-
- waitForSubmit(submitLatch);
-
- ArgumentCaptor<TerminationPoint> mergedNode = ArgumentCaptor.forClass(TerminationPoint.class);
- NodeId expNodeId = new NodeId("node1");
- TpId expTpId = new TpId("tp1");
- InstanceIdentifier<TerminationPoint> expTpPath = topologyIID.child(
- Node.class, new NodeKey(expNodeId)).child(TerminationPoint.class,
- new TerminationPointKey(expTpId));
- verify(mockTx).merge(eq(LogicalDatastoreType.OPERATIONAL), eq(expTpPath),
- mergedNode.capture(), eq(true));
- assertEquals("getTpId", expTpId, mergedNode.getValue().getTpId());
- InventoryNodeConnector augmentation = mergedNode.getValue().getAugmentation(
- InventoryNodeConnector.class);
- assertNotNull("Missing augmentation", augmentation);
- assertEquals("getInventoryNodeConnectorRef", new NodeConnectorRef(invNodeConnID),
- augmentation.getInventoryNodeConnectorRef());
- }
-
- @SuppressWarnings("rawtypes")
- @Test
- public void testOnNodeConnectorUpdatedWithLinkStateDown() {
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
- nodeKey = newInvNodeKey("node1");
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey ncKey =
- newInvNodeConnKey("tp1");
-
- InstanceIdentifier<?> invNodeConnID = newNodeConnID(nodeKey, ncKey);
-
- List<Link> linkList = Arrays.asList(newLink("link1", newSourceTp("tp1"), newDestTp("dest")));
- Topology topology = new TopologyBuilder().setLink(linkList).build();
-
- ReadWriteTransaction mockTx = mock(ReadWriteTransaction.class);
- doReturn(Futures.immediateCheckedFuture(Optional.of(topology))).when(mockTx)
- .read(LogicalDatastoreType.OPERATIONAL, topologyIID);
- setupStubbedSubmit(mockTx);
-
- CountDownLatch deleteLatch = new CountDownLatch(1);
- ArgumentCaptor<InstanceIdentifier> deletedLinkIDs =
- ArgumentCaptor.forClass(InstanceIdentifier.class);
- setupStubbedDeletes(mockTx, deletedLinkIDs, deleteLatch);
-
- doReturn(mockTx).when(mockTxChain).newReadWriteTransaction();
-
- exporter.onNodeConnectorUpdated(new NodeConnectorUpdatedBuilder().setNodeConnectorRef(
- new NodeConnectorRef(invNodeConnID)).setId(ncKey.getId()).addAugmentation(
- FlowCapableNodeConnectorUpdated.class,
- new FlowCapableNodeConnectorUpdatedBuilder().setState(
- new StateBuilder().setLinkDown(true).build()).build()).build());
-
- waitForDeletes(1, deleteLatch);
-
- InstanceIdentifier<TerminationPoint> expTpPath = topologyIID.child(
- Node.class, new NodeKey(new NodeId("node1"))).child(TerminationPoint.class,
- new TerminationPointKey(new TpId("tp1")));
-
- verify(mockTx).merge(eq(LogicalDatastoreType.OPERATIONAL), eq(expTpPath),
- any(TerminationPoint.class), eq(true));
-
- assertDeletedIDs(new InstanceIdentifier[]{topologyIID.child(Link.class,
- linkList.get(0).getKey())}, deletedLinkIDs);
- }
-
-
- @SuppressWarnings("rawtypes")
- @Test
- public void testOnNodeConnectorUpdatedWithPortDown() {
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
- nodeKey = newInvNodeKey("node1");
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey ncKey =
- newInvNodeConnKey("tp1");
-
- InstanceIdentifier<?> invNodeConnID = newNodeConnID(nodeKey, ncKey);
-
- List<Link> linkList = Arrays.asList(newLink("link1", newSourceTp("tp1"), newDestTp("dest")));
- Topology topology = new TopologyBuilder().setLink(linkList).build();
-
- ReadWriteTransaction mockTx = mock(ReadWriteTransaction.class);
- doReturn(Futures.immediateCheckedFuture(Optional.of(topology))).when(mockTx)
- .read(LogicalDatastoreType.OPERATIONAL, topologyIID);
- setupStubbedSubmit(mockTx);
-
- CountDownLatch deleteLatch = new CountDownLatch(1);
- ArgumentCaptor<InstanceIdentifier> deletedLinkIDs =
- ArgumentCaptor.forClass(InstanceIdentifier.class);
- setupStubbedDeletes(mockTx, deletedLinkIDs, deleteLatch);
-
- doReturn(mockTx).when(mockTxChain).newReadWriteTransaction();
-
- exporter.onNodeConnectorUpdated(new NodeConnectorUpdatedBuilder().setNodeConnectorRef(
- new NodeConnectorRef(invNodeConnID)).setId(ncKey.getId()).addAugmentation(
- FlowCapableNodeConnectorUpdated.class,
- new FlowCapableNodeConnectorUpdatedBuilder().setConfiguration(
- new PortConfig(true, true, true, true)).build()).build());
-
- waitForDeletes(1, deleteLatch);
-
- InstanceIdentifier<TerminationPoint> expTpPath = topologyIID.child(
- Node.class, new NodeKey(new NodeId("node1"))).child(TerminationPoint.class,
- new TerminationPointKey(new TpId("tp1")));
-
- verify(mockTx).merge(eq(LogicalDatastoreType.OPERATIONAL), eq(expTpPath),
- any(TerminationPoint.class), eq(true));
-
- assertDeletedIDs(new InstanceIdentifier[]{topologyIID.child(Link.class,
- linkList.get(0).getKey())}, deletedLinkIDs);
- }