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.