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