Topology REST API modifications and unit tests
- added a Serializer for Topology operations
- added a REST test harness class for Topology tests
- added REST API tests for topology get of all
topology, links, switches, and devices.
Change-Id: I13e3654aad7c0f5af41f07be66da82330933d3a3
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestTopology.java b/src/test/java/net/onrc/onos/api/rest/TestRestTopology.java
new file mode 100644
index 0000000..e87d232
--- /dev/null
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestTopology.java
@@ -0,0 +1,109 @@
+package net.onrc.onos.api.rest;
+
+import net.floodlightcontroller.core.module.FloodlightModuleContext;
+import net.floodlightcontroller.core.module.FloodlightModuleException;
+import net.onrc.onos.core.intent.runtime.IntentTestMocks;
+import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
+import net.onrc.onos.core.intent.runtime.web.IntentWebRoutable;
+import net.onrc.onos.core.topology.ITopologyService;
+import net.onrc.onos.core.topology.web.TopologyWebRoutable;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.restlet.resource.ClientResource;
+
+/**
+ * Test harness for Topology based REST API tests. This class maintains the
+ * web server and mocks required for testing topology APIs. REST API tests
+ * for topology should inherit from this class.
+ */
+public class TestRestTopology extends TestRest {
+
+ private IntentTestMocks mocks;
+
+ /**
+ * Fetch the Intent mocking object.
+ *
+ * @return intent mocking object
+ */
+ IntentTestMocks getMocks() {
+ return mocks;
+ }
+
+ /**
+ * Create the web server and mocks required for the topology tests.
+ */
+ @Override
+ public void setUp() {
+ mocks = new IntentTestMocks();
+ mocks.setUpIntentMocks();
+
+ addRestlet(new TopologyWebRoutable());
+ super.setUp();
+
+ final PathCalcRuntimeModule runtime = new PathCalcRuntimeModule();
+ final FloodlightModuleContext moduleContext = getMocks().getModuleContext();
+ try {
+ runtime.init(moduleContext);
+ } catch (FloodlightModuleException floodlightEx) {
+ throw new IllegalArgumentException(floodlightEx);
+ }
+ runtime.startUp(moduleContext);
+
+ getRestApiServer().addAttribute(ITopologyService.class.getCanonicalName(),
+ mocks.getTopologyService());
+ }
+
+ /**
+ * Remove anything that will interfere with the next test running correctly.
+ * Shuts down the test REST web server and removes the mocks.
+ */
+ @Override
+ public void tearDown() {
+ getMocks().tearDownIntentMocks();
+ super.tearDown();
+ }
+
+ /**
+ * Fetch the base URL for Topology REST APIs.
+ *
+ * @return base URL
+ */
+ String getBaseRestTopologyUrl() {
+ return getBaseRestUrl() + "/topology";
+ }
+
+ /**
+ * Get the JSON object representation for the top level object referred
+ * to by the given client.
+ *
+ * @param client the ClientResource that references the JSON object
+ * @return JSONObject that represents the object, null if it can't be
+ * fetched
+ */
+ JSONObject getJSONObject(final ClientResource client) {
+ try {
+ final String topologyJSONString = client.get(String.class);
+ return new JSONObject(topologyJSONString);
+ } catch (JSONException jsonException) {
+ return null;
+ }
+ }
+
+ /**
+ * Get the JSON array representation for the array referred to by
+ * the given client.
+ *
+ * @param client the ClientResource that references the JSON array
+ * @return JSONArray that represents the array, null if it can't be
+ * fetched.
+ */
+ JSONArray getJSONArray(final ClientResource client) {
+ try {
+ final String topologyJSONString = client.get(String.class);
+ return new JSONArray(topologyJSONString);
+ } catch (JSONException jsonException) {
+ return null;
+ }
+ }
+}