Bug 5386: Delete QoS and Queues entries from ovsdb on UNI deletion 15/35115/2
authorRashmi Pujar <rpujar@inocybe.com>
Thu, 18 Feb 2016 23:07:18 +0000 (18:07 -0500)
committerAlexis de Talhouët <adetalhouet@inocybe.com>
Fri, 19 Feb 2016 18:11:06 +0000 (18:11 +0000)
Change-Id: I6455bdaac16c7e5fcdef7d0c60287e3df9b61dad
Signed-off-by: Rashmi Pujar <rpujar@inocybe.com>
impl/src/main/java/org/opendaylight/unimgr/command/UniDeleteCommand.java
impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrMapper.java
impl/src/test/java/org/opendaylight/unimgr/command/UniDeleteCommandTest.java

index e87879a1e0647e44fcbe89f87ee93074e61744e4..2d3e26edbc33541a8a137c1a35e1a3ef9715eb7b 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.unimgr.command;
 
+import java.util.List;
 import java.util.Set;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -16,7 +17,12 @@ import org.opendaylight.unimgr.impl.UnimgrConstants;
 import org.opendaylight.unimgr.impl.UnimgrMapper;
 import org.opendaylight.unimgr.utils.MdsalUtils;
 import org.opendaylight.unimgr.utils.OvsdbUtils;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.Queues;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QueuesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
