Added REST API to administratively remove hosts.
Change-Id: I8f2427f9365fefdc18771daf70b8f8abcad42b0b
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java
index 350fe79..7d5dfad 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java
@@ -28,6 +28,7 @@
import org.onosproject.net.HostLocation;
import org.onosproject.net.SparseAnnotations;
import org.onosproject.net.host.DefaultHostDescription;
+import org.onosproject.net.host.HostAdminService;
import org.onosproject.net.host.HostProvider;
import org.onosproject.net.host.HostProviderRegistry;
import org.onosproject.net.host.HostProviderService;
@@ -36,6 +37,7 @@
import org.onosproject.rest.AbstractWebResource;
import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@@ -161,6 +163,25 @@
}
/**
+ * Removes infrastructure device.
+ * Administratively deletes the specified device from the inventory of
+ * known devices.
+ *
+ * @param mac host MAC address
+ * @param vlan host VLAN identifier
+ * @return 204 OK
+ * @onos.rsModel Host
+ */
+ @DELETE
+ @Path("{mac}/{vlan}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response removeHost(@PathParam("mac") String mac,
+ @PathParam("vlan") String vlan) {
+ get(HostAdminService.class).removeHost(hostId(mac + "/" + vlan));
+ return Response.noContent().build();
+ }
+
+ /**
* Internal host provider that provides host events.
*/
private final class InternalHostProvider implements HostProvider {
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/HostResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/HostResourceTest.java
index 072ca33..4c0ea91 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/HostResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/HostResourceTest.java
@@ -38,6 +38,7 @@
import org.onosproject.net.Host;
import org.onosproject.net.HostId;
import org.onosproject.net.HostLocation;
+import org.onosproject.net.host.HostAdminService;
import org.onosproject.net.host.HostProviderRegistry;
import org.onosproject.net.host.HostProviderService;
import org.onosproject.net.host.HostService;
@@ -75,7 +76,7 @@
* A base class should/will be created to provide further assistance for testing.
*/
public class HostResourceTest extends ResourceTest {
- final HostService mockHostService = createMock(HostService.class);
+ final HostAdminService mockHostService = createMock(HostAdminService.class);
final HostProviderRegistry mockHostProviderRegistry = createMock(HostProviderRegistry.class);
final HostProviderService mockHostProviderService = createMock(HostProviderService.class);
final HashSet<Host> hosts = new HashSet<>();
@@ -93,6 +94,7 @@
ServiceDirectory testDirectory =
new TestServiceDirectory()
.add(HostService.class, mockHostService)
+ .add(HostAdminService.class, mockHostService)
.add(CodecService.class, codecService)
.add(HostProviderRegistry.class, mockHostProviderRegistry);
BaseResource.setServiceDirectory(testDirectory);
@@ -392,5 +394,22 @@
String location = response.getLocation().getPath();
assertThat(location, Matchers.startsWith("/hosts/11:22:33:44:55:66/None"));
}
+
+ /**
+ * Tests administrative removal of a host.
+ */
+ @Test
+ public void testDelete() {
+ HostId hostId = HostId.hostId("11:22:33:44:55:66/None");
+ mockHostService.removeHost(hostId);
+ expectLastCall();
+ replay(mockHostService);
+
+ WebTarget wt = target();
+ Response response = wt.path("hosts/11:22:33:44:55:66/None")
+ .request(MediaType.APPLICATION_JSON_TYPE)
+ .delete();
+ assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NO_CONTENT));
+ }
}
diff --git a/web/api/src/test/java/org/onosproject/rest/topo.json b/web/api/src/test/resources/org/onosproject/rest/resources/topo.json
similarity index 100%
rename from web/api/src/test/java/org/onosproject/rest/topo.json
rename to web/api/src/test/resources/org/onosproject/rest/resources/topo.json