Merge "UserManager as role coordinator"
authorGiovanni Meo <gmeo@cisco.com>
Thu, 13 Jun 2013 14:43:40 +0000 (14:43 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 13 Jun 2013 14:43:40 +0000 (14:43 +0000)
opendaylight/northbound/integrationtest/src/test/java/org/opendaylight/controller/northbound/integrationtest/NorthboundIT.java
opendaylight/northbound/switchmanager/src/main/java/org/opendaylight/controller/switchmanager/northbound/SwitchNorthbound.java
opendaylight/protocol_plugins/stub/src/main/java/org/opendaylight/controller/protocol_plugins/stub/internal/InventoryService.java

index 0065cb5a08c78488542bb7d065667b0d4f917b38..112725976fa979a3ea2dce55c1f96369709cacc3 100644 (file)
@@ -167,6 +167,314 @@ public class NorthboundIT {
         }
     }
 
+    private void testNodeProperties(JSONObject node, Integer nodeId,
+            String nodeType, Integer timestamp, String timestampName,
+            Integer actionsValue, Integer capabilitiesValue,
+            Integer tablesValue, Integer buffersValue) throws JSONException {
+
+        JSONObject nodeInfo = node.getJSONObject("node");
+        Assert.assertEquals(nodeId, (Integer) nodeInfo.getInt("@id"));
+        Assert.assertEquals(nodeType, nodeInfo.getString("@type"));
+
+        JSONObject properties = node.getJSONObject("properties");
+
+        if (timestamp == null || timestampName == null) {
+            Assert.assertFalse(properties.has("timeStamp"));
+        } else {
+            Assert.assertEquals(
+                    timestamp,
+                    (Integer) properties.getJSONObject("timeStamp").getInt(
+                            "timestamp"));
+            Assert.assertEquals(
+                    timestampName,
+                    properties.getJSONObject("timeStamp").getString(
+                            "timestampName"));
+        }
+        if (actionsValue == null) {
+            Assert.assertFalse(properties.has("actions"));
+        } else {
+            Assert.assertEquals(actionsValue, (Integer) properties
+                    .getJSONObject("actions").getInt("actionsValue"));
+        }
+        if (capabilitiesValue == null) {
+            Assert.assertFalse(properties.has("capabilities"));
+        } else {
+            Assert.assertEquals(capabilitiesValue, (Integer) properties
+                    .getJSONObject("capabilities").getInt("capabilitiesValue"));
+        }
+        if (tablesValue == null) {
+            Assert.assertFalse(properties.has("tables"));
+        } else {
+            Assert.assertEquals(tablesValue, (Integer) properties
+                    .getJSONObject("tables").getInt("tablesValue"));
+        }
+        if (buffersValue == null) {
+            Assert.assertFalse(properties.has("buffers"));
+        } else {
+            Assert.assertEquals(buffersValue, (Integer) properties
+                    .getJSONObject("buffers").getInt("buffersValue"));
+        }
+    }
+
+    private void testNodeConnectorProperties(
+            JSONObject nodeConnectorProperties, Integer ncId, String ncType,
+            Integer nodeId, String nodeType, Integer state,
+            Integer capabilities, Integer bandwidth) throws JSONException {
+
+        JSONObject nodeConnector = nodeConnectorProperties
+                .getJSONObject("nodeconnector");
+        JSONObject node = nodeConnector.getJSONObject("node");
+        JSONObject properties = nodeConnectorProperties
+                .getJSONObject("properties");
+
+        Assert.assertEquals(ncId, (Integer) nodeConnector.getInt("@id"));
+        Assert.assertEquals(ncType, nodeConnector.getString("@type"));
+        Assert.assertEquals(nodeId, (Integer) node.getInt("@id"));
+        Assert.assertEquals(nodeType, node.getString("@type"));
+        if (state == null) {
+            Assert.assertFalse(properties.has("state"));
+        } else {
+            Assert.assertEquals(
+                    state,
+                    (Integer) properties.getJSONObject("state").getInt(
+                            "stateValue"));
+        }
+        if (capabilities == null) {
+            Assert.assertFalse(properties.has("capabilities"));
+        } else {
+            Assert.assertEquals(capabilities, (Integer) properties
+                    .getJSONObject("capabilities").getInt("capabilitiesValue"));
+        }
+        if (bandwidth == null) {
+            Assert.assertFalse(properties.has("bandwidth"));
+        } else {
+            Assert.assertEquals(
+                    bandwidth,
+                    (Integer) properties.getJSONObject("bandwidth").getInt(
+                            "bandwidthValue"));
+        }
+
+    }
+
+    @Test
+    public void testSwitchManager() {
+        String baseURL = "http://127.0.0.1:8080/controller/nb/v2/switch/default/";
+
+        // define Node/NodeConnector attributes for test
+        int nodeId_1 = 51966;
+        int nodeId_2 = 3366;
+        int nodeId_3 = 4477;
+        int nodeConnectorId_1 = 51966;
+        int nodeConnectorId_2 = 12;
+        int nodeConnectorId_3 = 34;
+        String nodeType = "STUB";
+        String ncType = "STUB";
+        int timestamp_1 = 100000;
+        String timestampName_1 = "connectedSince";
+        int actionsValue_1 = 2;
+        int capabilitiesValue_1 = 3;
+        int tablesValue_1 = 1;
+        int buffersValue_1 = 1;
+        int ncState = 1;
+        int ncCapabilities = 1;
+        int ncBandwidth = 1000000000;
+
+        // Test GET all nodes
+        try {
+            String result = getJsonResult(baseURL + "nodes");
+            JSONTokener jt = new JSONTokener(result);
+            JSONObject json = new JSONObject(jt);
+
+            // Test for first node
+            JSONObject node = getJsonInstance(json, "nodeProperties", nodeId_1);
+            Assert.assertNotNull(node);
+            testNodeProperties(node, nodeId_1, nodeType, timestamp_1,
+                    timestampName_1, actionsValue_1, capabilitiesValue_1,
+                    tablesValue_1, buffersValue_1);
+
+            // Test 2nd node, properties of 2nd node same as first node
+            node = getJsonInstance(json, "nodeProperties", nodeId_2);
+            Assert.assertNotNull(node);
+            testNodeProperties(node, nodeId_2, nodeType, timestamp_1,
+                    timestampName_1, actionsValue_1, capabilitiesValue_1,
+                    tablesValue_1, buffersValue_1);
+
+            // Test 3rd node, properties of 3rd node same as first node
+            node = getJsonInstance(json, "nodeProperties", nodeId_3);
+            Assert.assertNotNull(node);
+            testNodeProperties(node, nodeId_3, nodeType, timestamp_1,
+                    timestampName_1, actionsValue_1, capabilitiesValue_1,
+                    tablesValue_1, buffersValue_1);
+
+        } catch (Exception e) {
+            Assert.assertTrue(false);
+        }
+
+        // Test GET nodeConnectors of a node
+        try {
+            //Test first node
+            String result = getJsonResult(baseURL + "node/STUB/" + nodeId_1);
+            JSONTokener jt = new JSONTokener(result);
+            JSONObject json = new JSONObject(jt);
+            JSONObject nodeConnectorProperties = json
+                    .getJSONObject("nodeConnectorProperties");
+
+            testNodeConnectorProperties(nodeConnectorProperties,
+                    nodeConnectorId_1, ncType, nodeId_1, nodeType, ncState,
+                    ncCapabilities, ncBandwidth);
+
+            //Test second node
+            result = getJsonResult(baseURL + "node/STUB/" + nodeId_2);
+            jt = new JSONTokener(result);
+            json = new JSONObject(jt);
+            nodeConnectorProperties = json
+                    .getJSONObject("nodeConnectorProperties");
+
+            testNodeConnectorProperties(nodeConnectorProperties,
+                    nodeConnectorId_2, ncType, nodeId_2, nodeType, ncState,
+                    ncCapabilities, ncBandwidth);
+
+            //Test third node
+            result = getJsonResult(baseURL + "node/STUB/" + nodeId_3);
+            jt = new JSONTokener(result);
+            json = new JSONObject(jt);
+
+            nodeConnectorProperties = json
+                    .getJSONObject("nodeConnectorProperties");
+            testNodeConnectorProperties(nodeConnectorProperties,
+                    nodeConnectorId_3, ncType, nodeId_3, nodeType, ncState,
+                    ncCapabilities, ncBandwidth);
+
+        } catch (Exception e) {
+            Assert.assertTrue(false);
+        }
+
+        // Test delete node property
+        try {
+            // Delete timestamp property from node1
+            String result = getJsonResult(baseURL + "node/STUB/" + nodeId_1
+                    + "/property/timeStamp", "DELETE");
+            Assert.assertEquals(200, httpResponseCode.intValue());
+
+            // Check node1
+            result = getJsonResult(baseURL + "nodes");
+            JSONTokener jt = new JSONTokener(result);
+            JSONObject json = new JSONObject(jt);
+            JSONObject node = getJsonInstance(json, "nodeProperties", nodeId_1);
+            Assert.assertNotNull(node);
+            testNodeProperties(node, nodeId_1, nodeType, null, null,
+                    actionsValue_1, capabilitiesValue_1, tablesValue_1,
+                    buffersValue_1);
+
+            // Delete actions property from node2
+            result = getJsonResult(baseURL + "node/STUB/" + nodeId_2
+                    + "/property/actions", "DELETE");
+            Assert.assertEquals(200, httpResponseCode.intValue());
+
+            // Check node2
+            result = getJsonResult(baseURL + "nodes");
+            jt = new JSONTokener(result);
+            json = new JSONObject(jt);
+            node = getJsonInstance(json, "nodeProperties", nodeId_2);
+            Assert.assertNotNull(node);
+            testNodeProperties(node, nodeId_2, nodeType, timestamp_1,
+                    timestampName_1, null, capabilitiesValue_1, tablesValue_1,
+                    buffersValue_1);
+
+        } catch (Exception e) {
+            Assert.assertTrue(false);
+        }
+
+        // Test add property to node
+        try {
+            // Add Tier and Bandwidth property to node1
+            String result = getJsonResult(baseURL + "node/STUB/" + nodeId_1
+                    + "/property/tier/1001", "PUT");
+            Assert.assertEquals(201, httpResponseCode.intValue());
+            result = getJsonResult(baseURL + "node/STUB/" + nodeId_1
+                    + "/property/bandwidth/1002", "PUT");
+            Assert.assertEquals(201, httpResponseCode.intValue());
+
+            // Test for first node
+            result = getJsonResult(baseURL + "nodes");
+            JSONTokener jt = new JSONTokener(result);
+            JSONObject json = new JSONObject(jt);
+            JSONObject node = getJsonInstance(json, "nodeProperties", nodeId_1);
+            Assert.assertNotNull(node);
+            Assert.assertEquals(1001, node.getJSONObject("properties")
+                    .getJSONObject("tier").getInt("tierValue"));
+            Assert.assertEquals(1002, node.getJSONObject("properties")
+                    .getJSONObject("bandwidth").getInt("bandwidthValue"));
+
+        } catch (Exception e) {
+            Assert.assertTrue(false);
+        }
+
+        // Test delete nodeConnector property
+        try {
+            // Delete state property of nodeconnector1
+            String result = getJsonResult(baseURL + "nodeconnector/STUB/"
+                    + nodeId_1 + "/STUB/" + nodeConnectorId_1
+                    + "/property/state", "DELETE");
+            Assert.assertEquals(200, httpResponseCode.intValue());
+
+            result = getJsonResult(baseURL + "node/STUB/" + nodeId_1);
+            JSONTokener jt = new JSONTokener(result);
+            JSONObject json = new JSONObject(jt);
+            JSONObject nodeConnectorProperties = json
+                    .getJSONObject("nodeConnectorProperties");
+
+            testNodeConnectorProperties(nodeConnectorProperties,
+                    nodeConnectorId_1, ncType, nodeId_1, nodeType, null,
+                    ncCapabilities, ncBandwidth);
+
+            // Delete capabilities property of nodeconnector2
+            result = getJsonResult(baseURL + "nodeconnector/STUB/" + nodeId_2
+                    + "/STUB/" + nodeConnectorId_2 + "/property/capabilities",
+                    "DELETE");
+            Assert.assertEquals(200, httpResponseCode.intValue());
+
+            result = getJsonResult(baseURL + "node/STUB/" + nodeId_2);
+            jt = new JSONTokener(result);
+            json = new JSONObject(jt);
+            nodeConnectorProperties = json
+                    .getJSONObject("nodeConnectorProperties");
+
+            testNodeConnectorProperties(nodeConnectorProperties,
+                    nodeConnectorId_2, ncType, nodeId_2, nodeType, ncState,
+                    null, ncBandwidth);
+
+        } catch (Exception e) {
+            Assert.assertTrue(false);
+        }
+
+        // Test PUT nodeConnector property
+        try {
+            int newBandwidth = 1001;
+
+            // Add Name/Bandwidth property to nodeConnector1
+            String result = getJsonResult(baseURL + "nodeconnector/STUB/"
+                    + nodeId_1 + "/STUB/" + nodeConnectorId_1
+                    + "/property/bandwidth/" + newBandwidth, "PUT");
+            Assert.assertEquals(201, httpResponseCode.intValue());
+
+            result = getJsonResult(baseURL + "node/STUB/" + nodeId_1);
+            JSONTokener jt = new JSONTokener(result);
+            JSONObject json = new JSONObject(jt);
+            JSONObject nodeConnectorProperties = json
+                    .getJSONObject("nodeConnectorProperties");
+
+            // Check for new bandwidth value, state value removed from previous
+            // test
+            testNodeConnectorProperties(nodeConnectorProperties,
+                    nodeConnectorId_1, ncType, nodeId_1, nodeType, null,
+                    ncCapabilities, newBandwidth);
+
+        } catch (Exception e) {
+            Assert.assertTrue(false);
+        }
+    }
+
     @Test
     public void testStatistics() {
         String actionTypes[] = { "drop", "loopback", "flood", "floodAll",
index e92583a33a9543c30c60b269ddc67a0c075c8561..d3b023512bebd5790559b7e047b813e0558395e9 100644 (file)
@@ -205,7 +205,7 @@ public class SwitchNorthbound {
         }
 
         handleNodeAvailability(containerName, nodeType, nodeId);
-        Node node = Node.fromString(nodeId);
+        Node node = Node.fromString(nodeType, nodeId);
 
         Property prop = switchManager.createProperty(propName, propValue);
         if (prop == null) {
@@ -262,8 +262,7 @@ public class SwitchNorthbound {
         }
 
         handleNodeAvailability(containerName, nodeType, nodeId);
-        Node node = Node.fromString(nodeId);
-
+        Node node = Node.fromString(nodeType, nodeId);
         Status ret = switchManager.removeNodeProp(node, propertyName);
         if (ret.isSuccess()) {
             return Response.ok().build();
@@ -316,8 +315,7 @@ public class SwitchNorthbound {
         }
 
         handleNodeAvailability(containerName, nodeType, nodeId);
-        Node node = Node.fromString(nodeId);
-
+        Node node = Node.fromString(nodeType, nodeId);
         List<NodeConnectorProperties> res = new ArrayList<NodeConnectorProperties>();
         Set<NodeConnector> ncs = switchManager.getNodeConnectors(node);
         if (ncs == null) {
@@ -397,12 +395,12 @@ public class SwitchNorthbound {
         }
 
         handleNodeAvailability(containerName, nodeType, nodeId);
-        Node node = Node.fromString(nodeId);
+        Node node = Node.fromString(nodeType, nodeId);
 
         handleNodeConnectorAvailability(containerName, node, nodeConnectorType,
                 nodeConnectorId);
         NodeConnector nc = NodeConnector
-                .fromStringNoNode(nodeConnectorId, node);
+                .fromStringNoNode(nodeConnectorType, nodeConnectorId, node);
 
         Property prop = switchManager.createProperty(propName, propValue);
         if (prop == null) {
@@ -470,13 +468,12 @@ public class SwitchNorthbound {
         }
 
         handleNodeAvailability(containerName, nodeType, nodeId);
-        Node node = Node.fromString(nodeId);
+        Node node = Node.fromString(nodeType, nodeId);
 
         handleNodeConnectorAvailability(containerName, node, nodeConnectorType,
                 nodeConnectorId);
         NodeConnector nc = NodeConnector
-                .fromStringNoNode(nodeConnectorId, node);
-
+                .fromStringNoNode(nodeConnectorType, nodeConnectorId, node);
         Status ret = switchManager.removeNodeConnectorProp(nc, propertyName);
         if (ret.isSuccess()) {
             return Response.ok().build();
index b3909a775bbe36156fa127e9b54841f02556a40e..22a4343f332ed2e79e7f7ecc979d8535acc4ea26 100644 (file)
@@ -42,9 +42,19 @@ public class InventoryService implements IPluginInInventoryService {
     private static final Logger logger = LoggerFactory
             .getLogger(InventoryService.class);
 
-    private ConcurrentMap<Node, Map<String, Property>> nodeProps; // properties are maintained in global container only
-    private ConcurrentMap<NodeConnector, Map<String, Property>> nodeConnectorProps; // properties are maintained in global container only
-
+    private ConcurrentMap<Node, Map<String, Property>> nodeProps; // properties
+                                                                  // are
+                                                                  // maintained
+                                                                  // in global
+                                                                  // container
+                                                                  // only
+    private ConcurrentMap<NodeConnector, Map<String, Property>> nodeConnectorProps; // properties
+                                                                                    // are
+                                                                                    // maintained
+                                                                                    // in
+                                                                                    // global
+                                                                                    // container
+                                                                                    // only
 
     /**
      * Function called by the dependency manager when all the required
@@ -55,51 +65,65 @@ public class InventoryService implements IPluginInInventoryService {
         nodeProps = new ConcurrentHashMap<Node, Map<String, Property>>();
         nodeConnectorProps = new ConcurrentHashMap<NodeConnector, Map<String, Property>>();
         Node.NodeIDType.registerIDType("STUB", Integer.class);
-        NodeConnector.NodeConnectorIDType.registerIDType("STUB", Integer.class, "STUB");
-    }
+        NodeConnector.NodeConnectorIDType.registerIDType("STUB", Integer.class,
+                "STUB");
 
-    /**
-     * Function called by the dependency manager when at least one dependency
-     * become unsatisfied or when the component is shutting down because for
-     * example bundle is being stopped.
-     *
-     */
-    void destroy() {
+        setupNodeProps();
+        setupNodeConnectorProps();
     }
 
-    /**
-     * Function called by dependency manager after "init ()" is called and after
-     * the services provided by the class are registered in the service registry
-     *
-     */
-    void start() {
-    }
+    private void setupNodeConnectorProps() {
+        Map<String, Property> ncPropMap = new HashMap<String, Property>();
+        Capabilities cap = new Capabilities(
+                CapabilitiesType.FLOW_STATS_CAPABILITY.getValue());
+        ncPropMap.put(Capabilities.CapabilitiesPropName, cap);
+        Bandwidth bw = new Bandwidth(Bandwidth.BW1Gbps);
+        ncPropMap.put(Bandwidth.BandwidthPropName, bw);
+        State st = new State(State.EDGE_UP);
+        ncPropMap.put(State.StatePropName, st);
 
-    /**
-     * Function called by the dependency manager before the services exported by
-     * the component are unregistered, this will be followed by a "destroy ()"
-     * calls
-     *
-     */
-    void stop() {
-    }
+        // setup property map for all node connectors
+        NodeConnector nc;
+        Node node;
+        try {
+            node = new Node("STUB", new Integer(0xCAFE));
+            nc = new NodeConnector("STUB", 0xCAFE, node);
+        } catch (ConstructionException e) {
+            nc = null;
+            node = null;
+        }
+        nodeConnectorProps.put(nc, ncPropMap);
 
-    /**
-     * Retrieve nodes from openflow
-     */
-    @Override
-    public ConcurrentMap<Node, Map<String, Property>> getNodeProps() {
+        try {
+            node = new Node("STUB", 3366);
+            nc = new NodeConnector("STUB", 12, node);
+        } catch (ConstructionException e) {
+            nc = null;
+            node = null;
+        }
+        nodeConnectorProps.put(nc, ncPropMap);
+
+        try {
+            node = new Node("STUB", 4477);
+            nc = new NodeConnector("STUB", 34, node);
+        } catch (ConstructionException e) {
+            nc = null;
+            node = null;
+        }
+        nodeConnectorProps.put(nc, ncPropMap);
 
-        //  setup nodeProps
+    }
+
+    private void setupNodeProps() {
         Map<String, Property> propMap = new HashMap<String, Property>();
 
-        Tables t = new Tables((byte)1);
+        Tables t = new Tables((byte) 1);
         propMap.put(Tables.TablesPropName, t);
-        Capabilities c = new Capabilities((int)3);
+        Capabilities c = new Capabilities((int) 3);
         propMap.put(Capabilities.CapabilitiesPropName, c);
-        Actions a = new Actions((int)2);
+        Actions a = new Actions((int) 2);
         propMap.put(Actions.ActionsPropName, a);
-        Buffers b = new Buffers((int)1);
+        Buffers b = new Buffers((int) 1);
         propMap.put(Buffers.BuffersPropName, b);
         Long connectedSinceTime = 100000L;
         TimeStamp timeStamp = new TimeStamp(connectedSinceTime,
@@ -108,28 +132,61 @@ public class InventoryService implements IPluginInInventoryService {
 
         // setup property map for all nodes
         Node node;
-        try{
+        try {
             node = new Node("STUB", new Integer(0xCAFE));
-        }catch(ConstructionException e){
+        } catch (ConstructionException e) {
             node = null;
         }
 
         nodeProps.put(node, propMap);
 
-        try{
+        try {
             node = new Node("STUB", 3366);
-        }catch(ConstructionException e){
+        } catch (ConstructionException e) {
             node = null;
         }
         nodeProps.put(node, propMap);
 
-        try{
+        try {
             node = new Node("STUB", 4477);
-        }catch(ConstructionException e){
+        } catch (ConstructionException e) {
             node = null;
         }
         nodeProps.put(node, propMap);
 
+    }
+
+    /**
+     * Function called by the dependency manager when at least one dependency
+     * become unsatisfied or when the component is shutting down because for
+     * example bundle is being stopped.
+     *
+     */
+    void destroy() {
+    }
+
+    /**
+     * Function called by dependency manager after "init ()" is called and after
+     * the services provided by the class are registered in the service registry
+     *
+     */
+    void start() {
+    }
+
+    /**
+     * Function called by the dependency manager before the services exported by
+     * the component are unregistered, this will be followed by a "destroy ()"
+     * calls
+     *
+     */
+    void stop() {
+    }
+
+    /**
+     * Retrieve nodes from openflow
+     */
+    @Override
+    public ConcurrentMap<Node, Map<String, Property>> getNodeProps() {
         return nodeProps;
     }
 
@@ -139,49 +196,7 @@ public class InventoryService implements IPluginInInventoryService {
     @Override
     public ConcurrentMap<NodeConnector, Map<String, Property>> getNodeConnectorProps(
             Boolean refresh) {
-
-        //  setup nodeConnectorProps
-        Map<String, Property> ncPropMap = new HashMap<String, Property>();
-        Capabilities cap = new Capabilities
-                (CapabilitiesType.FLOW_STATS_CAPABILITY.getValue());
-        ncPropMap.put(Capabilities.CapabilitiesPropName, cap);
-        Bandwidth bw = new Bandwidth (Bandwidth.BW1Gbps);
-        ncPropMap.put(Bandwidth.BandwidthPropName, bw);
-        State st = new State (State.EDGE_UP);
-        ncPropMap.put(State.StatePropName, st);
-
-        // setup property map for all node connectors
-        NodeConnector nc;
-        Node node;
-        try{
-            node = new Node("STUB", new Integer(0xCAFE));
-            nc = new NodeConnector("STUB", 0xCAFE, node);
-        }catch(ConstructionException e){
-            nc = null;
-            node = null;
-        }
-        nodeConnectorProps.put(nc, ncPropMap);
-
-        try{
-            node = new Node("STUB", 3366);
-            nc = new NodeConnector("STUB", 12, node);
-         } catch(ConstructionException e){
-            nc = null;
-            node = null;
-         }
-         nodeConnectorProps.put(nc, ncPropMap);
-
-         try{
-            node = new Node("STUB", 4477);
-            nc = new NodeConnector("STUB", 34, node);
-         }catch(ConstructionException e){
-            nc = null;
-            node = null;
-         }
-         nodeConnectorProps.put(nc, ncPropMap);
-
-         return nodeConnectorProps;
+        return nodeConnectorProps;
     }
 
-
 }