@@ -53,8 +59,29 @@ public class UniDeleteCommand extends AbstractDeleteCommand {
                                                                        LogicalDatastoreType.OPERATIONAL,
                                                                        ovsdbNodeIid);
                     if (optionalNode.isPresent()) {
-                        LOG.info("Delete bride node");
                         Node ovsdbNode = optionalNode.get();
+                        LOG.info("Delete QoS and Queues entries");
+                        List<QosEntries> qosList = ovsdbNode
+                                .getAugmentation(OvsdbNodeAugmentation.class)
+                                .getQosEntries();
+                        QosEntriesKey qosEntryKey = null;
+                        for (final QosEntries qosEntry : qosList) {
+                            qosEntryKey = qosEntry.getKey();
+                            InstanceIdentifier<QosEntries> qosIid = UnimgrMapper.getOvsdbQoSEntriesIid(ovsdbNode, qosEntryKey);
+                            MdsalUtils.deleteNode(dataBroker, qosIid, LogicalDatastoreType.CONFIGURATION);
+                        }
+
+                        List<Queues> queuesList = ovsdbNode
+                                .getAugmentation(OvsdbNodeAugmentation.class)
+                                .getQueues();
+                        QueuesKey queuesKey = null;
+                        for (final Queues queue : queuesList) {
+                            queuesKey = queue.getKey();
+                            InstanceIdentifier<Queues> queuesIid = UnimgrMapper.getOvsdbQueuesIid(ovsdbNode, queuesKey);
+                            MdsalUtils.deleteNode(dataBroker, queuesIid, LogicalDatastoreType.CONFIGURATION);
+                        }
+
+                        LOG.info("Delete bridge node");
                         InstanceIdentifier<Node> bridgeIid = UnimgrMapper.getOvsdbBridgeNodeIid(ovsdbNode);
                         Optional<Node> optBridgeNode = MdsalUtils.readNode(dataBroker, bridgeIid);
                         if (optBridgeNode.isPresent()) {
index 2e4d45b78a52040a4dae46beb6b87ee7dcd8dd74..f03bca14bdead43608725ec8f1965efed7b8e72d 100755 (executable)
@@ -345,4 +345,24 @@ public class UnimgrMapper {
                 .child(QueuesOtherConfig.class, new QueuesOtherConfigKey(UnimgrConstants.QOS_MAX_RATE));
         return queuesOtherConfig;
     }
+
+    public static InstanceIdentifier<QosEntries> getOvsdbQoSEntriesIid(Node ovsdbNode, QosEntriesKey qosEntryKey) {
+        InstanceIdentifier<QosEntries> qosEntriesIid = InstanceIdentifier
+                .create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(UnimgrConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class, new NodeKey(ovsdbNode.getNodeId()))
+                .augmentation(OvsdbNodeAugmentation.class)
+                .child(QosEntries.class, qosEntryKey);
+        return qosEntriesIid;
+    }
+
+    public static InstanceIdentifier<Queues> getOvsdbQueuesIid(Node ovsdbNode, QueuesKey queuesKey) {
+        InstanceIdentifier<Queues> queuesIid = InstanceIdentifier
+                .create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(UnimgrConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class, new NodeKey(ovsdbNode.getNodeId()))
+                .augmentation(OvsdbNodeAugmentation.class)
+                .child(Queues.class, queuesKey);
+        return queuesIid;
+    }
 }
index a5526c0e1a876c241ca6fd4f801be1cf88cc6802..e0a187ee77dc77cab785f68d01636751d5f4a459 100644 (file)
@@ -16,7 +16,9 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.powermock.api.support.membermodification.MemberMatcher.method;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import org.junit.Before;
@@ -33,7 +35,12 @@ import org.opendaylight.unimgr.utils.OvsdbUtils;
 import org.opendaylight.unimgr.utils.UniUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.Queues;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QueuesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentationBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
@@ -81,7 +88,7 @@ public class UniDeleteCommandTest {
     /**
      * Test method for {@link org.opendaylight.unimgr.command.UniDeleteCommand#execute()}.
      */
-    @SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
+    @SuppressWarnings({ "unchecked", "rawtypes"})
     @Test
     public void testExecute() {
         final Set<InstanceIdentifier<UniAugmentation>> removedUnis =
@@ -95,12 +102,25 @@ public class UniDeleteCommandTest {
                 .create(NetworkTopology.class)
                 .child(Topology.class, new TopologyKey(UnimgrConstants.UNI_TOPOLOGY_ID))
                 .child(Node.class,  new NodeKey(OVSDB_NODE_ID));
+        final Node ovsdbNode = mock(Node.class);
+        final OvsdbNodeAugmentation ovsdbNodeAugmentation = mock(OvsdbNodeAugmentation.class);
+        final QosEntries qosEntries = mock(QosEntries.class);
+        final Queues queues = mock(Queues.class);
 
         when(uniAugmentation.getIpAddress()).thenReturn(mock(IpAddress.class));
         when(uniAugmentation.getOvsdbNodeRef()).thenReturn(ovsNodedRef);
         when(ovsNodedRef.getValue()).thenReturn(uniKey);
         when(optionalNode.isPresent()).thenReturn(true);
-        when(optionalNode.get()).thenReturn(mock(Node.class));
+        when(optionalNode.get()).thenReturn(ovsdbNode);
+        when(ovsdbNode.getAugmentation(OvsdbNodeAugmentation.class)).thenReturn(ovsdbNodeAugmentation);
+        List<QosEntries> qosEntriesList = new ArrayList<>();
+        when(qosEntries.getKey()).thenReturn(mock(QosEntriesKey.class));
+        qosEntriesList.add(qosEntries);
+        when(ovsdbNodeAugmentation.getQosEntries()).thenReturn(qosEntriesList);
+        List<Queues> queuesList = new ArrayList<>();
+        when(queues.getKey()).thenReturn(mock(QueuesKey.class));
+        queuesList.add(queues);
+        when(ovsdbNodeAugmentation.getQueues()).thenReturn(queuesList);
         when(OvsdbUtils.extractRemoved(any(AsyncDataChangeEvent.class), any(Class.class)))
                 .thenReturn(removedUnis);
         when(MdsalUtils.read(any(DataBroker.class), any(LogicalDatastoreType.class),
@@ -114,11 +134,13 @@ public class UniDeleteCommandTest {
                 .thenReturn(instanceOfNode);
         when(UnimgrMapper.getUniIid(any(DataBroker.class), any(IpAddress.class),
                 any(LogicalDatastoreType.class))).thenReturn(instanceOfNode);
+        when(UnimgrMapper.getOvsdbQoSEntriesIid(any(Node.class), any(QosEntriesKey.class))).thenReturn(instanceOfNode);
+        when(UnimgrMapper.getOvsdbQueuesIid(any(Node.class), any(QueuesKey.class))).thenReturn(instanceOfNode);
         when(MdsalUtils.deleteNode(any(DataBroker.class), any(InstanceIdentifier.class),
                 any(LogicalDatastoreType.class))).thenReturn(true);
         uniDeleteCommand.execute();
 
-        PowerMockito.verifyStatic(times(3));
+        PowerMockito.verifyStatic(times(5));
         MdsalUtils.deleteNode(any(DataBroker.class), any(InstanceIdentifier.class),
                 any(LogicalDatastoreType.class));
     }