Add unit tests for openstack management REST API

Change-Id: Ia3e997b28c2546d10cd70935497f2444180d2843
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
index 3af0eca..72f23574 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
@@ -34,7 +34,6 @@
 import org.onosproject.openstacknode.api.NodeState;
 import org.onosproject.openstacknode.api.OpenstackNode;
 import org.onosproject.openstacknode.api.OpenstackNodeAdminService;
-import org.onosproject.openstacknode.api.OpenstackNodeService;
 import org.onosproject.rest.AbstractWebResource;
 import org.openstack4j.api.OSClient;
 import org.openstack4j.model.network.NetFloatingIP;
@@ -84,8 +83,6 @@
             get(OpenstackNetworkAdminService.class);
     private final OpenstackRouterAdminService osRouterAdminService =
             get(OpenstackRouterAdminService.class);
-    private final OpenstackNodeService osNodeService =
-            get(OpenstackNodeService.class);
     private final OpenstackNodeAdminService osNodeAdminService =
             get(OpenstackNodeAdminService.class);
     private final FlowRuleService flowRuleService = get(FlowRuleService.class);
@@ -101,7 +98,7 @@
     @Path("sync/states")
     public Response syncStates() {
 
-        Optional<OpenstackNode> node = osNodeService.nodes(CONTROLLER).stream().findFirst();
+        Optional<OpenstackNode> node = osNodeAdminService.nodes(CONTROLLER).stream().findFirst();
         if (!node.isPresent()) {
             throw new ItemNotFoundException("Auth info is not found");
         }
@@ -296,7 +293,7 @@
     }
 
     private void syncRulesBase() {
-        osNodeService.completeNodes().forEach(osNode -> {
+        osNodeAdminService.completeNodes().forEach(osNode -> {
             OpenstackNode updated = osNode.updateState(NodeState.INIT);
             osNodeAdminService.updateNode(updated);
 
@@ -306,7 +303,7 @@
                 log.error("Exception caused during node synchronization...");
             }
 
-            if (osNodeService.node(osNode.hostname()).state() == NodeState.COMPLETE) {
+            if (osNodeAdminService.node(osNode.hostname()).state() == NodeState.COMPLETE) {
                 log.info("Finished sync rules for node {}", osNode.hostname());
             } else {
                 log.info("Failed to sync rules for node {}", osNode.hostname());
diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResourceTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResourceTest.java
new file mode 100644
index 0000000..2b1aa0f
--- /dev/null
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResourceTest.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.openstacknetworking.web;
+
+import com.google.common.collect.Sets;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.osgi.ServiceDirectory;
+import org.onlab.osgi.TestServiceDirectory;
+import org.onosproject.core.CoreService;
+import org.onosproject.net.flow.FlowRuleService;
+import org.onosproject.openstacknetworking.api.OpenstackNetworkAdminService;
+import org.onosproject.openstacknetworking.api.OpenstackRouterAdminService;
+import org.onosproject.openstacknetworking.api.OpenstackSecurityGroupAdminService;
+import org.onosproject.openstacknode.api.OpenstackNodeAdminService;
+import org.onosproject.rest.resources.ResourceTest;
+import org.openstack4j.model.network.NetFloatingIP;
+import org.openstack4j.openstack.networking.domain.NeutronFloatingIP;
+
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
+import java.util.Set;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Unit tests for openstack management web resource REST API.
+ */
+public class OpenstackManagementWebResourceTest extends ResourceTest {
+
+    final OpenstackRouterAdminService mockOpenstackRouterAdminService =
+            createMock(OpenstackRouterAdminService.class);
+    final OpenstackSecurityGroupAdminService mockOpenstackSecurityGroupAdminService =
+            createMock(OpenstackSecurityGroupAdminService.class);
+    final OpenstackNetworkAdminService mockOpenstackNetworkAdminService =
+            createMock(OpenstackNetworkAdminService.class);
+    final OpenstackNodeAdminService mockOpenstackNodeAdminService =
+            createMock(OpenstackNodeAdminService.class);
+    final CoreService mockCoreService = createMock(CoreService.class);
+    final FlowRuleService mockFlowRuleService = createMock(FlowRuleService.class);
+
+    private static final String PATH = "management";
+
+    /**
+     * Constructs an openstack management REST API test.
+     */
+    public OpenstackManagementWebResourceTest() {
+        super(ResourceConfig.forApplicationClass(OpenstackNetworkingWebApplication.class));
+    }
+
+    /**
+     * Sets up the global values for all tests.
+     */
+    @Before
+    public void setUpTest() {
+        ServiceDirectory testDirectory =
+                new TestServiceDirectory()
+                .add(OpenstackRouterAdminService.class, mockOpenstackRouterAdminService)
+                .add(OpenstackSecurityGroupAdminService.class, mockOpenstackSecurityGroupAdminService)
+                .add(OpenstackNetworkAdminService.class, mockOpenstackNetworkAdminService)
+                .add(OpenstackNodeAdminService.class, mockOpenstackNodeAdminService);
+        setServiceDirectory(testDirectory);
+    }
+
+    /**
+     * Tests the purge states method.
+     */
+    @Test
+    public void testPurgeStates() {
+        mockOpenstackRouterAdminService.clear();
+        replay(mockOpenstackRouterAdminService);
+
+        mockOpenstackNetworkAdminService.clear();
+        replay(mockOpenstackNetworkAdminService);
+
+        mockOpenstackSecurityGroupAdminService.clear();
+        replay(mockOpenstackSecurityGroupAdminService);
+
+        final WebTarget wt = target();
+
+        Response response = wt.path(PATH + "/purge/states")
+                                .request()
+                                .get();
+        final int status = response.getStatus();
+
+        assertThat(status, is(200));
+    }
+
+    /**
+     * Tests the get all floating IPs method.
+     */
+    @Test
+    public void testGetAllFloatingIps() {
+        final Set<NetFloatingIP> floatignIps = Sets.newConcurrentHashSet();
+        NetFloatingIP ip1 = NeutronFloatingIP.builder()
+                .portId("port-id-1")
+                .floatingNetworkId("network-id-1")
+                .build();
+        floatignIps.add(ip1);
+        expect(mockOpenstackRouterAdminService.floatingIps()).andReturn(floatignIps).anyTimes();
+        replay(mockOpenstackRouterAdminService);
+
+        final WebTarget wt = target();
+
+        Response response = wt.path(PATH + "/floatingips/all")
+                .request()
+                .get();
+        final int status = response.getStatus();
+
+        assertThat(status, is(200));
+    }
+
+    /**
+     * Tests the get mapped floating IPs method.
+     */
+    @Test
+    public void testGetMappedFloatingIps() {
+        final Set<NetFloatingIP> floatignIps = Sets.newConcurrentHashSet();
+        NetFloatingIP ip1 = NeutronFloatingIP.builder()
+                .portId("port-id-1")
+                .floatingNetworkId("network-id-1")
+                .build();
+        floatignIps.add(ip1);
+        expect(mockOpenstackRouterAdminService.floatingIps()).andReturn(floatignIps).anyTimes();
+        replay(mockOpenstackRouterAdminService);
+
+        final WebTarget wt = target();
+
+        Response response = wt.path(PATH + "/floatingips/mapped")
+                .request()
+                .get();
+        final int status = response.getStatus();
+
+        assertThat(status, is(200));
+    }
+}
diff --git a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeAdminService.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeAdminService.java
index b071705..0e784d0 100644
--- a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeAdminService.java
+++ b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeAdminService.java
@@ -18,7 +18,7 @@
 /**
  * Service for administering inventory of opestackNode.
  */
-public interface OpenstackNodeAdminService {
+public interface OpenstackNodeAdminService extends OpenstackNodeService {
 
     /**
      * Creates a new node.