X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnorthbound%2Fintegrationtest%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnorthbound%2Fintegrationtest%2FNorthboundIT.java;h=602de9a1c6f28f8e195ed0aa00c78bd82f3da434;hp=ca6434af38acd0cfba7cf2bf0e4a5b038e8c9d19;hb=55c40fd972a68ae81a1c6b8a3e4977e2aa838464;hpb=e72236867ac8470265fa90c6096216b93c8a2df2 diff --git a/opendaylight/northbound/integrationtest/src/test/java/org/opendaylight/controller/northbound/integrationtest/NorthboundIT.java b/opendaylight/northbound/integrationtest/src/test/java/org/opendaylight/controller/northbound/integrationtest/NorthboundIT.java index ca6434af38..602de9a1c6 100644 --- a/opendaylight/northbound/integrationtest/src/test/java/org/opendaylight/controller/northbound/integrationtest/NorthboundIT.java +++ b/opendaylight/northbound/integrationtest/src/test/java/org/opendaylight/controller/northbound/integrationtest/NorthboundIT.java @@ -8,17 +8,12 @@ import static org.ops4j.pax.exam.CoreOptions.options; import static org.ops4j.pax.exam.CoreOptions.systemPackages; import static org.ops4j.pax.exam.CoreOptions.systemProperty; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import javax.inject.Inject; @@ -32,6 +27,9 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.opendaylight.controller.commons.httpclient.HTTPClient; +import org.opendaylight.controller.commons.httpclient.HTTPRequest; +import org.opendaylight.controller.commons.httpclient.HTTPResponse; import org.opendaylight.controller.hosttracker.IfIptoHost; import org.opendaylight.controller.sal.core.Bandwidth; import org.opendaylight.controller.sal.core.ConstructionException; @@ -47,7 +45,7 @@ import org.opendaylight.controller.sal.topology.TopoEdgeUpdate; import org.opendaylight.controller.switchmanager.IInventoryListener; import org.opendaylight.controller.usermanager.IUserManager; import org.ops4j.pax.exam.Option; -import org.ops4j.pax.exam.junit.Configuration; +import org.ops4j.pax.exam.Configuration; import org.ops4j.pax.exam.junit.PaxExam; import org.ops4j.pax.exam.util.PathUtils; import org.osgi.framework.Bundle; @@ -88,10 +86,10 @@ public class NorthboundIT { assertNotNull(bc); boolean debugit = false; Bundle b[] = bc.getBundles(); - for (int i = 0; i < b.length; i++) { - int state = b[i].getState(); + for (Bundle element : b) { + int state = element.getState(); if (state != Bundle.ACTIVE && state != Bundle.RESOLVED) { - log.debug("Bundle:" + b[i].getSymbolicName() + " state:" + stateToString(state)); + log.debug("Bundle:" + element.getSymbolicName() + " state:" + stateToString(state)); debugit = true; } } @@ -143,54 +141,58 @@ public class NorthboundIT { if (debugMsg) { System.out.println("HTTP method: " + method + " url: " + restUrl.toString()); - if (body != null) + if (body != null) { System.out.println("body: " + body); + } } try { - URL url = new URL(restUrl); this.userManager.getAuthorizationList(); this.userManager.authenticate("admin", "admin"); + HTTPRequest request = new HTTPRequest(); + + request.setUri(restUrl); + request.setMethod(method); + request.setTimeout(0); // HostTracker doesn't respond + // within default timeout during + // IT so setting an indefinite + // timeout till the issue is + // sorted out + + Map> headers = new HashMap>(); String authString = "admin:admin"; byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); String authStringEnc = new String(authEncBytes); - - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod(method); - connection.setRequestProperty("Authorization", "Basic " + authStringEnc); - connection.setRequestProperty("Content-Type", "application/json"); - connection.setRequestProperty("Accept", "application/json"); - + List header = new ArrayList(); + header.add("Basic "+authStringEnc); + headers.put("Authorization", header); + header = new ArrayList(); + header.add("application/json"); + headers.put("Accept", header); + request.setHeaders(headers); + request.setContentType("application/json"); if (body != null) { - connection.setDoOutput(true); - OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); - wr.write(body); - wr.flush(); + request.setEntity(body); } - connection.connect(); - connection.getContentType(); + + HTTPResponse response = HTTPClient.sendRequest(request); // Response code for success should be 2xx - httpResponseCode = connection.getResponseCode(); - if (httpResponseCode > 299) + httpResponseCode = response.getStatus(); + if (httpResponseCode > 299) { return httpResponseCode.toString(); + } if (debugMsg) { - System.out.println("HTTP response code: " + connection.getResponseCode()); - System.out.println("HTTP response message: " + connection.getResponseMessage()); + System.out.println("HTTP response code: " + response.getStatus()); + System.out.println("HTTP response message: " + response.getEntity()); } - InputStream is = connection.getInputStream(); - BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); - StringBuilder sb = new StringBuilder(); - int cp; - while ((cp = rd.read()) != -1) { - sb.append((char) cp); - } - is.close(); - connection.disconnect(); - return sb.toString(); + return response.getEntity(); } catch (Exception e) { + if (debugMsg) { + e.printStackTrace(); + } return null; } } @@ -200,8 +202,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 +244,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 { @@ -262,75 +264,150 @@ public class NorthboundIT { } else { Assert.assertEquals(bandwidth, (Integer) properties.getJSONObject("bandwidth").getInt("value")); } - } @Test - public void testSubnetsNorthbound() throws JSONException { + public void testSubnetsNorthbound() throws JSONException, ConstructionException { System.out.println("Starting Subnets JAXB client."); - String baseURL = "http://127.0.0.1:8080/controller/nb/v2/subnet/"; + String baseURL = "http://127.0.0.1:8080/controller/nb/v2/subnetservice/"; String name1 = "testSubnet1"; String subnet1 = "1.1.1.1/24"; + String name2 = "testSubnet2"; String subnet2 = "2.2.2.2/24"; + String name3 = "testSubnet3"; + String subnet3 = "3.3.3.3/24"; + + /* + * Create the node connector string list for the two subnets as: + * portList2 = {"OF|1@OF|00:00:00:00:00:00:00:02", "OF|2@OF|00:00:00:00:00:00:00:02", "OF|3@OF|00:00:00:00:00:00:00:02", "OF|4@OF|00:00:00:00:00:00:00:02"}; + * portList3 = {"OF|1@OF|00:00:00:00:00:00:00:03", "OF|2@OF|00:00:00:00:00:00:00:03", "OF|3@OF|00:00:00:00:00:00:00:03"}; + */ + Node node2 = new Node(Node.NodeIDType.OPENFLOW, 2L); + List portList2 = new ArrayList(); + NodeConnector nc21 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, (short)1, node2); + NodeConnector nc22 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, (short)2, node2); + NodeConnector nc23 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, (short)3, node2); + NodeConnector nc24 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, (short)3, node2); + portList2.add(nc21.toString()); + portList2.add(nc22.toString()); + portList2.add(nc23.toString()); + portList2.add(nc24.toString()); + + List portList3 = new ArrayList(); + Node node3 = new Node(Node.NodeIDType.OPENFLOW, 3L); + NodeConnector nc31 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, (short)1, node3); + NodeConnector nc32 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, (short)2, node3); + NodeConnector nc33 = new NodeConnector(NodeConnector.NodeConnectorIDType.OPENFLOW, (short)3, node3); + portList3.add(nc31.toString()); + portList3.add(nc32.toString()); + portList3.add(nc33.toString()); + // Test GET subnets in default container - String result = getJsonResult(baseURL + "default"); + String result = getJsonResult(baseURL + "default/subnets"); JSONTokener jt = new JSONTokener(result); JSONObject json = new JSONObject(jt); - Assert.assertEquals("{}", result); + JSONArray subnetConfigs = json.getJSONArray("subnetConfig"); + Assert.assertEquals(subnetConfigs.length(), 1); // should only get the default subnet // 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().put("name", name1).put("subnet", subnet1); + // execute HTTP request and verify response code + result = getJsonResult(baseURL + "default/subnet/" + name1, "PUT", 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"); + // Test PUT subnet2 + JSONObject jo2 = new JSONObject().put("name", name2).put("subnet", subnet2).put("nodeConnectors", portList2); + // execute HTTP request and verify response code + result = getJsonResult(baseURL + "default/subnet/" + name2, "PUT", jo2.toString()); + Assert.assertEquals(201, httpResponseCode.intValue()); + // Test PUT subnet3 + JSONObject jo3 = new JSONObject().put("name", name3).put("subnet", subnet3); + // execute HTTP request and verify response code + result = getJsonResult(baseURL + "default/subnet/" + name3, "PUT", jo3.toString()); Assert.assertEquals(201, httpResponseCode.intValue()); + // Test POST subnet3 (modify port list: add) + JSONObject jo3New = new JSONObject().put("name", name3).put("subnet", subnet3).put("nodeConnectors", portList3); + // execute HTTP request and verify response code + result = getJsonResult(baseURL + "default/subnet/" + name3, "POST", jo3New.toString()); + Assert.assertEquals(200, httpResponseCode.intValue()); // Test GET all subnets in default container - result = getJsonResult(baseURL + "default"); + result = getJsonResult(baseURL + "default/subnets"); 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")); + JSONArray portListGet = subnetConfig.getJSONArray("nodeConnectors"); + Assert.assertEquals(portList2.get(0), portListGet.get(0)); + Assert.assertEquals(portList2.get(1), portListGet.get(1)); + Assert.assertEquals(portList2.get(2), portListGet.get(2)); + Assert.assertEquals(portList2.get(3), portListGet.get(3)); + } else if (subnetConfig.getString("name").equals(name3)) { + Assert.assertEquals(subnet3, subnetConfig.getString("subnet")); + JSONArray portListGet = subnetConfig.getJSONArray("nodeConnectors"); + Assert.assertEquals(portList3.get(0), portListGet.get(0)); + Assert.assertEquals(portList3.get(1), portListGet.get(1)); + Assert.assertEquals(portList3.get(2), portListGet.get(2)); } else { // Unexpected config name Assert.assertTrue(false); } } - // Test DELETE subnet1 - result = getJsonResult(baseURL + "default/" + name1, "DELETE"); + // Test POST subnet2 (modify port list: remove one port only) + List newPortList2 = new ArrayList(portList2); + newPortList2.remove(3); + JSONObject jo2New = new JSONObject().put("name", name2).put("subnet", subnet2).put("nodeConnectors", newPortList2); + // execute HTTP request and verify response code + result = getJsonResult(baseURL + "default/subnet/" + name2, "POST", jo2New.toString()); Assert.assertEquals(200, httpResponseCode.intValue()); + // Test GET subnet2: verify contains only the first three ports + result = getJsonResult(baseURL + "default/subnet/" + name2); + jt = new JSONTokener(result); + subnetConfig = new JSONObject(jt); + Assert.assertEquals(200, httpResponseCode.intValue()); + JSONArray portListGet2 = subnetConfig.getJSONArray("nodeConnectors"); + Assert.assertEquals(portList2.get(0), portListGet2.get(0)); + Assert.assertEquals(portList2.get(1), portListGet2.get(1)); + Assert.assertEquals(portList2.get(2), portListGet2.get(2)); + Assert.assertTrue(portListGet2.length() == 3); + + // Test DELETE subnet1 + 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 PUT bad subnet, expect 400, validate JSON exception mapper + JSONObject joBad = new JSONObject().put("foo", "bar"); + result = getJsonResult(baseURL + "default/subnet/foo", "PUT", joBad.toString()); + Assert.assertEquals(400, httpResponseCode.intValue()); + } @Test public void testStaticRoutingNorthbound() throws JSONException { @@ -345,27 +422,28 @@ public class NorthboundIT { String nextHop2 = "1.1.1.1"; // Test GET static routes in default container, expecting no results - String result = getJsonResult(baseURL + "default"); + String result = getJsonResult(baseURL + "default/routes"); JSONTokener jt = new JSONTokener(result); JSONObject json = new JSONObject(jt); - Assert.assertEquals("{}", result); + JSONArray staticRoutes = json.getJSONArray("staticRoute"); + Assert.assertEquals(staticRoutes.length(), 0); // Test insert static route String requestBody = "{\"name\":\"" + name1 + "\", \"prefix\":\"" + prefix1 + "\", \"nextHop\":\"" + nextHop1 + "\"}"; - result = getJsonResult(baseURL + "default/" + name1, "POST", requestBody); + result = getJsonResult(baseURL + "default/route/" + name1, "PUT", requestBody); Assert.assertEquals(201, httpResponseCode.intValue()); requestBody = "{\"name\":\"" + name2 + "\", \"prefix\":\"" + prefix2 + "\", \"nextHop\":\"" + nextHop2 + "\"}"; - result = getJsonResult(baseURL + "default/" + name2, "POST", requestBody); + result = getJsonResult(baseURL + "default/route/" + name2, "PUT", requestBody); Assert.assertEquals(201, httpResponseCode.intValue()); // Test Get all static routes - result = getJsonResult(baseURL + "default"); + result = getJsonResult(baseURL + "default/routes"); jt = new JSONTokener(result); json = new JSONObject(jt); - JSONArray staticRoutes = json.getJSONArray("staticRoute"); - Assert.assertEquals(2, staticRoutes.length()); + JSONArray staticRouteArray = json.getJSONArray("staticRoute"); + Assert.assertEquals(2, staticRouteArray.length()); JSONObject route; for (int i = 0; i < staticRoutes.length(); i++) { route = staticRoutes.getJSONObject(i); @@ -382,7 +460,7 @@ public class NorthboundIT { } // Test get specific static route - result = getJsonResult(baseURL + "default/" + name1); + result = getJsonResult(baseURL + "default/route/" + name1); jt = new JSONTokener(result); json = new JSONObject(jt); @@ -390,7 +468,7 @@ public class NorthboundIT { Assert.assertEquals(prefix1, json.getString("prefix")); Assert.assertEquals(nextHop1, json.getString("nextHop")); - result = getJsonResult(baseURL + "default/" + name2); + result = getJsonResult(baseURL + "default/route/" + name2); jt = new JSONTokener(result); json = new JSONObject(jt); @@ -399,13 +477,15 @@ public class NorthboundIT { Assert.assertEquals(nextHop2, json.getString("nextHop")); // Test delete static route - result = getJsonResult(baseURL + "default/" + name1, "DELETE"); - Assert.assertEquals(200, httpResponseCode.intValue()); + result = getJsonResult(baseURL + "default/route/" + name1, "DELETE"); + Assert.assertEquals(204, httpResponseCode.intValue()); - result = getJsonResult(baseURL + "default"); + result = getJsonResult(baseURL + "default/routes"); jt = new JSONTokener(result); json = new JSONObject(jt); - JSONObject singleStaticRoute = json.getJSONObject("staticRoute"); + + staticRouteArray = json.getJSONArray("staticRoute"); + JSONObject singleStaticRoute = staticRouteArray.getJSONObject(0); Assert.assertEquals(name2, singleStaticRoute.getString("name")); } @@ -413,7 +493,7 @@ public class NorthboundIT { @Test public void testSwitchManager() throws JSONException { System.out.println("Starting SwitchManager JAXB client."); - String baseURL = "http://127.0.0.1:8080/controller/nb/v2/switch/default/"; + String baseURL = "http://127.0.0.1:8080/controller/nb/v2/switchmanager/default/"; // define Node/NodeConnector attributes for test int nodeId_1 = 51966; @@ -463,7 +543,8 @@ public class NorthboundIT { result = getJsonResult(baseURL + "node/STUB/" + nodeId_1); jt = new JSONTokener(result); json = new JSONObject(jt); - JSONObject nodeConnectorProperties = json.getJSONObject("nodeConnectorProperties"); + JSONArray nodeConnectorPropertiesArray = json.getJSONArray("nodeConnectorProperties"); + JSONObject nodeConnectorProperties = nodeConnectorPropertiesArray.getJSONObject(0); testNodeConnectorProperties(nodeConnectorProperties, nodeConnectorId_1, ncType, nodeId_1, nodeType, ncState, ncCapabilities, ncBandwidth); @@ -472,7 +553,10 @@ public class NorthboundIT { result = getJsonResult(baseURL + "node/STUB/" + nodeId_2); jt = new JSONTokener(result); json = new JSONObject(jt); - nodeConnectorProperties = json.getJSONObject("nodeConnectorProperties"); + + nodeConnectorPropertiesArray = json.getJSONArray("nodeConnectorProperties"); + nodeConnectorProperties = nodeConnectorPropertiesArray.getJSONObject(0); + testNodeConnectorProperties(nodeConnectorProperties, nodeConnectorId_2, ncType, nodeId_2, nodeType, ncState, ncCapabilities, ncBandwidth); @@ -482,7 +566,8 @@ public class NorthboundIT { jt = new JSONTokener(result); json = new JSONObject(jt); - nodeConnectorProperties = json.getJSONObject("nodeConnectorProperties"); + nodeConnectorPropertiesArray = json.getJSONArray("nodeConnectorProperties"); + nodeConnectorProperties = nodeConnectorPropertiesArray.getJSONObject(0); testNodeConnectorProperties(nodeConnectorProperties, nodeConnectorId_3, ncType, nodeId_3, nodeType, ncState, ncCapabilities, ncBandwidth); @@ -506,12 +591,13 @@ public class NorthboundIT { // Delete state property of nodeconnector1 result = getJsonResult(baseURL + "nodeconnector/STUB/" + nodeId_1 + "/STUB/" + nodeConnectorId_1 + "/property/state", "DELETE"); - Assert.assertEquals(200, httpResponseCode.intValue()); + Assert.assertEquals(204, httpResponseCode.intValue()); result = getJsonResult(baseURL + "node/STUB/" + nodeId_1); jt = new JSONTokener(result); json = new JSONObject(jt); - nodeConnectorProperties = json.getJSONObject("nodeConnectorProperties"); + nodeConnectorPropertiesArray = json.getJSONArray("nodeConnectorProperties"); + nodeConnectorProperties = nodeConnectorPropertiesArray.getJSONObject(0); testNodeConnectorProperties(nodeConnectorProperties, nodeConnectorId_1, ncType, nodeId_1, nodeType, null, ncCapabilities, ncBandwidth); @@ -519,12 +605,13 @@ public class NorthboundIT { // Delete capabilities property of nodeconnector2 result = getJsonResult(baseURL + "nodeconnector/STUB/" + nodeId_2 + "/STUB/" + nodeConnectorId_2 + "/property/capabilities", "DELETE"); - Assert.assertEquals(200, httpResponseCode.intValue()); + Assert.assertEquals(204, httpResponseCode.intValue()); result = getJsonResult(baseURL + "node/STUB/" + nodeId_2); jt = new JSONTokener(result); json = new JSONObject(jt); - nodeConnectorProperties = json.getJSONObject("nodeConnectorProperties"); + nodeConnectorPropertiesArray = json.getJSONArray("nodeConnectorProperties"); + nodeConnectorProperties = nodeConnectorPropertiesArray.getJSONObject(0); testNodeConnectorProperties(nodeConnectorProperties, nodeConnectorId_2, ncType, nodeId_2, nodeType, ncState, null, ncBandwidth); @@ -540,7 +627,8 @@ public class NorthboundIT { result = getJsonResult(baseURL + "node/STUB/" + nodeId_1); jt = new JSONTokener(result); json = new JSONObject(jt); - nodeConnectorProperties = json.getJSONObject("nodeConnectorProperties"); + nodeConnectorPropertiesArray = json.getJSONArray("nodeConnectorProperties"); + nodeConnectorProperties = nodeConnectorPropertiesArray.getJSONObject(0); // Check for new bandwidth value, state value removed from previous // test @@ -551,9 +639,9 @@ public class NorthboundIT { @Test public void testStatistics() throws JSONException { - final String actionTypes[] = { "drop", "loopback", "flood", "floodAll", "controller", "swPath", "hwPath", "output", - "setDlSrc", "setDlDst", "setDlType", "setVlanId", "setVlanPcp", "setVlanCfi", "popVlan", "pushVlan", - "setNwSrc", "setNwDst", "setNwTos", "setTpSrc", "setTpDst" }; + final String actionTypes[] = { "DROP", "LOOPBACK", "FLOOD", "FLOOD_ALL", "CONTROLLER", "SW_PATH", "HW_PATH", "OUTPUT", + "SET_DL_SRC", "SET_DL_DST", "SET_DL_TYPE", "SET_VLAN_ID", "SET_VLAN_PCP", "SET_VLAN_CFI", "POP_VLAN", "PUSH_VLAN", + "SET_NW_SRC", "SET_NW_DST", "SET_NW_TOS", "SET_TP_SRC", "SET_TP_DST" }; System.out.println("Starting Statistics JAXB client."); String baseURL = "http://127.0.0.1:8080/controller/nb/v2/statistics/default/"; @@ -564,8 +652,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,11 +671,12 @@ 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"); + JSONArray portStatArray = portStatistics.getJSONArray("portStatistic"); + JSONObject portStat = portStatArray.getJSONObject(0); Assert.assertTrue(portStat.getInt("receivePackets") == 250); Assert.assertTrue(portStat.getInt("transmitPackets") == 500); Assert.assertTrue(portStat.getInt("receiveBytes") == 1000); @@ -607,8 +696,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,11 +711,13 @@ 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"); + portStatArray = json.getJSONArray("portStatistic"); + portStat = portStatArray.getJSONObject(0); + Assert.assertTrue(portStat.getInt("receivePackets") == 250); Assert.assertTrue(portStat.getInt("transmitPackets") == 500); Assert.assertTrue(portStat.getInt("receiveBytes") == 1000); @@ -655,23 +746,27 @@ public class NorthboundIT { Assert.assertTrue(flow.getInt("hardTimeout") == 2000); Assert.assertTrue(flow.getInt("id") == 12345); - JSONObject match = (flow.getJSONObject("match").getJSONObject("matchField")); + JSONArray matches = (flow.getJSONObject("match").getJSONArray("matchField")); + Assert.assertEquals(matches.length(), 1); + JSONObject match = matches.getJSONObject(0); Assert.assertTrue(match.getString("type").equals("NW_DST")); Assert.assertTrue(match.getString("value").equals("1.1.1.1")); - JSONObject act = flow.getJSONObject("actions"); - Assert.assertTrue(act.getString("@type").equals(actionType)); + JSONArray actionsArray = flow.getJSONArray("actions"); + Assert.assertEquals(actionsArray.length(), 1); + JSONObject act = actionsArray.getJSONObject(0); + Assert.assertTrue(act.getString("type").equals(actionType)); - if (act.getString("@type").equals("output")) { + 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")) { + if (act.getString("type").equals("SET_DL_SRC")) { byte srcMatch[] = { (byte) 5, (byte) 4, (byte) 3, (byte) 2, (byte) 1 }; String src = act.getString("address"); byte srcBytes[] = new byte[5]; @@ -683,7 +778,7 @@ public class NorthboundIT { Assert.assertTrue(Arrays.equals(srcBytes, srcMatch)); } - if (act.getString("@type").equals("setDlDst")) { + if (act.getString("type").equals("SET_DL_DST")) { byte dstMatch[] = { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5 }; String dst = act.getString("address"); byte dstBytes[] = new byte[5]; @@ -694,21 +789,27 @@ public class NorthboundIT { dstBytes[4] = Byte.parseByte(dst.substring(8, 10)); Assert.assertTrue(Arrays.equals(dstBytes, dstMatch)); } - if (act.getString("@type").equals("setDlType")) + if (act.getString("type").equals("SET_DL_TYPE")) { Assert.assertTrue(act.getInt("dlType") == 10); - if (act.getString("@type").equals("setVlanId")) + } + if (act.getString("type").equals("SET_VLAN_ID")) { Assert.assertTrue(act.getInt("vlanId") == 2); - if (act.getString("@type").equals("setVlanPcp")) + } + if (act.getString("type").equals("SET_VLAN_PCP")) { Assert.assertTrue(act.getInt("pcp") == 3); - if (act.getString("@type").equals("setVlanCfi")) + } + if (act.getString("type").equals("SET_VLAN_CFI")) { Assert.assertTrue(act.getInt("cfi") == 1); + } - if (act.getString("@type").equals("setNwSrc")) + if (act.getString("type").equals("SET_NW_SRC")) { Assert.assertTrue(act.getString("address").equals("2.2.2.2")); - if (act.getString("@type").equals("setNwDst")) + } + if (act.getString("type").equals("SET_NW_DST")) { Assert.assertTrue(act.getString("address").equals("1.1.1.1")); + } - if (act.getString("@type").equals("pushVlan")) { + if (act.getString("type").equals("PUSH_VLAN")) { int head = act.getInt("VlanHeader"); // parsing vlan header int id = head & 0xfff; @@ -720,53 +821,58 @@ public class NorthboundIT { Assert.assertTrue(pcp == 1); Assert.assertTrue(tag == 0x8100); } - if (act.getString("@type").equals("setNwTos")) + if (act.getString("type").equals("SET_NW_TOS")) { Assert.assertTrue(act.getInt("tos") == 16); - if (act.getString("@type").equals("setTpSrc")) + } + if (act.getString("type").equals("SET_TP_SRC")) { Assert.assertTrue(act.getInt("port") == 4201); - if (act.getString("@type").equals("setTpDst")) + } + if (act.getString("type").equals("SET_TP_DST")) { Assert.assertTrue(act.getInt("port") == 8080); + } } @Test public void testFlowProgrammer() throws JSONException { System.out.println("Starting FlowProgrammer JAXB client."); - String baseURL = "http://127.0.0.1:8080/controller/nb/v2/flow/default/"; + String baseURL = "http://127.0.0.1:8080/controller/nb/v2/flowprogrammer/default/"; // Attempt to get a flow that doesn't exit. Should return 404 // status. - String result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test1", "GET"); + String result = getJsonResult(baseURL + "node/STUB/51966/staticFlow/test1", "GET"); Assert.assertTrue(result.equals("404")); // test add flow1 - String fc = "{\"dynamic\":\"false\", \"name\":\"test1\", \"node\":{\"@id\":\"51966\",\"@type\":\"STUB\"}, \"actions\":[\"DROP\"]}"; - result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test1", "PUT", fc); + String fc = "{\"name\":\"test1\", \"node\":{\"id\":\"51966\",\"type\":\"STUB\"}, \"actions\":[\"DROP\"]}"; + result = getJsonResult(baseURL + "node/STUB/51966/staticFlow/test1", "PUT", fc); Assert.assertTrue(httpResponseCode == 201); // test get returns flow that was added. - result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test1", "GET"); + result = getJsonResult(baseURL + "node/STUB/51966/staticFlow/test1", "GET"); // check that result came out fine. Assert.assertTrue(httpResponseCode == 200); JSONTokener jt = new JSONTokener(result); JSONObject json = new JSONObject(jt); Assert.assertEquals(json.getString("name"), "test1"); - Assert.assertEquals(json.getString("actions"), "DROP"); + JSONArray actionsArray = json.getJSONArray("actions"); + Assert.assertEquals(actionsArray.getString(0), "DROP"); Assert.assertEquals(json.getString("installInHw"), "true"); JSONObject node = json.getJSONObject("node"); - Assert.assertEquals(node.getString("@type"), "STUB"); - Assert.assertEquals(node.getString("@id"), "51966"); - // test adding same flow again fails due to repeat name..return 409 + Assert.assertEquals(node.getString("type"), "STUB"); + Assert.assertEquals(node.getString("id"), "51966"); + // test adding same flow again succeeds with a change in any field ..return Success // code - result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test1", "PUT", fc); - Assert.assertTrue(result.equals("409")); + fc = "{\"name\":\"test1\", \"node\":{\"id\":\"51966\",\"type\":\"STUB\"}, \"actions\":[\"LOOPBACK\"]}"; + result = getJsonResult(baseURL + "node/STUB/51966/staticFlow/test1", "PUT", fc); + Assert.assertTrue(result.equals("Success")); - fc = "{\"dynamic\":\"false\", \"name\":\"test2\", \"node\":{\"@id\":\"51966\",\"@type\":\"STUB\"}, \"actions\":[\"DROP\"]}"; - result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test2", "PUT", fc); + fc = "{\"name\":\"test2\", \"node\":{\"id\":\"51966\",\"type\":\"STUB\"}, \"actions\":[\"DROP\"]}"; + result = getJsonResult(baseURL + "node/STUB/51966/staticFlow/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\"]}"; - result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test2", "PUT", fc); + fc = "{\"name\":\"test2\", \"nwSrc\":\"1.1.1.1\", \"node\":{\"id\":\"51966\",\"type\":\"STUB\"}, \"actions\":[\"DROP\"]}"; + result = getJsonResult(baseURL + "node/STUB/51966/staticFlow/test2", "PUT", fc); Assert.assertTrue(httpResponseCode == 201); // check that request returns both flows given node. @@ -788,10 +894,10 @@ public class NorthboundIT { Assert.assertTrue(count == 2); // delete a flow, check that it's no longer in list. - result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test2", "DELETE"); - Assert.assertTrue(httpResponseCode == 200); + result = getJsonResult(baseURL + "node/STUB/51966/staticFlow/test2", "DELETE"); + Assert.assertTrue(httpResponseCode == 204); - result = getJsonResult(baseURL + "node/STUB/51966/static-flow/test2", "GET"); + result = getJsonResult(baseURL + "node/STUB/51966/staticFlow/test2", "GET"); Assert.assertTrue(result.equals("404")); } @@ -806,15 +912,17 @@ 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"); - if (nid.equals(nodeId)) + 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"); - if (!nid.equals(nodeId)) + Integer nid = result.getJSONObject("node").getInt("id"); + if (!nid.equals(nodeId)) { result = null; + } } return result; } @@ -855,7 +963,7 @@ public class NorthboundIT { Integer nodeId_1 = 3366; String nodeConnectorType_1 = "STUB"; Integer nodeConnectorId_1 = 12; - String vlan_1 = "4"; + String vlan_1 = ""; // 2nd host String networkAddress_2 = "10.1.1.1"; @@ -864,72 +972,80 @@ public class NorthboundIT { Integer nodeId_2 = 4477; String nodeConnectorType_2 = "STUB"; Integer nodeConnectorId_2 = 34; - String vlan_2 = "0"; - - 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"); + String vlan_2 = "123"; + + String baseURL = "http://127.0.0.1:8080/controller/nb/v2/hosttracker/default"; + + // 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 + "/address/" + 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 + "/address/" + networkAddress_2 , "PUT", fc_json.toString()); Assert.assertTrue(httpResponseCode == 201); // define variables for decoding returned strings String networkAddress; - JSONObject host_jo, dl_jo, nc_jo, node_jo; + JSONObject host_jo; // the two hosts should be in inactive host DB // test GET method: getInactiveHosts() - result = getJsonResult(baseURL + "/inactive", "GET"); + result = getJsonResult(baseURL + "/hosts/inactive", "GET"); Assert.assertTrue(httpResponseCode == 200); 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("vlan").equalsIgnoreCase(vlan_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").equals("0")); + 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); } } // test GET method: getActiveHosts() - no host expected - result = getJsonResult(baseURL, "GET"); + result = getJsonResult(baseURL + "/hosts/active", "GET"); Assert.assertTrue(httpResponseCode == 200); jt = new JSONTokener(result); @@ -951,7 +1067,7 @@ public class NorthboundIT { // verify the host shows up in active host DB - result = getJsonResult(baseURL, "GET"); + result = getJsonResult(baseURL + "/hosts/active", "GET"); Assert.assertTrue(httpResponseCode == 200); jt = new JSONTokener(result); @@ -961,7 +1077,7 @@ public class NorthboundIT { // test GET method for getHostDetails() - result = getJsonResult(baseURL + "/" + networkAddress_1, "GET"); + result = getJsonResult(baseURL + "/address/" + networkAddress_1, "GET"); Assert.assertTrue(httpResponseCode == 200); jt = new JSONTokener(result); @@ -969,27 +1085,23 @@ 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("vlan").equalsIgnoreCase(vlan_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").equals("0")); + Assert.assertTrue(json.getBoolean("staticHost")); // test DELETE method for deleteFlow() - result = getJsonResult(baseURL + "/" + networkAddress_1, "DELETE"); - Assert.assertTrue(httpResponseCode == 200); + result = getJsonResult(baseURL + "/address/" + networkAddress_1, "DELETE"); + Assert.assertTrue(httpResponseCode == 204); // verify host_1 removed from active host DB // test GET method: getActiveHosts() - no host expected - result = getJsonResult(baseURL, "GET"); + result = getJsonResult(baseURL + "/hosts/active", "GET"); Assert.assertTrue(httpResponseCode == 200); jt = new JSONTokener(result); @@ -1004,16 +1116,18 @@ 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)) + if (na.equalsIgnoreCase(hostIp)) { return true; + } } 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 +1198,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); @@ -1114,24 +1228,23 @@ public class NorthboundIT { Integer nodeId_1 = 3366; String nodeConnectorType_1 = "STUB"; Integer nodeConnectorId_1 = 12; - String nodeType_2 = "STUB"; Integer nodeId_2 = 4477; String nodeConnectorType_2 = "STUB"; Integer nodeConnectorId_2 = 34; JSONObject jo = new JSONObject() - .append("name", "userLink_1") - .append("srcNodeConnector", + .put("name", "userLink_1") + .put("srcNodeConnector", nodeConnectorType_1 + "|" + nodeConnectorId_1 + "@" + nodeType_1 + "|" + nodeId_1) - .append("dstNodeConnector", + .put("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 + "/userLink/userLink_1", "PUT", jo.toString()); Assert.assertTrue(httpResponseCode == 201); // === test GET method for getUserLinks() - result = getJsonResult(baseURL + "/user-link", "GET"); + result = getJsonResult(baseURL + "/userLinks", "GET"); Assert.assertTrue(httpResponseCode == 200); if (debugMsg) { System.out.println("result:" + result); @@ -1149,8 +1262,9 @@ public class NorthboundIT { int i; for (i = 0; i < ja.length(); i++) { userlink = ja.getJSONObject(i); - if (userlink.getString("name").equalsIgnoreCase("userLink_1")) + if (userlink.getString("name").equalsIgnoreCase("userLink_1")) { break; + } } Assert.assertFalse(i == ja.length()); } else { @@ -1176,12 +1290,12 @@ public class NorthboundIT { // === test DELETE method for deleteUserLink() String userName = "userLink_1"; - result = getJsonResult(baseURL + "/user-link/" + userName, "DELETE"); - Assert.assertTrue(httpResponseCode == 200); + result = getJsonResult(baseURL + "/userLink/" + userName, "DELETE"); + Assert.assertTrue(httpResponseCode == 204); // execute another getUserLinks() request to verify that userLink_1 is // removed - result = getJsonResult(baseURL + "/user-link", "GET"); + result = getJsonResult(baseURL + "/userLinks", "GET"); Assert.assertTrue(httpResponseCode == 200); if (debugMsg) { System.out.println("result:" + result); @@ -1202,7 +1316,6 @@ public class NorthboundIT { } } } - // Configure the OSGi container @Configuration public Option[] config() { @@ -1221,158 +1334,166 @@ 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.it.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(), + mavenBundle("org.opendaylight.controller", "bundlescanner").versionAsInProject(), + mavenBundle("org.opendaylight.controller", "bundlescanner.implementation").versionAsInProject(), + mavenBundle("org.opendaylight.controller", "commons.httpclient").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.jackson", "jackson-xc").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("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.ow2.asm", "asm-all").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()); } }