ONOS-792 Unit tests for Topology REST GET APIs
Change-Id: I2e82b9b9b6133ba80aa8f02df582f867b924a641
diff --git a/web/api/src/main/java/org/onosproject/rest/TopologyWebResource.java b/web/api/src/main/java/org/onosproject/rest/TopologyWebResource.java
index c607d0a..92fc23b 100644
--- a/web/api/src/main/java/org/onosproject/rest/TopologyWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/TopologyWebResource.java
@@ -127,7 +127,7 @@
for (DeviceId deviceId : deviceIds) {
devicesNode.add(deviceId.toString());
}
- return ok(root).build();
+ return ok(root.toString()).build();
}
/**
@@ -150,7 +150,7 @@
Lists.newArrayList(get(TopologyService.class)
.getClusterLinks(topology, cluster));
- return ok(encodeArray(Link.class, "links", links)).build();
+ return ok(encodeArray(Link.class, "links", links).toString()).build();
}
/**
@@ -201,7 +201,11 @@
ConnectPoint connectPoint = new ConnectPoint(deviceId, portNumber);
boolean isBroadcast = get(TopologyService.class).isBroadcastPoint(topology, connectPoint);
- return ok(mapper().createObjectNode().put("broadcast", isBroadcast)).build();
+ return ok(mapper()
+ .createObjectNode()
+ .put("broadcast", isBroadcast)
+ .toString())
+ .build();
}
/**
@@ -224,7 +228,10 @@
ConnectPoint connectPoint = new ConnectPoint(deviceId, portNumber);
boolean isInfrastructure = get(TopologyService.class).isInfrastructure(topology, connectPoint);
- return ok(mapper().createObjectNode().put("infrastructure", isInfrastructure)).build();
+ return ok(mapper()
+ .createObjectNode()
+ .put("infrastructure", isInfrastructure).toString())
+ .build();
}
}
diff --git a/web/api/src/test/java/org/onosproject/rest/TopologyResourceTest.java b/web/api/src/test/java/org/onosproject/rest/TopologyResourceTest.java
new file mode 100644
index 0000000..7f3938c
--- /dev/null
+++ b/web/api/src/test/java/org/onosproject/rest/TopologyResourceTest.java
@@ -0,0 +1,314 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.rest;
+
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.osgi.ServiceDirectory;
+import org.onlab.osgi.TestServiceDirectory;
+import org.onlab.rest.BaseResource;
+import org.onosproject.codec.CodecService;
+import org.onosproject.codec.impl.CodecManager;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Link;
+import org.onosproject.net.Path;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.net.topology.ClusterId;
+import org.onosproject.net.topology.DefaultTopologyCluster;
+import org.onosproject.net.topology.DefaultTopologyVertex;
+import org.onosproject.net.topology.LinkWeight;
+import org.onosproject.net.topology.Topology;
+import org.onosproject.net.topology.TopologyCluster;
+import org.onosproject.net.topology.TopologyGraph;
+import org.onosproject.net.topology.TopologyListener;
+import org.onosproject.net.topology.TopologyService;
+
+import com.eclipsesource.json.JsonArray;
+import com.eclipsesource.json.JsonObject;
+import com.google.common.collect.ImmutableSet;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.test.framework.JerseyTest;
+
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.Assert.assertThat;
+import static org.onosproject.net.NetTestTools.did;
+import static org.onosproject.net.NetTestTools.link;
+
+/**
+ * Unit tests for Topology REST APIs.
+ */
+public class TopologyResourceTest extends JerseyTest {
+
+ private static class MockTopology implements Topology {
+ @Override
+ public long time() {
+ return 11111L;
+ }
+
+ @Override
+ public long computeCost() {
+ return 0;
+ }
+
+ @Override
+ public int clusterCount() {
+ return 2;
+ }
+
+ @Override
+ public int deviceCount() {
+ return 6;
+ }
+
+ @Override
+ public int linkCount() {
+ return 4;
+ }
+
+ @Override
+ public ProviderId providerId() {
+ return ProviderId.NONE;
+ }
+ }
+
+ private static class MockTopologyService implements TopologyService {
+ final DefaultTopologyVertex root = new DefaultTopologyVertex(did("rootnode"));
+ final Topology topology = new MockTopology();
+ final TopologyCluster cluster1 =
+ new DefaultTopologyCluster(ClusterId.clusterId(0),
+ 2, 1, root);
+ final TopologyCluster cluster2 =
+ new DefaultTopologyCluster(ClusterId.clusterId(1),
+ 4, 3, root);
+
+ @Override
+ public Topology currentTopology() {
+ return topology;
+ }
+
+ @Override
+ public boolean isLatest(Topology topology) {
+ return true;
+ }
+
+ @Override
+ public TopologyGraph getGraph(Topology topology) {
+ return null;
+ }
+
+ @Override
+ public Set<TopologyCluster> getClusters(Topology topology) {
+ return ImmutableSet.of(cluster1, cluster2);
+ }
+
+ @Override
+ public TopologyCluster getCluster(Topology topology, ClusterId clusterId) {
+ return cluster1;
+ }
+
+ @Override
+ public Set<DeviceId> getClusterDevices(Topology topology, TopologyCluster cluster) {
+ DeviceId device1 = did("dev1");
+ DeviceId device2 = did("dev2");
+
+ return ImmutableSet.of(device1, device2);
+ }
+
+ @Override
+ public Set<Link> getClusterLinks(Topology topology, TopologyCluster cluster) {
+ Link link1 = link("src1", 1, "dst1", 1);
+ Link link2 = link("src2", 1, "dst2", 1);
+ Link link3 = link("src3", 1, "dst3", 1);
+ return ImmutableSet.of(link1, link2, link3);
+ }
+
+ @Override
+ public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst) {
+ return null;
+ }
+
+ @Override
+ public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight) {
+ return null;
+ }
+
+ @Override
+ public boolean isInfrastructure(Topology topology, ConnectPoint connectPoint) {
+ return connectPoint.elementId().toString().equals("dev2");
+ }
+
+ @Override
+ public boolean isBroadcastPoint(Topology topology, ConnectPoint connectPoint) {
+ return connectPoint.elementId().toString().equals("dev1");
+ }
+
+ @Override
+ public void addListener(TopologyListener listener) {
+
+ }
+
+ @Override
+ public void removeListener(TopologyListener listener) {
+
+ }
+ }
+
+ public TopologyResourceTest() {
+ super("org.onosproject.rest");
+ }
+
+
+ /**
+ * Initializes the test harness.
+ */
+ @Before
+ public void setUp() {
+ TopologyService topologyService = new MockTopologyService();
+ CodecManager codecService = new CodecManager();
+ codecService.activate();
+
+ ServiceDirectory testDirectory =
+ new TestServiceDirectory()
+ .add(TopologyService.class, topologyService)
+ .add(CodecService.class, codecService);
+ BaseResource.setServiceDirectory(testDirectory);
+ }
+
+ /**
+ * Tests the topology overview.
+ */
+ @Test
+ public void getTopology() {
+ WebResource rs = resource();
+ String response = rs.path("topology").get(String.class);
+ JsonObject result = JsonObject.readFrom(response);
+ assertThat(result, notNullValue());
+
+ assertThat(result.names(), hasSize(4));
+
+ assertThat(result.get("time").asLong(), is(11111L));
+ assertThat(result.get("clusters").asLong(), is(2L));
+ assertThat(result.get("devices").asLong(), is(6L));
+ assertThat(result.get("links").asLong(), is(4L));
+ }
+
+ /**
+ * Tests the clusters overview.
+ */
+ @Test
+ public void getTopologyClusters() {
+ WebResource rs = resource();
+ String response = rs.path("topology/clusters").get(String.class);
+ JsonObject result = JsonObject.readFrom(response);
+ assertThat(result, notNullValue());
+
+ assertThat(result.names(), hasSize(1));
+ JsonArray clusters = result.get("clusters").asArray();
+ assertThat(clusters, notNullValue());
+ assertThat(clusters.size(), is(2));
+ }
+
+ /**
+ * Tests an individual cluster overview.
+ */
+ @Test
+ public void getCluster() {
+ WebResource rs = resource();
+ String response = rs.path("topology/clusters/0").get(String.class);
+ JsonObject result = JsonObject.readFrom(response);
+ assertThat(result, notNullValue());
+
+ assertThat(result.get("id").asLong(), is(0L));
+ assertThat(result.get("deviceCount").asLong(), is(2L));
+ assertThat(result.get("linkCount").asLong(), is(1L));
+ assertThat(result.get("root").asString(), containsString("rootnode"));
+
+ assertThat(result.names(), hasSize(4));
+ }
+
+ /**
+ * Tests an individual cluster's devices list.
+ */
+ @Test
+ public void getClusterDevices() {
+ WebResource rs = resource();
+ String response = rs.path("topology/clusters/0/devices").get(String.class);
+ JsonObject result = JsonObject.readFrom(response);
+ assertThat(result, notNullValue());
+
+ JsonArray devices = result.get("devices").asArray();
+ assertThat(devices.size(), is(2));
+
+ assertThat(devices.get(0).asString(), is("of:dev1"));
+ assertThat(devices.get(1).asString(), is("of:dev2"));
+ }
+
+ /**
+ * Tests an individual cluster's links list.
+ */
+ @Test
+ public void getClusterLinks() {
+ WebResource rs = resource();
+ String response = rs.path("topology/clusters/1/links").get(String.class);
+ JsonObject result = JsonObject.readFrom(response);
+ assertThat(result, notNullValue());
+
+ JsonArray links = result.get("links").asArray();
+ assertThat(links.size(), is(3));
+
+ JsonObject link0 = links.get(0).asObject();
+ JsonObject src0 = link0.get("src").asObject();
+ String device0 = src0.get("device").asString();
+ assertThat(device0, is("of:src1"));
+
+ JsonObject link2 = links.get(2).asObject();
+ JsonObject src2 = link2.get("src").asObject();
+ String device2 = src2.get("device").asString();
+ assertThat(device2, is("of:src3"));
+ }
+
+ /**
+ * Tests a broadcast query.
+ */
+ @Test
+ public void getBroadcast() {
+ WebResource rs = resource();
+ String response = rs.path("topology/broadcast/dev1:1").get(String.class);
+ JsonObject result = JsonObject.readFrom(response);
+ assertThat(result, notNullValue());
+
+ assertThat(result.get("broadcast").asBoolean(), is(true));
+ }
+
+ /**
+ * Tests an infrastructure query.
+ */
+ @Test
+ public void getInfrastructure() {
+ WebResource rs = resource();
+ String response = rs.path("topology/infrastructure/dev2:1").get(String.class);
+ JsonObject result = JsonObject.readFrom(response);
+ assertThat(result, notNullValue());
+
+ assertThat(result.get("infrastructure").asBoolean(), is(true));
+ }
+}