Remove version hard coding in integration tests
[controller.git] / opendaylight / northbound / integrationtest / src / test / java / org / opendaylight / controller / northbound / integrationtest / NorthboundIT.java
index 85b77b2f4de000f37b2ebe487623a6aa5fc0df8a..b428e1610a085580d1c21bcbd6d020053796344e 100644 (file)
@@ -200,8 +200,8 @@ public class NorthboundIT {
             Integer buffersValue) throws JSONException {
 
         JSONObject nodeInfo = node.getJSONObject("node");
-        Assert.assertEquals(nodeId, (Integer) nodeInfo.getInt("@id"));
-        Assert.assertEquals(nodeType, nodeInfo.getString("@type"));
+        Assert.assertEquals(nodeId, (Integer) nodeInfo.getInt("id"));
+        Assert.assertEquals(nodeType, nodeInfo.getString("type"));
 
         JSONObject properties = node.getJSONObject("properties");
 
@@ -242,10 +242,10 @@ public class NorthboundIT {
         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"));
+        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 {
@@ -272,50 +272,99 @@ public class NorthboundIT {
 
         String name1 = "testSubnet1";
         String subnet1 = "1.1.1.1/24";
+
         String name2 = "testSubnet2";
         String subnet2 = "2.2.2.2/24";
+        String[] nodePorts2 = {"2/1", "2/2", "2/3", "2/4"};
+        StringBuilder nodePortsJson2 = new StringBuilder();
+        nodePortsJson2.append(nodePorts2[0] + "," + nodePorts2[1]  + "," + nodePorts2[2] + "," + nodePorts2[3]);
+
+        String name3 = "testSubnet3";
+        String subnet3 = "3.3.3.3/24";
+        String[] nodePorts3 = {"3/1", "3/2", "3/3"};
+        StringBuilder nodePortsJson3 = new StringBuilder();
+        nodePortsJson3.append(nodePorts3[0] + "," + nodePorts3[1]  + "," + nodePorts3[2]);
+        StringBuilder nodePortsJson3_1 = new StringBuilder();
+        nodePortsJson3_1.append(nodePortsJson3).append(",").append(nodePortsJson2);
 
         // Test GET subnets in default container
-        String result = getJsonResult(baseURL + "default");
+        String result = getJsonResult(baseURL + "default/subnet/all");
         JSONTokener jt = new JSONTokener(result);
         JSONObject json = new JSONObject(jt);
         Assert.assertEquals("{}", result);
 
         // Test GET subnet1 expecting 404
-        result = getJsonResult(baseURL + "default/" + name1);
+        result = getJsonResult(baseURL + "default/subnet/" + name1);
         Assert.assertEquals(404, httpResponseCode.intValue());
 
         // Test POST subnet1
-        String queryParameter = new QueryParameter("subnetName", name1).add("subnet", subnet1).getString();
-        result = getJsonResult(baseURL + "default/" + name1 + queryParameter, "POST");
-        Assert.assertEquals(201, httpResponseCode.intValue());
+        JSONObject jo = new JSONObject().append("name", name1).append("subnet", subnet1);
+        // execute HTTP request and verify response code
+        result = getJsonResult(baseURL + "default/subnet/" + name1, "POST", jo.toString());
+        Assert.assertTrue(httpResponseCode == 201);
 
         // Test GET subnet1
-        result = getJsonResult(baseURL + "default/" + name1);
+        result = getJsonResult(baseURL + "default/subnet/" + name1);
         jt = new JSONTokener(result);
         json = new JSONObject(jt);
         Assert.assertEquals(200, httpResponseCode.intValue());
-        Assert.assertEquals(name1, json.getString("@name"));
-        Assert.assertEquals(subnet1, json.getString("@subnet"));
+        Assert.assertEquals(name1, json.getString("name"));
+        Assert.assertEquals(subnet1, json.getString("subnet"));
 
         // Test POST subnet2
-        queryParameter = new QueryParameter("subnetName", name2).add("subnet", subnet2).getString();
-        result = getJsonResult(baseURL + "default/" + name2 + queryParameter, "POST");
+        JSONObject jo2 = new JSONObject().append("name", name2).append("subnet", subnet2);
+        // execute HTTP request and verify response code
+        result = getJsonResult(baseURL + "default/subnet/" + name2, "POST", jo2.toString());
+        Assert.assertEquals(201, httpResponseCode.intValue());
+        // Test POST nodePorts
+        jo2.append("nodePorts", nodePortsJson2);
+        // execute HTTP request and verify response code
+        result = getJsonResult(baseURL + "default/subnet/" + name2 + "/node-ports", "POST", jo2.toString());
+        Assert.assertEquals(200, httpResponseCode.intValue());
+        // Test POST subnet3
+        JSONObject jo3 = new JSONObject().append("name", name3).append("subnet", subnet3);
+        // execute HTTP request and verify response code
+        result = getJsonResult(baseURL + "default/subnet/" + name3, "POST", jo3.toString());
         Assert.assertEquals(201, httpResponseCode.intValue());
+        // Test POST nodePorts
+        jo3.append("nodePorts", nodePortsJson3);
+        // execute HTTP request and verify response code
+        result = getJsonResult(baseURL + "default/subnet/" + name3 + "/node-ports", "POST", jo3.toString());
+        Assert.assertEquals(200, httpResponseCode.intValue());
+        // Test PUT nodePorts
+        jo3.remove("nodePorts");
+        jo3.append("nodePorts", nodePortsJson3_1);
+        result = getJsonResult(baseURL + "default/subnet/" + name3 + "/node-ports", "PUT", jo3.toString());
+        Assert.assertEquals(200, httpResponseCode.intValue());
 
         // Test GET all subnets in default container
-        result = getJsonResult(baseURL + "default");
+        result = getJsonResult(baseURL + "default/subnet/all");
         jt = new JSONTokener(result);
         json = new JSONObject(jt);
         JSONArray subnetConfigArray = json.getJSONArray("subnetConfig");
         JSONObject subnetConfig;
-        Assert.assertEquals(2, subnetConfigArray.length());
+        Assert.assertEquals(3, subnetConfigArray.length());
         for (int i = 0; i < subnetConfigArray.length(); i++) {
             subnetConfig = subnetConfigArray.getJSONObject(i);
-            if (subnetConfig.getString("@name").equals(name1)) {
-                Assert.assertEquals(subnet1, subnetConfig.getString("@subnet"));
-            } else if (subnetConfig.getString("@name").equals(name2)) {
-                Assert.assertEquals(subnet2, subnetConfig.getString("@subnet"));
+            if (subnetConfig.getString("name").equals(name1)) {
+                Assert.assertEquals(subnet1, subnetConfig.getString("subnet"));
+            } else if (subnetConfig.getString("name").equals(name2)) {
+                Assert.assertEquals(subnet2, subnetConfig.getString("subnet"));
+                String[] nodePortsGet2 = subnetConfig.getString("nodePorts").split(",");
+                Assert.assertEquals(nodePorts2[0], nodePortsGet2[0]);
+                Assert.assertEquals(nodePorts2[1], nodePortsGet2[1]);
+                Assert.assertEquals(nodePorts2[2], nodePortsGet2[2]);
+                Assert.assertEquals(nodePorts2[3], nodePortsGet2[3]);
+            } else if (subnetConfig.getString("name").equals(name3)) {
+                Assert.assertEquals(subnet3, subnetConfig.getString("subnet"));
+                String[] nodePortsGet = subnetConfig.getString("nodePorts").split(",");
+                Assert.assertEquals(nodePorts3[0], nodePortsGet[0]);
+                Assert.assertEquals(nodePorts3[1], nodePortsGet[1]);
+                Assert.assertEquals(nodePorts3[2], nodePortsGet[2]);
+                Assert.assertEquals(nodePorts2[0], nodePortsGet[3]);
+                Assert.assertEquals(nodePorts2[1], nodePortsGet[4]);
+                Assert.assertEquals(nodePorts2[2], nodePortsGet[5]);
+                Assert.assertEquals(nodePorts2[3], nodePortsGet[6]);
             } else {
                 // Unexpected config name
                 Assert.assertTrue(false);
@@ -323,14 +372,13 @@ public class NorthboundIT {
         }
 
         // Test DELETE subnet1
-        result = getJsonResult(baseURL + "default/" + name1, "DELETE");
-        Assert.assertEquals(200, httpResponseCode.intValue());
+        result = getJsonResult(baseURL + "default/subnet/" + name1, "DELETE");
+        Assert.assertEquals(204, httpResponseCode.intValue());
 
         // Test GET deleted subnet1
-        result = getJsonResult(baseURL + "default/" + name1);
+        result = getJsonResult(baseURL + "default/subnet/" + name1);
         Assert.assertEquals(404, httpResponseCode.intValue());
-
-    }
+  }
 
     @Test
     public void testStaticRoutingNorthbound() throws JSONException {
@@ -564,8 +612,8 @@ public class NorthboundIT {
         JSONObject flowStatistics = getJsonInstance(json, "flowStatistics", 0xCAFE);
         JSONObject node = flowStatistics.getJSONObject("node");
         // test that node was returned properly
-        Assert.assertTrue(node.getInt("@id") == 0xCAFE);
-        Assert.assertEquals(node.getString("@type"), "STUB");
+        Assert.assertTrue(node.getInt("id") == 0xCAFE);
+        Assert.assertEquals(node.getString("type"), "STUB");
 
         // test that flow statistics results are correct
         JSONArray flowStats = flowStatistics.getJSONArray("flowStatistic");
@@ -583,8 +631,8 @@ public class NorthboundIT {
         JSONObject portStatistics = getJsonInstance(json, "portStatistics", 0xCAFE);
         JSONObject node2 = portStatistics.getJSONObject("node");
         // test that node was returned properly
-        Assert.assertTrue(node2.getInt("@id") == 0xCAFE);
-        Assert.assertEquals(node2.getString("@type"), "STUB");
+        Assert.assertTrue(node2.getInt("id") == 0xCAFE);
+        Assert.assertEquals(node2.getString("type"), "STUB");
 
         // test that port statistic results are correct
         JSONObject portStat = portStatistics.getJSONObject("portStatistic");
@@ -607,8 +655,8 @@ public class NorthboundIT {
         json = new JSONObject(jt);
         node = json.getJSONObject("node");
         // test that node was returned properly
-        Assert.assertTrue(node.getInt("@id") == 0xCAFE);
-        Assert.assertEquals(node.getString("@type"), "STUB");
+        Assert.assertTrue(node.getInt("id") == 0xCAFE);
+        Assert.assertEquals(node.getString("type"), "STUB");
 
         // test that flow statistics results are correct
         flowStats = json.getJSONArray("flowStatistic");
@@ -622,8 +670,8 @@ public class NorthboundIT {
         json = new JSONObject(jt);
         node2 = json.getJSONObject("node");
         // test that node was returned properly
-        Assert.assertTrue(node2.getInt("@id") == 0xCAFE);
-        Assert.assertEquals(node2.getString("@type"), "STUB");
+        Assert.assertTrue(node2.getInt("id") == 0xCAFE);
+        Assert.assertEquals(node2.getString("type"), "STUB");
 
         // test that port statistic results are correct
         portStat = json.getJSONObject("portStatistic");
@@ -665,10 +713,10 @@ public class NorthboundIT {
         if (act.getString("@type").equals("output")) {
             JSONObject port = act.getJSONObject("port");
             JSONObject port_node = port.getJSONObject("node");
-            Assert.assertTrue(port.getInt("@id") == 51966);
-            Assert.assertTrue(port.getString("@type").equals("STUB"));
-            Assert.assertTrue(port_node.getInt("@id") == 51966);
-            Assert.assertTrue(port_node.getString("@type").equals("STUB"));
+            Assert.assertTrue(port.getInt("id") == 51966);
+            Assert.assertTrue(port.getString("type").equals("STUB"));
+            Assert.assertTrue(port_node.getInt("id") == 51966);
+            Assert.assertTrue(port_node.getString("type").equals("STUB"));
         }
 
         if (act.getString("@type").equals("setDlSrc")) {
@@ -738,7 +786,7 @@ public class NorthboundIT {
         Assert.assertTrue(result.equals("404"));
 
         // test add flow1
-        String fc = "{\"dynamic\":\"false\", \"name\":\"test1\", \"node\":{\"@id\":\"51966\",\"@type\":\"STUB\"}, \"actions\":[\"DROP\"]}";
+        String fc = "{\"dynamic\":\"false\", \"name\":\"test1\", \"node\":{\"id\":\"51966\",\"type\":\"STUB\"}, \"actions\":[\"DROP\"]}";
         result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test1", "PUT", fc);
         Assert.assertTrue(httpResponseCode == 201);
 
@@ -752,20 +800,20 @@ public class NorthboundIT {
         Assert.assertEquals(json.getString("actions"), "DROP");
         Assert.assertEquals(json.getString("installInHw"), "true");
         JSONObject node = json.getJSONObject("node");
-        Assert.assertEquals(node.getString("@type"), "STUB");
-        Assert.assertEquals(node.getString("@id"), "51966");
+        Assert.assertEquals(node.getString("type"), "STUB");
+        Assert.assertEquals(node.getString("id"), "51966");
         // test adding same flow again fails due to repeat name..return 409
         // code
         result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test1", "PUT", fc);
         Assert.assertTrue(result.equals("409"));
 
-        fc = "{\"dynamic\":\"false\", \"name\":\"test2\", \"node\":{\"@id\":\"51966\",\"@type\":\"STUB\"}, \"actions\":[\"DROP\"]}";
+        fc = "{\"dynamic\":\"false\", \"name\":\"test2\", \"node\":{\"id\":\"51966\",\"type\":\"STUB\"}, \"actions\":[\"DROP\"]}";
         result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test2", "PUT", fc);
         // test should return 409 for error due to same flow being added.
         Assert.assertTrue(result.equals("409"));
 
         // add second flow that's different
-        fc = "{\"dynamic\":\"false\", \"name\":\"test2\", \"nwSrc\":\"1.1.1.1\", \"node\":{\"@id\":\"51966\",\"@type\":\"STUB\"}, \"actions\":[\"DROP\"]}";
+        fc = "{\"dynamic\":\"false\", \"name\":\"test2\", \"nwSrc\":\"1.1.1.1\", \"node\":{\"id\":\"51966\",\"type\":\"STUB\"}, \"actions\":[\"DROP\"]}";
         result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test2", "PUT", fc);
         Assert.assertTrue(httpResponseCode == 201);
 
@@ -806,13 +854,13 @@ public class NorthboundIT {
             JSONArray json_array = json.getJSONArray(array_name);
             for (int i = 0; i < json_array.length(); i++) {
                 result = json_array.getJSONObject(i);
-                Integer nid = result.getJSONObject("node").getInt("@id");
+                Integer nid = result.getJSONObject("node").getInt("id");
                 if (nid.equals(nodeId))
                     break;
             }
         } else {
             result = json.getJSONObject(array_name);
-            Integer nid = result.getJSONObject("node").getInt("@id");
+            Integer nid = result.getJSONObject("node").getInt("id");
             if (!nid.equals(nodeId))
                 result = null;
         }
@@ -868,21 +916,31 @@ public class NorthboundIT {
 
         String baseURL = "http://127.0.0.1:8080/controller/nb/v2/host/default";
 
-        // test POST method: addHost()
-        String queryParameter = new QueryParameter("dataLayerAddress", dataLayerAddress_1).add("nodeType", nodeType_1)
-                .add("nodeId", nodeId_1.toString()).add("nodeConnectorType", nodeConnectorType_1)
-                .add("nodeConnectorId", nodeConnectorId_1.toString()).add("vlan", vlan_1).getString();
-
-        String result = getJsonResult(baseURL + "/" + networkAddress_1 + queryParameter, "POST");
+        // test PUT method: addHost()
+        JSONObject fc_json = new JSONObject();
+        fc_json.put("dataLayerAddress", dataLayerAddress_1);
+        fc_json.put("nodeType", nodeType_1);
+        fc_json.put("nodeId", nodeId_1);
+        fc_json.put("nodeConnectorType", nodeType_1);
+        fc_json.put("nodeConnectorId", nodeConnectorId_1.toString());
+        fc_json.put("vlan", vlan_1);
+        fc_json.put("staticHost", "true");
+        fc_json.put("networkAddress", networkAddress_1);
+
+        String result = getJsonResult(baseURL + "/" + networkAddress_1, "PUT", fc_json.toString());
         Assert.assertTrue(httpResponseCode == 201);
 
-        // vlan is not passed through query parameter but should be
-        // defaulted to "0"
-        queryParameter = new QueryParameter("dataLayerAddress", dataLayerAddress_2).add("nodeType", nodeType_2)
-                .add("nodeId", nodeId_2.toString()).add("nodeConnectorType", nodeConnectorType_2)
-                .add("nodeConnectorId", nodeConnectorId_2.toString()).getString();
-
-        result = getJsonResult(baseURL + "/" + networkAddress_2 + queryParameter, "POST");
+        fc_json = new JSONObject();
+        fc_json.put("dataLayerAddress", dataLayerAddress_2);
+        fc_json.put("nodeType", nodeType_2);
+        fc_json.put("nodeId", nodeId_2);
+        fc_json.put("nodeConnectorType", nodeType_2);
+        fc_json.put("nodeConnectorId", nodeConnectorId_2.toString());
+        fc_json.put("vlan", vlan_2);
+        fc_json.put("staticHost", "true");
+        fc_json.put("networkAddress", networkAddress_2);
+
+        result = getJsonResult(baseURL + "/" + networkAddress_2 , "PUT", fc_json.toString());
         Assert.assertTrue(httpResponseCode == 201);
 
         // define variables for decoding returned strings
@@ -897,32 +955,30 @@ public class NorthboundIT {
         JSONTokener jt = new JSONTokener(result);
         JSONObject json = new JSONObject(jt);
         // there should be at least two hosts in the DB
-        Assert.assertTrue(json.get("host") instanceof JSONArray);
-        JSONArray ja = json.getJSONArray("host");
+        Assert.assertTrue(json.get("hostConfig") instanceof JSONArray);
+        JSONArray ja = json.getJSONArray("hostConfig");
         Integer count = ja.length();
         Assert.assertTrue(count == 2);
 
         for (int i = 0; i < count; i++) {
             host_jo = ja.getJSONObject(i);
-            dl_jo = host_jo.getJSONObject("dataLayerAddress");
-            nc_jo = host_jo.getJSONObject("nodeConnector");
-            node_jo = nc_jo.getJSONObject("node");
-
             networkAddress = host_jo.getString("networkAddress");
             if (networkAddress.equalsIgnoreCase(networkAddress_1)) {
-                Assert.assertTrue(dl_jo.getString("macAddress").equalsIgnoreCase(dataLayerAddress_1));
-                Assert.assertTrue(nc_jo.getString("@type").equalsIgnoreCase(nodeConnectorType_1));
-                Assert.assertTrue(nc_jo.getInt("@id") == nodeConnectorId_1);
-                Assert.assertTrue(node_jo.getString("@type").equalsIgnoreCase(nodeType_1));
-                Assert.assertTrue(node_jo.getInt("@id") == nodeId_1);
+                Assert.assertTrue(host_jo.getString("dataLayerAddress").equalsIgnoreCase(dataLayerAddress_1));
+                Assert.assertTrue(host_jo.getString("nodeConnectorType").equalsIgnoreCase(nodeConnectorType_1));
+                Assert.assertTrue(host_jo.getInt("nodeConnectorId") == nodeConnectorId_1);
+                Assert.assertTrue(host_jo.getString("nodeType").equalsIgnoreCase(nodeType_1));
+                Assert.assertTrue(host_jo.getInt("nodeId") == nodeId_1);
                 Assert.assertTrue(host_jo.getString("vlan").equalsIgnoreCase(vlan_1));
+                Assert.assertTrue(host_jo.getBoolean("staticHost"));
             } else if (networkAddress.equalsIgnoreCase(networkAddress_2)) {
-                Assert.assertTrue(dl_jo.getString("macAddress").equalsIgnoreCase(dataLayerAddress_2));
-                Assert.assertTrue(nc_jo.getString("@type").equalsIgnoreCase(nodeConnectorType_2));
-                Assert.assertTrue(nc_jo.getInt("@id") == nodeConnectorId_2);
-                Assert.assertTrue(node_jo.getString("@type").equalsIgnoreCase(nodeType_2));
-                Assert.assertTrue(node_jo.getInt("@id") == nodeId_2);
+                Assert.assertTrue(host_jo.getString("dataLayerAddress").equalsIgnoreCase(dataLayerAddress_2));
+                Assert.assertTrue(host_jo.getString("nodeConnectorType").equalsIgnoreCase(nodeConnectorType_2));
+                Assert.assertTrue(host_jo.getInt("nodeConnectorId") == nodeConnectorId_2);
+                Assert.assertTrue(host_jo.getString("nodeType").equalsIgnoreCase(nodeType_2));
+                Assert.assertTrue(host_jo.getInt("nodeId") == nodeId_2);
                 Assert.assertTrue(host_jo.getString("vlan").equalsIgnoreCase(vlan_2));
+                Assert.assertTrue(host_jo.getBoolean("staticHost"));
             } else {
                 Assert.assertTrue(false);
             }
@@ -969,17 +1025,13 @@ public class NorthboundIT {
 
         Assert.assertFalse(json.length() == 0);
 
-        dl_jo = json.getJSONObject("dataLayerAddress");
-        nc_jo = json.getJSONObject("nodeConnector");
-        node_jo = nc_jo.getJSONObject("node");
-
-        Assert.assertTrue(json.getString("networkAddress").equalsIgnoreCase(networkAddress_1));
-        Assert.assertTrue(dl_jo.getString("macAddress").equalsIgnoreCase(dataLayerAddress_1));
-        Assert.assertTrue(nc_jo.getString("@type").equalsIgnoreCase(nodeConnectorType_1));
-        Assert.assertTrue(Integer.parseInt(nc_jo.getString("@id")) == nodeConnectorId_1);
-        Assert.assertTrue(node_jo.getString("@type").equalsIgnoreCase(nodeType_1));
-        Assert.assertTrue(Integer.parseInt(node_jo.getString("@id")) == nodeId_1);
+        Assert.assertTrue(json.getString("dataLayerAddress").equalsIgnoreCase(dataLayerAddress_1));
+        Assert.assertTrue(json.getString("nodeConnectorType").equalsIgnoreCase(nodeConnectorType_1));
+        Assert.assertTrue(json.getInt("nodeConnectorId") == nodeConnectorId_1);
+        Assert.assertTrue(json.getString("nodeType").equalsIgnoreCase(nodeType_1));
+        Assert.assertTrue(json.getInt("nodeId") == nodeId_1);
         Assert.assertTrue(json.getString("vlan").equalsIgnoreCase(vlan_1));
+        Assert.assertTrue(json.getBoolean("staticHost"));
 
         // test DELETE method for deleteFlow()
 
@@ -1004,8 +1056,8 @@ public class NorthboundIT {
         if (json.length() == 0) {
             return false;
         }
-        if (json.get("host") instanceof JSONArray) {
-            JSONArray ja = json.getJSONArray("host");
+        if (json.get("hostConfig") instanceof JSONArray) {
+            JSONArray ja = json.getJSONArray("hostConfig");
             for (int i = 0; i < ja.length(); i++) {
                 String na = ja.getJSONObject(i).getString("networkAddress");
                 if (na.equalsIgnoreCase(hostIp))
@@ -1013,7 +1065,8 @@ public class NorthboundIT {
             }
             return false;
         } else {
-            String na = json.getJSONObject("host").getString("networkAddress");
+            JSONObject ja = json.getJSONObject("hostConfig");
+            String na = ja.getString("networkAddress");
             return (na.equalsIgnoreCase(hostIp)) ? true : false;
         }
     }
@@ -1084,24 +1137,24 @@ public class NorthboundIT {
             JSONObject stt = Props.getJSONObject("state");
             JSONObject ltc = Props.getJSONObject("latency");
 
-            if (headNC.getInt("@id") == headNC1_nodeConnId) {
-                Assert.assertEquals(headNode.getString("@type"), nodeType);
-                Assert.assertEquals(headNode.getLong("@id"), headNC1_nodeId);
-                Assert.assertEquals(headNC.getString("@type"), nodeConnType);
-                Assert.assertEquals(tailNode.getString("@type"),nodeType);
-                Assert.assertEquals(tailNode.getString("@type"), nodeConnType);
-                Assert.assertEquals(tailNC.getLong("@id"), tailNC1_nodeConnId);
+            if (headNC.getInt("id") == headNC1_nodeConnId) {
+                Assert.assertEquals(headNode.getString("type"), nodeType);
+                Assert.assertEquals(headNode.getLong("id"), headNC1_nodeId);
+                Assert.assertEquals(headNC.getString("type"), nodeConnType);
+                Assert.assertEquals(tailNode.getString("type"),nodeType);
+                Assert.assertEquals(tailNode.getString("type"), nodeConnType);
+                Assert.assertEquals(tailNC.getLong("id"), tailNC1_nodeConnId);
                 Assert.assertEquals(bandw.getLong("value"), bw_1);
                 Assert.assertTrue((short) stt.getInt("value") == state_1);
                 Assert.assertEquals(ltc.getLong("value"), lat_1);
-            } else if (headNC.getInt("@id") == headNC2_nodeConnId) {
-                Assert.assertEquals(headNode.getString("@type"),nodeType);
-                Assert.assertEquals(headNode.getLong("@id"), headNC2_nodeId);
-                Assert.assertEquals(headNC.getString("@type"), nodeConnType);
-                Assert.assertEquals(tailNode.getString("@type"), nodeType);
-                Assert.assertTrue(tailNode.getInt("@id") == tailNC2_nodeId);
-                Assert.assertEquals(tailNC.getString("@type"), nodeConnType);
-                Assert.assertEquals(tailNC.getLong("@id"), tailNC2_nodeConnId);
+            } else if (headNC.getInt("id") == headNC2_nodeConnId) {
+                Assert.assertEquals(headNode.getString("type"),nodeType);
+                Assert.assertEquals(headNode.getLong("id"), headNC2_nodeId);
+                Assert.assertEquals(headNC.getString("type"), nodeConnType);
+                Assert.assertEquals(tailNode.getString("type"), nodeType);
+                Assert.assertTrue(tailNode.getInt("id") == tailNC2_nodeId);
+                Assert.assertEquals(tailNC.getString("type"), nodeConnType);
+                Assert.assertEquals(tailNC.getLong("id"), tailNC2_nodeConnId);
                 Assert.assertEquals(bandw.getLong("value"), bw_2);
                 Assert.assertTrue((short) stt.getInt("value") == state_2);
                 Assert.assertEquals(ltc.getLong("value"), lat_2);
@@ -1127,7 +1180,7 @@ public class NorthboundIT {
                 .append("dstNodeConnector",
                         nodeConnectorType_2 + "|" + nodeConnectorId_2 + "@" + nodeType_2 + "|" + nodeId_2);
         // execute HTTP request and verify response code
-        result = getJsonResult(baseURL + "/user-link", "POST", jo.toString());
+        result = getJsonResult(baseURL + "/user-link", "PUT", jo.toString());
         Assert.assertTrue(httpResponseCode == 201);
 
         // === test GET method for getUserLinks()
@@ -1221,160 +1274,160 @@ public class NorthboundIT {
 
                 // Set the systemPackages (used by clustering)
                 systemPackages("sun.reflect", "sun.reflect.misc", "sun.misc"),
-                mavenBundle("javax.servlet", "servlet-api", "2.5"),
-
-                mavenBundle("org.slf4j", "jcl-over-slf4j", "1.7.2"),
-                mavenBundle("org.slf4j", "slf4j-api", "1.7.2"),
-                mavenBundle("org.slf4j", "log4j-over-slf4j", "1.7.2"),
-                mavenBundle("ch.qos.logback", "logback-core", "1.0.9"),
-                mavenBundle("ch.qos.logback", "logback-classic", "1.0.9"),
-                mavenBundle("org.apache.commons", "commons-lang3", "3.1"),
-                mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager", "3.1.0"),
+                mavenBundle("org.slf4j", "jcl-over-slf4j").versionAsInProject(),
+                mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(),
+                mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(),
+                mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(),
+                mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(),
+                mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(),
+                mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager").versionAsInProject(),
 
                 // the plugin stub to get data for the tests
-                mavenBundle("org.opendaylight.controller", "protocol_plugins.stub", "0.4.0-SNAPSHOT"),
+                mavenBundle("org.opendaylight.controller", "protocol_plugins.stub").versionAsInProject(),
 
                 // List all the opendaylight modules
-                mavenBundle("org.opendaylight.controller", "configuration", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "configuration.implementation", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "containermanager", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "containermanager.implementation", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "clustering.services", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "clustering.services-implementation", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "security", "0.4.0-SNAPSHOT").noStart(),
-                mavenBundle("org.opendaylight.controller", "sal", "0.5.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "sal.implementation", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "sal.connection", "0.1.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "sal.connection.implementation", "0.1.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "switchmanager", "0.5.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "connectionmanager", "0.1.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "connectionmanager.implementation", "0.1.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "switchmanager.implementation", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "forwardingrulesmanager", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "forwardingrulesmanager.implementation", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "statisticsmanager", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "statisticsmanager.implementation", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "arphandler", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "hosttracker", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "hosttracker.implementation", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "arphandler", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "routing.dijkstra_implementation", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "topologymanager", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "usermanager", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "usermanager.implementation", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "logging.bridge", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "clustering.test", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "forwarding.staticrouting", "0.4.0-SNAPSHOT"),
+                mavenBundle("org.opendaylight.controller", "configuration").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "configuration.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "containermanager").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "containermanager.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "clustering.services").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "clustering.services-implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "security").versionAsInProject().noStart(),
+                mavenBundle("org.opendaylight.controller", "sal").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "sal.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "sal.connection").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "sal.connection.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "switchmanager").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "connectionmanager").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "connectionmanager.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "switchmanager.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "forwardingrulesmanager").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller",
+                            "forwardingrulesmanager.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "statisticsmanager").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "statisticsmanager.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "arphandler").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "hosttracker").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "hosttracker.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "arphandler").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "routing.dijkstra_implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "topologymanager").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "usermanager").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "usermanager.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "logging.bridge").versionAsInProject(),
+//                mavenBundle("org.opendaylight.controller", "clustering.test").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "forwarding.staticrouting").versionAsInProject(),
 
                 // Northbound bundles
-                mavenBundle("org.opendaylight.controller", "commons.northbound", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "forwarding.staticrouting.northbound", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "statistics.northbound", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "topology.northbound", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "hosttracker.northbound", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "switchmanager.northbound", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "flowprogrammer.northbound", "0.4.0-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller", "subnets.northbound", "0.4.0-SNAPSHOT"),
-
-                mavenBundle("org.codehaus.jackson", "jackson-mapper-asl", "1.9.8"),
-                mavenBundle("org.codehaus.jackson", "jackson-core-asl", "1.9.8"),
-                mavenBundle("org.codehaus.jackson", "jackson-jaxrs", "1.9.8"),
-                mavenBundle("org.codehaus.jettison", "jettison", "1.3.3"),
-
-                mavenBundle("commons-io", "commons-io", "2.3"),
-
-                mavenBundle("commons-fileupload", "commons-fileupload", "1.2.2"),
-
-                mavenBundle("equinoxSDK381", "javax.servlet", "3.0.0.v201112011016"),
-                mavenBundle("equinoxSDK381", "javax.servlet.jsp", "2.2.0.v201112011158"),
-                mavenBundle("equinoxSDK381", "org.eclipse.equinox.ds", "1.4.0.v20120522-1841"),
-                mavenBundle("orbit", "javax.xml.rpc", "1.1.0.v201005080400"),
-                mavenBundle("equinoxSDK381", "org.eclipse.equinox.util", "1.0.400.v20120522-2049"),
-                mavenBundle("equinoxSDK381", "org.eclipse.osgi.services", "3.3.100.v20120522-1822"),
-                mavenBundle("equinoxSDK381", "org.apache.felix.gogo.command", "0.8.0.v201108120515"),
-                mavenBundle("equinoxSDK381", "org.apache.felix.gogo.runtime", "0.8.0.v201108120515"),
-                mavenBundle("equinoxSDK381", "org.apache.felix.gogo.shell", "0.8.0.v201110170705"),
-                mavenBundle("equinoxSDK381", "org.eclipse.equinox.cm", "1.0.400.v20120522-1841"),
-                mavenBundle("equinoxSDK381", "org.eclipse.equinox.console", "1.0.0.v20120522-1841"),
-                mavenBundle("equinoxSDK381", "org.eclipse.equinox.launcher", "1.3.0.v20120522-1813"),
-
-                mavenBundle("geminiweb", "org.eclipse.gemini.web.core", "2.2.0.RELEASE"),
-                mavenBundle("geminiweb", "org.eclipse.gemini.web.extender", "2.2.0.RELEASE"),
-                mavenBundle("geminiweb", "org.eclipse.gemini.web.tomcat", "2.2.0.RELEASE"),
-                mavenBundle("geminiweb", "org.eclipse.virgo.kernel.equinox.extensions", "3.6.0.RELEASE").noStart(),
-                mavenBundle("geminiweb", "org.eclipse.virgo.util.common", "3.6.0.RELEASE"),
-                mavenBundle("geminiweb", "org.eclipse.virgo.util.io", "3.6.0.RELEASE"),
-                mavenBundle("geminiweb", "org.eclipse.virgo.util.math", "3.6.0.RELEASE"),
-                mavenBundle("geminiweb", "org.eclipse.virgo.util.osgi", "3.6.0.RELEASE"),
-                mavenBundle("geminiweb", "org.eclipse.virgo.util.osgi.manifest", "3.6.0.RELEASE"),
-                mavenBundle("geminiweb", "org.eclipse.virgo.util.parser.manifest", "3.6.0.RELEASE"),
-
-                mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager", "3.1.0"),
-                mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager.shell", "3.0.1"),
-
-                mavenBundle("com.google.code.gson", "gson", "2.1"),
-                mavenBundle("org.jboss.spec.javax.transaction", "jboss-transaction-api_1.1_spec", "1.0.1.Final"),
-                mavenBundle("org.apache.felix", "org.apache.felix.fileinstall", "3.1.6"),
-                mavenBundle("org.apache.commons", "commons-lang3", "3.1"),
-                mavenBundle("commons-codec", "commons-codec"),
-                mavenBundle("virgomirror", "org.eclipse.jdt.core.compiler.batch", "3.8.0.I20120518-2145"),
-                mavenBundle("eclipselink", "javax.persistence", "2.0.4.v201112161009"),
-                mavenBundle("eclipselink", "javax.resource", "1.5.0.v200906010428"),
-
-                mavenBundle("orbit", "javax.activation", "1.1.0.v201211130549"),
-                mavenBundle("orbit", "javax.annotation", "1.1.0.v201209060031"),
-                mavenBundle("orbit", "javax.ejb", "3.1.1.v201204261316"),
-                mavenBundle("orbit", "javax.el", "2.2.0.v201108011116"),
-                mavenBundle("orbit", "javax.mail.glassfish", "1.4.1.v201108011116"),
-                mavenBundle("orbit", "javax.xml.rpc", "1.1.0.v201005080400"),
-                mavenBundle("orbit", "org.apache.catalina", "7.0.32.v201211201336"),
+                mavenBundle("org.opendaylight.controller", "commons.northbound").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "forwarding.staticrouting.northbound").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "statistics.northbound").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "topology.northbound").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "hosttracker.northbound").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "switchmanager.northbound").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "flowprogrammer.northbound").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "subnets.northbound").versionAsInProject(),
+
+                mavenBundle("org.codehaus.jackson", "jackson-mapper-asl").versionAsInProject(),
+                mavenBundle("org.codehaus.jackson", "jackson-core-asl").versionAsInProject(),
+                mavenBundle("org.codehaus.jackson", "jackson-jaxrs").versionAsInProject(),
+                mavenBundle("org.codehaus.jettison", "jettison").versionAsInProject(),
+
+                mavenBundle("commons-io", "commons-io").versionAsInProject(),
+
+                mavenBundle("commons-fileupload", "commons-fileupload").versionAsInProject(),
+
+                mavenBundle("equinoxSDK381", "javax.servlet").versionAsInProject(),
+                mavenBundle("equinoxSDK381", "javax.servlet.jsp").versionAsInProject(),
+                mavenBundle("equinoxSDK381", "org.eclipse.equinox.ds").versionAsInProject(),
+                mavenBundle("orbit", "javax.xml.rpc").versionAsInProject(),
+                mavenBundle("equinoxSDK381", "org.eclipse.equinox.util").versionAsInProject(),
+                mavenBundle("equinoxSDK381", "org.eclipse.osgi.services").versionAsInProject(),
+                mavenBundle("equinoxSDK381", "org.apache.felix.gogo.command").versionAsInProject(),
+                mavenBundle("equinoxSDK381", "org.apache.felix.gogo.runtime").versionAsInProject(),
+                mavenBundle("equinoxSDK381", "org.apache.felix.gogo.shell").versionAsInProject(),
+                mavenBundle("equinoxSDK381", "org.eclipse.equinox.cm").versionAsInProject(),
+                mavenBundle("equinoxSDK381", "org.eclipse.equinox.console").versionAsInProject(),
+                mavenBundle("equinoxSDK381", "org.eclipse.equinox.launcher").versionAsInProject(),
+
+                mavenBundle("geminiweb", "org.eclipse.gemini.web.core").versionAsInProject(),
+                mavenBundle("geminiweb", "org.eclipse.gemini.web.extender").versionAsInProject(),
+                mavenBundle("geminiweb", "org.eclipse.gemini.web.tomcat").versionAsInProject(),
+                mavenBundle("geminiweb", "org.eclipse.virgo.kernel.equinox.extensions").versionAsInProject().noStart(),
+                mavenBundle("geminiweb", "org.eclipse.virgo.util.common").versionAsInProject(),
+                mavenBundle("geminiweb", "org.eclipse.virgo.util.io").versionAsInProject(),
+                mavenBundle("geminiweb", "org.eclipse.virgo.util.math").versionAsInProject(),
+                mavenBundle("geminiweb", "org.eclipse.virgo.util.osgi").versionAsInProject(),
+                mavenBundle("geminiweb", "org.eclipse.virgo.util.osgi.manifest").versionAsInProject(),
+                mavenBundle("geminiweb", "org.eclipse.virgo.util.parser.manifest").versionAsInProject(),
+
+                mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager").versionAsInProject(),
+                mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager.shell").versionAsInProject(),
+
+                mavenBundle("com.google.code.gson", "gson").versionAsInProject(),
+                mavenBundle("org.jboss.spec.javax.transaction", "jboss-transaction-api_1.1_spec").versionAsInProject(),
+                mavenBundle("org.apache.felix", "org.apache.felix.fileinstall").versionAsInProject(),
+                mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(),
+                mavenBundle("commons-codec", "commons-codec").versionAsInProject(),
+                mavenBundle("virgomirror", "org.eclipse.jdt.core.compiler.batch").versionAsInProject(),
+                mavenBundle("eclipselink", "javax.persistence").versionAsInProject(),
+                mavenBundle("eclipselink", "javax.resource").versionAsInProject(),
+
+                mavenBundle("orbit", "javax.activation").versionAsInProject(),
+                mavenBundle("orbit", "javax.annotation").versionAsInProject(),
+                mavenBundle("orbit", "javax.ejb").versionAsInProject(),
+                mavenBundle("orbit", "javax.el").versionAsInProject(),
+                mavenBundle("orbit", "javax.mail.glassfish").versionAsInProject(),
+                mavenBundle("orbit", "javax.xml.rpc").versionAsInProject(),
+                mavenBundle("orbit", "org.apache.catalina").versionAsInProject(),
                 // these are bundle fragments that can't be started on its own
-                mavenBundle("orbit", "org.apache.catalina.ha", "7.0.32.v201211201952").noStart(),
-                mavenBundle("orbit", "org.apache.catalina.tribes", "7.0.32.v201211201952").noStart(),
-                mavenBundle("orbit", "org.apache.coyote", "7.0.32.v201211201952").noStart(),
-                mavenBundle("orbit", "org.apache.jasper", "7.0.32.v201211201952").noStart(),
-
-                mavenBundle("orbit", "org.apache.el", "7.0.32.v201211081135"),
-                mavenBundle("orbit", "org.apache.juli.extras", "7.0.32.v201211081135"),
-                mavenBundle("orbit", "org.apache.tomcat.api", "7.0.32.v201211081135"),
-                mavenBundle("orbit", "org.apache.tomcat.util", "7.0.32.v201211201952").noStart(),
-                mavenBundle("orbit", "javax.servlet.jsp.jstl", "1.2.0.v201105211821"),
-                mavenBundle("orbit", "javax.servlet.jsp.jstl.impl", "1.2.0.v201210211230"),
-
-                mavenBundle("org.ops4j.pax.exam", "pax-exam-container-native"),
-                mavenBundle("org.ops4j.pax.exam", "pax-exam-junit4"),
-                mavenBundle("org.ops4j.pax.exam", "pax-exam-link-mvn"),
-                mavenBundle("org.ops4j.pax.url", "pax-url-aether"),
-
-                mavenBundle("org.springframework", "org.springframework.asm", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework", "org.springframework.aop", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework", "org.springframework.context", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework", "org.springframework.context.support", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework", "org.springframework.core", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework", "org.springframework.beans", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework", "org.springframework.expression", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework", "org.springframework.web", "3.1.3.RELEASE"),
-
-                mavenBundle("org.aopalliance", "com.springsource.org.aopalliance", "1.0.0"),
-                mavenBundle("org.springframework", "org.springframework.web.servlet", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework.security", "spring-security-config", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework.security", "spring-security-core", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework.security", "spring-security-web", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework.security", "spring-security-taglibs", "3.1.3.RELEASE"),
-                mavenBundle("org.springframework", "org.springframework.transaction", "3.1.3.RELEASE"),
-
-                mavenBundle("org.ow2.chameleon.management", "chameleon-mbeans", "1.0.0"),
-                mavenBundle("org.opendaylight.controller.thirdparty", "net.sf.jung2", "2.0.1-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller.thirdparty", "com.sun.jersey.jersey-servlet", "1.17-SNAPSHOT"),
-                mavenBundle("org.opendaylight.controller.thirdparty", "org.apache.catalina.filters.CorsFilter",
-                            "7.0.42-SNAPSHOT").noStart(),
+                mavenBundle("orbit", "org.apache.catalina.ha").versionAsInProject().noStart(),
+                mavenBundle("orbit", "org.apache.catalina.tribes").versionAsInProject().noStart(),
+                mavenBundle("orbit", "org.apache.coyote").versionAsInProject().noStart(),
+                mavenBundle("orbit", "org.apache.jasper").versionAsInProject().noStart(),
+
+                mavenBundle("orbit", "org.apache.el").versionAsInProject(),
+                mavenBundle("orbit", "org.apache.juli.extras").versionAsInProject(),
+                mavenBundle("orbit", "org.apache.tomcat.api").versionAsInProject(),
+                mavenBundle("orbit", "org.apache.tomcat.util").versionAsInProject().noStart(),
+                mavenBundle("orbit", "javax.servlet.jsp.jstl").versionAsInProject(),
+                mavenBundle("orbit", "javax.servlet.jsp.jstl.impl").versionAsInProject(),
+
+                mavenBundle("org.ops4j.pax.exam", "pax-exam-container-native").versionAsInProject(),
+                mavenBundle("org.ops4j.pax.exam", "pax-exam-junit4").versionAsInProject(),
+                mavenBundle("org.ops4j.pax.exam", "pax-exam-link-mvn").versionAsInProject(),
+                mavenBundle("org.ops4j.pax.url", "pax-url-aether").versionAsInProject(),
+
+                mavenBundle("org.springframework", "org.springframework.asm").versionAsInProject(),
+                mavenBundle("org.springframework", "org.springframework.aop").versionAsInProject(),
+                mavenBundle("org.springframework", "org.springframework.context").versionAsInProject(),
+                mavenBundle("org.springframework", "org.springframework.context.support").versionAsInProject(),
+                mavenBundle("org.springframework", "org.springframework.core").versionAsInProject(),
+                mavenBundle("org.springframework", "org.springframework.beans").versionAsInProject(),
+                mavenBundle("org.springframework", "org.springframework.expression").versionAsInProject(),
+                mavenBundle("org.springframework", "org.springframework.web").versionAsInProject(),
+
+                mavenBundle("org.aopalliance", "com.springsource.org.aopalliance").versionAsInProject(),
+                mavenBundle("org.springframework", "org.springframework.web.servlet").versionAsInProject(),
+                mavenBundle("org.springframework.security", "spring-security-config").versionAsInProject(),
+                mavenBundle("org.springframework.security", "spring-security-core").versionAsInProject(),
+                mavenBundle("org.springframework.security", "spring-security-web").versionAsInProject(),
+                mavenBundle("org.springframework.security", "spring-security-taglibs").versionAsInProject(),
+                mavenBundle("org.springframework", "org.springframework.transaction").versionAsInProject(),
+
+                mavenBundle("org.ow2.chameleon.management", "chameleon-mbeans").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.thirdparty", "net.sf.jung2").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.thirdparty", "com.sun.jersey.jersey-servlet")
+                .versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.thirdparty", "org.apache.catalina.filters.CorsFilter")
+                .versionAsInProject().noStart(),
 
                 // Jersey needs to be started before the northbound application
                 // bundles, using a lower start level
-                mavenBundle("com.sun.jersey", "jersey-client", "1.17"),
-                mavenBundle("com.sun.jersey", "jersey-server", "1.17").startLevel(2),
-                mavenBundle("com.sun.jersey", "jersey-core", "1.17").startLevel(2),
-                mavenBundle("com.sun.jersey", "jersey-json", "1.17").startLevel(2), junitBundles());
+                mavenBundle("com.sun.jersey", "jersey-client").versionAsInProject(),
+                mavenBundle("com.sun.jersey", "jersey-server").versionAsInProject().startLevel(2),
+                mavenBundle("com.sun.jersey", "jersey-core").versionAsInProject().startLevel(2),
+                mavenBundle("com.sun.jersey", "jersey-json").versionAsInProject().startLevel(2), junitBundles());
     }
 
 }