You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/08/20 11:36:08 UTC
[22/51] [abbrv] [partial] stratos git commit: Revert "Upgrading to
jclouds 1.9.1"
http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java
new file mode 100644
index 0000000..b9615d6
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.features;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Set;
+
+import org.jclouds.openstack.neutron.v2.NeutronApi;
+import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiMockTest;
+import org.jclouds.openstack.v2_0.domain.Extension;
+import org.jclouds.openstack.v2_0.features.ExtensionApi;
+import org.testng.annotations.Test;
+
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+
+/**
+ * Tests annotation parsing of {@code ExtensionApi}
+ */
+@Test(groups = "unit", testName = "ExtensionApiMockTest")
+public class ExtensionApiMockTest extends BaseNeutronApiMockTest {
+
+ public void testListExtensions() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse()
+ .setResponseCode(200).setBody(stringFromResource("/extension_list.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ ExtensionApi api = neutronApi.getExtensionApi("RegionOne");
+
+ Set<Extension> extensions = api.list();
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertExtensions(server, "/v2.0");
+
+ /*
+ * Check response
+ */
+ assertNotNull(extensions);
+ assertEquals(extensions.size(), 17);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListExtensionsIsEmpty() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ ExtensionApi api = neutronApi.getExtensionApi("RegionOne");
+
+ Set<Extension> extensions = api.list();
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/extensions");
+
+ /*
+ * Check response
+ */
+ assertTrue(extensions.isEmpty());
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testGetExtensionByAlias() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse()
+ .setResponseCode(200).setBody(stringFromResource("/extension_details.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+
+ Extension routerExtension = neutronApi.getExtensionApi("RegionOne").get("router");
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/extensions/router");
+
+ /*
+ * Check response
+ */
+ assertNotNull(routerExtension);
+ assertEquals(routerExtension.getName(), "Neutron L3 Router");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testGetExtensionByAliasFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+
+ Extension routerExtension = neutronApi.getExtensionApi("RegionOne").get("router");
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/extensions/router");
+
+ /*
+ * Check response
+ */
+ assertNull(routerExtension);
+ } finally {
+ server.shutdown();
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiLiveTest.java b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiLiveTest.java
new file mode 100644
index 0000000..1d4e3a0
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiLiveTest.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.features;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
+import org.jclouds.openstack.neutron.v2.domain.Network;
+import org.jclouds.openstack.neutron.v2.domain.NetworkType;
+import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiLiveTest;
+import org.jclouds.openstack.neutron.v2.util.PredicateUtil;
+import org.testng.annotations.Test;
+
+import java.util.Set;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+/**
+ * Tests parsing and Guice wiring of NetworkApi
+ */
+@Test(groups = "live", testName = "NetworkApiLiveTest")
+public class NetworkApiLiveTest extends BaseNeutronApiLiveTest {
+
+ public void testCreateUpdateAndDeleteNetwork() {
+ for (String region : api.getConfiguredRegions()) {
+ NetworkApi networkApi = api.getNetworkApi(region);
+ Network net = networkApi.create(Network.createBuilder("jclouds-test").networkType(NetworkType.LOCAL).build());
+ Network test = networkApi.create(Network.createBuilder("jclouds-test").build());
+ assertNotNull(net);
+
+ /* List and get tests */
+ Network networkList = api.getNetworkApi(region).list().concat().toSet().iterator().next();
+ assertNotNull(networkList);
+ Network networkGet = api.getNetworkApi(region).get(networkList.getId());
+ assertEquals(networkList, networkGet);
+ /****/
+
+ Network network = networkApi.get(net.getId());
+
+ assertEquals(network.getId(), net.getId());
+ assertEquals(network.getName(), "jclouds-test");
+ assertEquals(network.getNetworkType(), NetworkType.LOCAL);
+ assertTrue(network.getSubnets().isEmpty());
+ assertNotNull(networkApi.update(net.getId(), Network.updateBuilder().name("jclouds-live-test").build()));
+
+ network = networkApi.get(net.getId());
+
+ assertEquals(network.getId(), net.getId());
+ assertEquals(network.getName(), "jclouds-live-test");
+ assertTrue(network.getSubnets().isEmpty());
+
+ Network net2 = networkApi.create(Network.createBuilder("jclouds-test2").networkType(NetworkType.LOCAL).build());
+ assertNotNull(net2);
+
+ assertTrue(networkApi.delete(net.getId()));
+ assertTrue(networkApi.delete(net2.getId()));
+ assertTrue(networkApi.delete(test.getId()));
+ }
+ }
+
+ public void testBulkCreateNetwork() {
+ for (String region : api.getConfiguredRegions()) {
+ NetworkApi networkApi = api.getNetworkApi(region);
+ Set<Network> nets = networkApi.createBulk(
+ ImmutableList.of(
+ Network.createBuilder("jclouds-live-test-1").networkType(NetworkType.LOCAL).adminStateUp(true).build(),
+ Network.createBuilder("jclouds-live-test-2").networkType(NetworkType.LOCAL).adminStateUp(false).build(),
+ Network.createBuilder("jclouds-live-test-3").networkType(NetworkType.LOCAL).adminStateUp(false).build()
+ )
+ ).toSet();
+ Set<Network> existingNets = networkApi.list().concat().toSet();
+
+ assertNotNull(nets);
+ assertTrue(!nets.isEmpty());
+ assertEquals(nets.size(), 3);
+
+ for (Network net : nets) {
+ Predicate<Network> idEqualsPredicate = PredicateUtil.createIdEqualsPredicate(net.getId());
+ assertEquals(1, Sets.filter(existingNets, idEqualsPredicate).size());
+ assertTrue(networkApi.delete(net.getId()));
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiMockTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiMockTest.java b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiMockTest.java
new file mode 100644
index 0000000..641e276
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiMockTest.java
@@ -0,0 +1,464 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.features;
+
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableList;
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import org.jclouds.openstack.neutron.v2.NeutronApi;
+import org.jclouds.openstack.neutron.v2.domain.Network;
+import org.jclouds.openstack.neutron.v2.domain.NetworkStatus;
+import org.jclouds.openstack.neutron.v2.domain.NetworkType;
+import org.jclouds.openstack.neutron.v2.domain.Networks;
+import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiMockTest;
+import org.jclouds.openstack.v2_0.options.PaginationOptions;
+import org.jclouds.rest.ResourceNotFoundException;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.List;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+/**
+ * Tests NetworkApi Guice wiring and parsing
+ *
+ */
+@Test
+public class NetworkApiMockTest extends BaseNeutronApiMockTest {
+
+ public void testCreateNetwork() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201).setBody(stringFromResource("/network_create_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ Network.CreateNetwork createNetwork = Network.createBuilder("jclouds-wibble")
+ .networkType(NetworkType.LOCAL)
+ .build();
+
+ Network network = api.create(createNetwork);
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "POST", "/v2.0/networks", "/network_create_request.json");
+
+ /*
+ * Check response
+ */
+ assertNotNull(network);
+ assertEquals(network.getName(), "jclouds-wibble");
+ assertEquals(network.getNetworkType(), NetworkType.LOCAL);
+ assertEquals(network.getTenantId(), "1234567890");
+ assertEquals(network.getStatus(), NetworkStatus.ACTIVE);
+ assertEquals(network.getId(), "624312ff-d14b-4ba3-9834-1c78d23d574d");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ @Test(expectedExceptions = ResourceNotFoundException.class)
+ public void testCreateNetworkFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404).setBody(stringFromResource("/network_create_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ Network.CreateNetwork createNetwork = Network.createBuilder("jclouds-wibble")
+ .networkType(NetworkType.LOCAL)
+ .build();
+
+ Network network = api.create(createNetwork);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListSpecificPageNetwork() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/network_list_response_paged1.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ Networks networks = api.list(PaginationOptions.Builder.limit(2).marker("abcdefg"));
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/networks?limit=2&marker=abcdefg");
+
+ /*
+ * Check response
+ */
+ assertNotNull(networks);
+ assertEquals(networks.first().get().getId(), "396f12f8-521e-4b91-8e21-2e003500433a");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ // These fail tests uncover issues with the fallback annotations.
+ public void testListSpecificPageNetworkFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404).setBody(stringFromResource("/network_list_response_paged1.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ Networks networks = api.list(PaginationOptions.Builder.limit(2).marker("abcdefg"));
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/networks?limit=2&marker=abcdefg");
+
+ /*
+ * Check response
+ */
+ assertTrue(networks.isEmpty());
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListPagedNetwork() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/network_list_response_paged1.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/network_list_response_paged2.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ // Note: Lazy! Have to actually look at the collection.
+ List<Network> networks = api.list().concat().toList();
+ assertEquals(networks.size(), 4);
+ // look at last element
+ assertEquals(networks.get(3).getId(), "71c1e68c-171a-4aa2-aca5-50ea153a3718_2");
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/networks");
+ assertRequest(server.takeRequest(), "GET", "/v2.0/networks?marker=71c1e68c-171a-4aa2-aca5-50ea153a3718");
+
+ /*
+ * Check response
+ */
+ assertNotNull(networks);
+ assertEquals(networks.get(0).getId(), "396f12f8-521e-4b91-8e21-2e003500433a");
+ assertEquals(networks.get(3).getId(), "71c1e68c-171a-4aa2-aca5-50ea153a3718_2");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListPagedNetworkFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404).setBody(stringFromResource("/network_list_response_paged1.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ // Note: Lazy! Have to actually look at the collection.
+ List<Network> networks = api.list().concat().toList();
+
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/networks");
+
+ /*
+ * Check response
+ */
+ assertTrue(networks.isEmpty());
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testGetNetwork() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/network_get_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ Network network = api.get("12345");
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/networks/12345");
+
+ /*
+ * Check response
+ */
+ assertNotNull(network);
+ assertEquals(network.getName(), "jclouds-wibble");
+ assertEquals(network.getId(), "624312ff-d14b-4ba3-9834-1c78d23d574d");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testGetNetworkFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ Network network = api.get("12345");
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/networks/12345");
+
+ /*
+ * Check response
+ */
+ assertNull(network);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testCreateNetworkBulk() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201).setBody(stringFromResource("/network_bulk_create_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ Network.CreateNetwork createNetwork1 = Network.createBuilder("jclouds-wibble")
+ .networkType(NetworkType.LOCAL)
+ .build();
+
+ Network.CreateNetwork createNetwork2 = Network.createBuilder("jclouds-wibble2")
+ .networkType(NetworkType.LOCAL)
+ .build();
+
+ FluentIterable<Network> networks = api.createBulk(ImmutableList.of(createNetwork1, createNetwork2));
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "POST", "/v2.0/networks", "/network_bulk_create_request.json");
+
+ /*
+ * Check response
+ */
+ assertNotNull(networks);
+ assertEquals(networks.size(), 2);
+ assertEquals(networks.get(0).getName(), "jclouds-wibble");
+ assertEquals(networks.get(0).getNetworkType(), NetworkType.LOCAL);
+ assertEquals(networks.get(0).getTenantId(), "1234567890");
+ assertEquals(networks.get(0).getStatus(), NetworkStatus.ACTIVE);
+ assertEquals(networks.get(0).getId(), "624312ff-d14b-4ba3-9834-1c78d23d574d");
+
+ assertEquals(networks.get(1).getName(), "jclouds-wibble2");
+ assertEquals(networks.get(1).getNetworkType(), NetworkType.LOCAL);
+ assertEquals(networks.get(1).getTenantId(), "1234567890");
+ assertEquals(networks.get(1).getStatus(), NetworkStatus.ACTIVE);
+ assertEquals(networks.get(1).getId(), "624312ff-d14b-4ba3-9834-1c78d23d574e");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ @Test(expectedExceptions = ResourceNotFoundException.class)
+ public void testCreateNetworkBulkFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ Network.CreateNetwork createNetwork1 = Network.createBuilder("jclouds-wibble")
+ .networkType(NetworkType.LOCAL)
+ .build();
+
+ Network.CreateNetwork createNetwork2 = Network.createBuilder("jclouds-wibble2")
+ .networkType(NetworkType.LOCAL)
+ .build();
+
+ FluentIterable<Network> networks = api.createBulk(ImmutableList.of(createNetwork1, createNetwork2));
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testUpdateNetwork() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201).setBody(stringFromResource("/network_update_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ Network.UpdateNetwork updateNetwork = Network.updateBuilder()
+ .name("jclouds-wibble-updated")
+ .networkType(NetworkType.LOCAL)
+ .build();
+
+ Network network = api.update("123456", updateNetwork);
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "PUT", "/v2.0/networks/123456", "/network_update_request.json");
+
+ /*
+ * Check response
+ */
+ assertNotNull(network);
+ assertEquals(network.getName(), "updated_name");
+ assertEquals(network.getId(), "fc68ea2c-b60b-4b4f-bd82-94ec81110766");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testUpdateNetworkFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ Network.UpdateNetwork updateNetwork = Network.updateBuilder()
+ .name("jclouds-wibble-updated")
+ .networkType(NetworkType.LOCAL)
+ .build();
+
+ Network network = api.update("123456", updateNetwork);
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "PUT", "/v2.0/networks/123456");
+
+ /*
+ * Check response
+ */
+ assertNull(network);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testDeleteNetwork() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ boolean result = api.delete("123456");
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "DELETE", "/v2.0/networks/123456");
+
+ /*
+ * Check response
+ */
+ assertTrue(result);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testDeleteNetworkFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ NetworkApi api = neutronApi.getNetworkApi("RegionOne");
+
+ boolean result = api.delete("123456");
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "DELETE", "/v2.0/networks/123456");
+
+ /*
+ * Check response
+ */
+ assertFalse(result);
+ } finally {
+ server.shutdown();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiLiveTest.java b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiLiveTest.java
new file mode 100644
index 0000000..bcde014
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiLiveTest.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.features;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+import org.jclouds.openstack.neutron.v2.domain.IP;
+import org.jclouds.openstack.neutron.v2.domain.Network;
+import org.jclouds.openstack.neutron.v2.domain.NetworkType;
+import org.jclouds.openstack.neutron.v2.domain.Port;
+import org.jclouds.openstack.neutron.v2.domain.Subnet;
+import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiLiveTest;
+import org.jclouds.openstack.neutron.v2.util.PredicateUtil;
+import org.testng.annotations.Test;
+
+import java.util.Set;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+/**
+ * Tests PortApi in combination with the Network & SubnetApi
+ */
+@Test(groups = "live", testName = "PortApiLiveTest")
+public class PortApiLiveTest extends BaseNeutronApiLiveTest {
+
+ public void testCreateUpdateAndDeletePort() {
+ for (String region : api.getConfiguredRegions()) {
+ NetworkApi networkApi = api.getNetworkApi(region);
+ SubnetApi subnetApi = api.getSubnetApi(region);
+ PortApi portApi = api.getPortApi(region);
+ String networkId = networkApi.create(
+ Network.createBuilder("JClouds-Live-Network").networkType(NetworkType.LOCAL).build()).getId();
+ String ipv4SubnetId = subnetApi.create(Subnet.createBuilder(networkId, "198.51.100.0/24").ipVersion(4)
+ .name("JClouds-Live-IPv4-Subnet").build()).getId();
+ String ipv6SubnetId = subnetApi.create(Subnet.createBuilder(networkId, "a1ca:1e1:c:107d::/96").ipVersion(6)
+ .name("JClouds-Live-IPv6-Subnet").build()).getId();
+
+ assertNotNull(networkId);
+ assertNotNull(ipv4SubnetId);
+ assertNotNull(ipv6SubnetId);
+
+ String ipv4PortId = portApi.create(Port.createBuilder(networkId).name("JClouds-Live-IPv4-Port")
+ .fixedIps(ImmutableSet.copyOf(getFixedAddresses(ipv4SubnetId))).build()).getId();
+ String ipv6PortId = portApi.create(Port.createBuilder(networkId).name("JClouds-Live-IPv6-Port")
+ .fixedIps(ImmutableSet.copyOf(getFixedAddresses(ipv6SubnetId))).build()).getId();
+
+ /* List and get test */
+ Port portList = api.getPortApi(region).list().concat().toSet().iterator().next();
+ assertNotNull(portList);
+ Port portGet = api.getPortApi(region).get(portList.getId());
+ assertEquals(portList, portGet);
+ /****/
+
+ assertNotNull(ipv4PortId);
+ assertNotNull(ipv6PortId);
+
+ Port ipv4Port = portApi.get(ipv4PortId);
+ assertNotNull(ipv4Port);
+ assertEquals(ipv4Port.getId(), ipv4PortId);
+ assertEquals(ipv4Port.getName(), "JClouds-Live-IPv4-Port");
+
+ Port ipv6Port = portApi.get(ipv6PortId);
+ assertNotNull(ipv6Port);
+ assertEquals(ipv6Port.getId(), ipv6PortId);
+ assertEquals(ipv6Port.getName(), "JClouds-Live-IPv6-Port");
+
+ assertNotNull(portApi.update(ipv4PortId, Port.updateBuilder().name("Updated").build()));
+ Port updatedIpv4Port = portApi.get(ipv4PortId);
+ assertEquals(updatedIpv4Port.getName(), "Updated");
+
+ assertTrue(portApi.delete(ipv4PortId));
+ assertTrue(portApi.delete(ipv6PortId));
+ assertTrue(subnetApi.delete(ipv4SubnetId));
+ assertTrue(subnetApi.delete(ipv6SubnetId));
+ assertTrue(networkApi.delete(networkId));
+ }
+ }
+
+ public void testBulkCreatePort() {
+ for (String region : api.getConfiguredRegions()) {
+ NetworkApi networkApi = api.getNetworkApi(region);
+ SubnetApi subnetApi = api.getSubnetApi(region);
+ PortApi portApi = api.getPortApi(region);
+
+ String networkId = networkApi.create(
+ Network.createBuilder("JClouds-Live-Network").networkType(NetworkType.LOCAL).build()).getId();
+ String ipv4SubnetId = subnetApi.create(Subnet.createBuilder(networkId, "198.51.100.0/24").ipVersion(4)
+ .name("JClouds-Live-IPv4-Subnet").build()).getId();
+ String ipv6SubnetId = subnetApi.create(Subnet.createBuilder(networkId, "a1ca:1e1:c:107d::/96").ipVersion(6)
+ .name("JClouds-Live-IPv6-Subnet").build()).getId();
+
+ assertNotNull(networkId);
+ assertNotNull(ipv4SubnetId);
+ assertNotNull(ipv6SubnetId);
+
+ Set<? extends Port> ports = portApi.createBulk(
+ ImmutableList.of(
+ Port.createBuilder(networkId).name("JClouds-Live-IPv4-Subnet-1")
+ .fixedIps(ImmutableSet.copyOf(getFixedAddresses(ipv4SubnetId))).build(),
+ Port.createBuilder(networkId).name("JClouds-Live-IPv4-Subnet-2")
+ .fixedIps(ImmutableSet.copyOf(getFixedAddresses(ipv4SubnetId))).build(),
+ Port.createBuilder(networkId).name("JClouds-Live-IPv6-Subnet-1")
+ .fixedIps(ImmutableSet.copyOf(getFixedAddresses(ipv6SubnetId))).build(),
+ Port.createBuilder(networkId).name("JClouds-Live-IPv6-Subnet-2")
+ .fixedIps(ImmutableSet.copyOf(getFixedAddresses(ipv6SubnetId))).build()
+ )
+ ).toSet();
+ Set<? extends Port> existingPorts = portApi.list().concat().toSet();
+
+ assertNotNull(ports);
+ assertFalse(ports.isEmpty());
+ assertEquals(ports.size(), 4);
+
+ for (Port port : ports) {
+ Predicate<Port> idEqualsPredicate = PredicateUtil.createIdEqualsPredicate(port.getId());
+ assertEquals(1, Sets.filter(existingPorts, idEqualsPredicate).size());
+ assertTrue(portApi.delete(port.getId()));
+ }
+ assertTrue(subnetApi.delete(ipv4SubnetId));
+ assertTrue(subnetApi.delete(ipv6SubnetId));
+ assertTrue(networkApi.delete(networkId));
+ }
+ }
+
+ public Set<IP> getFixedAddresses(String subnetId) {
+ return ImmutableSet.of(
+ IP.builder().subnetId(subnetId).build()
+ );
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiMockTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiMockTest.java b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiMockTest.java
new file mode 100644
index 0000000..8f7ebc8
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiMockTest.java
@@ -0,0 +1,492 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.features;
+
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import org.jclouds.openstack.neutron.v2.NeutronApi;
+import org.jclouds.openstack.neutron.v2.domain.AddressPair;
+import org.jclouds.openstack.neutron.v2.domain.NetworkStatus;
+import org.jclouds.openstack.neutron.v2.domain.Port;
+import org.jclouds.openstack.neutron.v2.domain.Ports;
+import org.jclouds.openstack.neutron.v2.domain.VIFType;
+import org.jclouds.openstack.neutron.v2.domain.VNICType;
+import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiMockTest;
+import org.jclouds.openstack.v2_0.options.PaginationOptions;
+import org.jclouds.rest.ResourceNotFoundException;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.List;
+import java.util.Map;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+/**
+ * Tests NetworkApi Guice wiring and parsing
+ *
+ */
+@Test
+public class PortApiMockTest extends BaseNeutronApiMockTest {
+
+ public void testCreatePort() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(
+ new MockResponse().setResponseCode(201).setBody(stringFromResource("/port_create_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ Port.CreatePort createPort = Port.createBuilder("6aeaf34a-c482-4bd3-9dc3-7faf36412f12")
+ .name("port1")
+ .adminStateUp(Boolean.TRUE)
+ .deviceId("d6b4d3a5-c700-476f-b609-1493dd9dadc0")
+ .allowedAddressPairs(ImmutableSet.of(AddressPair.builder("12", "111.222.333.444").build()))
+ .build();
+
+ Port port = api.create(createPort);
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "POST", "/v2.0/ports", "/port_create_request.json");
+
+ /*
+ * Check response
+ */
+ assertNotNull(port);
+ assertEquals(port.getAllowedAddressPairs().iterator().next().getIpAddress(), "192.168.1.1");
+ assertEquals(port.getAllowedAddressPairs().iterator().next().getMacAddress(), "12:12");
+ assertEquals(port.getName(), "port1");
+ assertEquals(port.getStatus(), NetworkStatus.ACTIVE);
+ assertEquals(port.getId(), "ebe69f1e-bc26-4db5-bed0-c0afb4afe3db");
+ assertEquals(port.getDeviceId(), "d6b4d3a5-c700-476f-b609-1493dd9dadc0");
+ assertEquals(port.getDeviceOwner(), "");
+ assertEquals(port.getMacAddress(), "fa:16:3e:a6:50:c1");
+ assertEquals(port.getNetworkId(), "6aeaf34a-c482-4bd3-9dc3-7faf36412f12");
+ assertEquals(port.getFixedIps().iterator().next().getIpAddress(), "192.168.111.4");
+ assertEquals(port.getFixedIps().iterator().next().getSubnetId(), "22b44fc2-4ffb-4de4-b0f9-69d58b37ae27");
+ assertEquals(port.getTenantId(), "cf1a5775e766426cb1968766d0191908");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ @Test(expectedExceptions = ResourceNotFoundException.class)
+ public void testCreatePortFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(
+ new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ Port.CreatePort createPort = Port.createBuilder("6aeaf34a-c482-4bd3-9dc3-7faf36412f12")
+ .name("port1")
+ .adminStateUp(Boolean.TRUE)
+ .deviceId("d6b4d3a5-c700-476f-b609-1493dd9dadc0")
+ .allowedAddressPairs(ImmutableSet.of(AddressPair.builder("12", "111.222.333.444").build()))
+ .build();
+
+ Port port = api.create(createPort);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListSpecificPagePort() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/port_list_response_paged1.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ Ports ports = api.list(PaginationOptions.Builder.limit(2).marker("abcdefg"));
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/ports?limit=2&marker=abcdefg");
+
+ /*
+ * Check response
+ */
+ assertNotNull(ports);
+ assertEquals(ports.size(), 2);
+ assertEquals(ports.first().get().getId(), "24e6637e-c521-45fc-8b8b-d7331aa3c99f");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListSpecificPagePortFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ Ports ports = api.list(PaginationOptions.Builder.limit(2).marker("abcdefg"));
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/ports?limit=2&marker=abcdefg");
+
+ /*
+ * Check response
+ */
+ assertTrue(ports.isEmpty());
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListPagedPort() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/port_list_response_paged1.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/port_list_response_paged2.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ // Note: Lazy! Have to actually look at the collection.
+ List<Port> ports = api.list().concat().toList();
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/ports");
+ assertRequest(server.takeRequest(), "GET", "/v2.0/ports?marker=71c1e68c-171a-4aa2-aca5-50ea153a3718");
+
+ /*
+ * Check response
+ */
+ assertNotNull(ports);
+ assertEquals(ports.size(), 4);
+ assertEquals(ports.get(0).getId(), "24e6637e-c521-45fc-8b8b-d7331aa3c99f");
+ assertEquals(ports.get(3).getId(), "e54dfd9b-ce6e-47f7-af47-1609cfd1cdb0_4");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListPagedPortFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ // Note: Lazy! Have to actually look at the collection.
+ List<Port> ports = api.list().concat().toList();
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/ports");
+
+ /*
+ * Check response
+ */
+ assertTrue(ports.isEmpty());
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testCreateBulkPort() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(
+ new MockResponse().setResponseCode(201).setBody(stringFromResource("/port_create_bulk_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ Port.CreatePort createPort1 = Port.createBuilder("64239a54-dcc4-4b39-920b-b37c2144effa")
+ .name("port1")
+ .adminStateUp(Boolean.TRUE)
+ .deviceId("24df1d04-d5cb-41e1-8de5-61ed77c558df")
+ .securityGroups(ImmutableSet.of("dbc107f4-afcd-4d5a-9352-f68f82241d5b"))
+ .build();
+
+ Port.CreatePort createPort2 = Port.createBuilder("e6031bc2-901a-4c66-82da-f4c32ed89406")
+ .name("port2")
+ .adminStateUp(Boolean.FALSE)
+ .securityGroups(
+ ImmutableSet.of("8bf3f7cc-8471-40b1-815f-9da47e79775b", "dbc107f4-afcd-4d5a-9352-f68f82241d5b"))
+ .build();
+
+ FluentIterable<Port> ports = api.createBulk(ImmutableList.of(createPort1, createPort2));
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "POST", "/v2.0/ports", "/port_create_bulk_request.json");
+
+ /*
+ * Check response
+ */
+ assertNotNull(ports);
+ assertEquals(ports.size(), 2);
+ assertEquals(ports.get(0).getName(), "port1");
+ assertEquals(ports.get(1).getName(), "port2");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ @Test(expectedExceptions = ResourceNotFoundException.class)
+ public void testCreateBulkPortFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(
+ new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ Port.CreatePort createPort1 = Port.createBuilder("64239a54-dcc4-4b39-920b-b37c2144effa")
+ .name("port1")
+ .adminStateUp(Boolean.TRUE)
+ .deviceId("24df1d04-d5cb-41e1-8de5-61ed77c558df")
+ .securityGroups(ImmutableSet.of("dbc107f4-afcd-4d5a-9352-f68f82241d5b"))
+ .build();
+
+ Port.CreatePort createPort2 = Port.createBuilder("e6031bc2-901a-4c66-82da-f4c32ed89406")
+ .name("port2")
+ .adminStateUp(Boolean.FALSE)
+ .securityGroups(
+ ImmutableSet.of("8bf3f7cc-8471-40b1-815f-9da47e79775b", "dbc107f4-afcd-4d5a-9352-f68f82241d5b"))
+ .build();
+
+ FluentIterable<Port> ports = api.createBulk(ImmutableList.of(createPort1, createPort2));
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testGetPort() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(
+ new MockResponse().setResponseCode(201).setBody(stringFromResource("/port_get_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ Port port = api.get("12345");
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/ports/12345");
+
+ /*
+ * Check response
+ */
+ assertNotNull(port);
+ assertEquals(port.getName(), "jclouds-wibble");
+ assertEquals(port.getStatus(), NetworkStatus.ACTIVE);
+ assertEquals(port.getId(), "624312ff-d14b-4ba3-9834-1c78d23d574d");
+ assertEquals(port.getTenantId(), "1234567890");
+ assertEquals(port.getNetworkId(), "1234567890");
+ assertEquals(port.getVnicType(), VNICType.NORMAL);
+ assertEquals(port.getVifType(), VIFType.HYPERV);
+ assertEquals(port.getVifDetails().get("name1"), "value1");
+ assertEquals(((Map<String, Double>)port.getVifDetails().get("name2")).get("mapname2").intValue(), 3);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testGetPortFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(
+ new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ Port port = api.get("12345");
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/ports/12345");
+
+ /*
+ * Check response
+ */
+ assertNull(port);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testUpdatePort() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(
+ new MockResponse().setResponseCode(201).setBody(stringFromResource("/port_update_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ Port.UpdatePort updatePort = Port.updateBuilder()
+ .securityGroups(
+ ImmutableSet.of("85cc3048-abc3-43cc-89b3-377341426ac5", "c5ab5c29-2c99-44cb-a4b8-e70a88b77799"))
+ .build();
+
+ Port port = api.update("12345", updatePort);
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "PUT", "/v2.0/ports/12345", "/port_update_request.json");
+
+ /*
+ * Check response
+ */
+ assertNotNull(port);
+ assertEquals(port.getId(), "1d8591f4-7b62-428e-857d-e82a15e5a7f1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testUpdatePortFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(
+ new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ Port.UpdatePort updatePort = Port.updateBuilder()
+ .securityGroups(ImmutableSet.of("85cc3048-abc3-43cc-89b3-377341426ac5", "c5ab5c29-2c99-44cb-a4b8-e70a88b77799"))
+ .build();
+
+ Port port = api.update("12345", updatePort);
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "PUT", "/v2.0/ports/12345", "/port_update_request.json");
+
+ /*
+ * Check response
+ */
+ assertNull(port);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testDeletePort() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ boolean result = api.delete("12345");
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "DELETE", "/v2.0/ports/12345");
+
+ /*
+ * Check response
+ */
+ assertTrue(result);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testDeletePortFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ PortApi api = neutronApi.getPortApi("RegionOne");
+
+ boolean result = api.delete("12345");
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "DELETE", "/v2.0/ports/12345");
+
+ /*
+ * Check response
+ */
+ assertFalse(result);
+ } finally {
+ server.shutdown();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiLiveTest.java b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiLiveTest.java
new file mode 100644
index 0000000..3c5d7a8
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiLiveTest.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.features;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+import org.jclouds.openstack.neutron.v2.domain.AllocationPool;
+import org.jclouds.openstack.neutron.v2.domain.HostRoute;
+import org.jclouds.openstack.neutron.v2.domain.Network;
+import org.jclouds.openstack.neutron.v2.domain.NetworkType;
+import org.jclouds.openstack.neutron.v2.domain.Subnet;
+import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiLiveTest;
+import org.jclouds.openstack.neutron.v2.util.PredicateUtil;
+import org.testng.annotations.Test;
+
+import java.util.Set;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+/**
+ * Tests subnet api in combination with the network api
+ */
+@Test(groups = "live", testName = "SubnetApiLiveTest")
+public class SubnetApiLiveTest extends BaseNeutronApiLiveTest {
+
+ public void testCreateUpdateAndDeleteSubnet() {
+ for (String region : api.getConfiguredRegions()) {
+ NetworkApi networkApi = api.getNetworkApi(region);
+ String networkId = networkApi.create(Network.createBuilder("jclouds-live-test").networkType(NetworkType.LOCAL).build()).getId();
+
+ SubnetApi subnetApi = api.getSubnetApi(region);
+ ImmutableSet<AllocationPool> allocationPools = ImmutableSet.of(
+ AllocationPool.builder().start("a3:bc00::10").end("a3:bc00::20").build(),
+ AllocationPool.builder().start("a3:bc00::50").end("a3:bc00::90").build()
+ );
+ ImmutableSet<HostRoute> hostRoutes = ImmutableSet.of(
+ HostRoute.builder().destinationCidr("a3:bc00::/48").nextHop("a3:bc00::0004").build()
+ );
+ Subnet subnet = subnetApi.create(Subnet.createBuilder(networkId, "a3:bc00::/48").ipVersion(6).allocationPools(allocationPools).hostRoutes(hostRoutes).build());
+ assertNotNull(subnet);
+
+ /* Test list and get */
+ Subnet subnetList = api.getSubnetApi(region).list().concat().toSet().iterator().next();
+ assertNotNull(subnetList);
+ Subnet subnetGet = api.getSubnetApi(region).get(subnetList.getId());
+ assertEquals(subnetList, subnetGet);
+ /***/
+
+ Subnet retrievedSubnet = subnetApi.get(subnet.getId());
+
+ assertEquals(retrievedSubnet.getId(), subnet.getId());
+ assertEquals(retrievedSubnet.getCidr(), "a3:bc00::/48");
+ assertTrue(retrievedSubnet.getDnsNameservers().isEmpty());
+ assertEquals(retrievedSubnet.getAllocationPools().size(), 2);
+ assertEquals(retrievedSubnet.getHostRoutes().size(), 1);
+ assertNotNull(subnetApi.update(retrievedSubnet.getId(), Subnet.updateBuilder().name("jclouds-live-test-update").build()));
+
+ retrievedSubnet = subnetApi.get(retrievedSubnet.getId());
+
+ assertEquals(retrievedSubnet.getId(), subnet.getId());
+ assertEquals(retrievedSubnet.getName(), "jclouds-live-test-update");
+ assertTrue(retrievedSubnet.getDnsNameservers().isEmpty());
+
+ Subnet subnet2 = subnetApi.create(Subnet.createBuilder(networkId, "a3:bd01::/48").ipVersion(6).build());
+ assertNotNull(subnet2);
+
+ assertTrue(subnetApi.delete(subnet.getId()));
+ assertTrue(subnetApi.delete(subnet2.getId()));
+ assertTrue(networkApi.delete(networkId));
+ }
+ }
+
+ public void testBulkCreateSubnet() {
+ for (String region : api.getConfiguredRegions()) {
+ NetworkApi networkApi = api.getNetworkApi(region);
+ String networkId = networkApi.create(Network.createBuilder("jclouds-live-test").networkType(NetworkType.LOCAL).build()).getId();
+
+ SubnetApi subnetApi = api.getSubnetApi(region);
+ Set<? extends Subnet> subnets = subnetApi.createBulk(
+ ImmutableList.of(
+ Subnet.createBuilder("jclouds-live-test-1", "a3:bd01::/48").ipVersion(6).networkId(networkId).build(),
+ Subnet.createBuilder("jclouds-live-test-2", "a3:bd02::/48").ipVersion(6).networkId(networkId).build(),
+ Subnet.createBuilder("jclouds-live-test-3", "a3:bd03::/48").ipVersion(6).networkId(networkId).build()
+ )
+ ).toSet();
+ Set<Subnet> existingSubnets = subnetApi.list().concat().toSet();
+
+ assertNotNull(subnets);
+ assertTrue(!subnets.isEmpty());
+ assertEquals(subnets.size(), 3);
+
+ for (Subnet net : subnets) {
+ Predicate<Subnet> idEqualsPredicate = PredicateUtil.createIdEqualsPredicate(net.getId());
+ assertEquals(1, Sets.filter(existingSubnets, idEqualsPredicate).size());
+ assertTrue(subnetApi.delete(net.getId()));
+ }
+ assertTrue(networkApi.delete(networkId));
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiMockTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiMockTest.java b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiMockTest.java
new file mode 100644
index 0000000..3571b0c
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiMockTest.java
@@ -0,0 +1,472 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.features;
+
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableList;
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import org.jclouds.openstack.neutron.v2.NeutronApi;
+import org.jclouds.openstack.neutron.v2.domain.IPv6DHCPMode;
+import org.jclouds.openstack.neutron.v2.domain.Subnet;
+import org.jclouds.openstack.neutron.v2.domain.Subnets;
+import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiMockTest;
+import org.jclouds.openstack.v2_0.options.PaginationOptions;
+import org.jclouds.rest.ResourceNotFoundException;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.List;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+/**
+ * Tests NetworkApi Guice wiring and parsing
+ *
+ */
+@Test
+public class SubnetApiMockTest extends BaseNeutronApiMockTest {
+
+ public void testCreateSubnet() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201).setBody(stringFromResource("/subnet_create_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ Subnet.CreateSubnet createSubnet = Subnet.createBuilder("1234567890", "10.0.3.0/24")
+ .name("jclouds-wibble")
+ .ipVersion(4)
+ .build();
+
+ Subnet subnet = api.create(createSubnet);
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "POST", "/v2.0/subnets", "/subnet_create_request.json");
+
+ /*
+ * Check response
+ */
+ assertNotNull(subnet);
+ assertEquals(subnet.getName(), "jclouds-wibble");
+ assertEquals(subnet.getIpVersion().intValue(), 4);
+ assertEquals(subnet.getCidr(), "10.0.3.0/24");
+ assertEquals(subnet.getTenantId(), "1234567890");
+ assertEquals(subnet.getId(), "624312ff-d14b-4ba3-9834-1c78d23d574d");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ @Test(expectedExceptions = ResourceNotFoundException.class)
+ public void testCreateSubnetFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ Subnet.CreateSubnet createSubnet = Subnet.createBuilder("1234567890", "cidr")
+ .name("jclouds-wibble")
+ .ipVersion(4)
+ .build();
+
+ Subnet subnet = api.create(createSubnet);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListSpecificPageSubnet() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/subnet_list_response_pages1.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ Subnets subnets = api.list(PaginationOptions.Builder.limit(2).marker("abcdefg"));
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/subnets?limit=2&marker=abcdefg");
+
+ /*
+ * Check response
+ */
+ assertNotNull(subnets);
+ assertEquals(subnets.first().get().getId(), "16dba3bc-f3fa-4775-afdc-237e12c72f6a");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListSpecificPageSubnetFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ Subnets subnets = api.list(PaginationOptions.Builder.limit(2).marker("abcdefg"));
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/subnets?limit=2&marker=abcdefg");
+
+ /*
+ * Check response
+ */
+ assertTrue(subnets.isEmpty());
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListPagedSubnet() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/subnet_list_response_pages1.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/subnet_list_response_pages2.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ // Note: Lazy! Have to actually look at the collection.
+ List<Subnet> subnets = api.list().concat().toList();
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/subnets");
+ assertRequest(server.takeRequest(), "GET", "/v2.0/subnets?marker=71c1e68c-171a-4aa2-aca5-50ea153a3718");
+
+ /*
+ * Check response
+ */
+ assertNotNull(subnets);
+ assertEquals(subnets.size(), 4);
+ assertEquals(subnets.get(0).getId(), "16dba3bc-f3fa-4775-afdc-237e12c72f6a");
+ assertEquals(subnets.get(3).getId(), "6ba4c788-661f-49ab-9bf8-5f10cbbb2f57");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testListPagedSubnetFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ // Note: Lazy! Have to actually look at the collection.
+ List<Subnet> subnets = api.list().concat().toList();
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/subnets");
+
+ /*
+ * Check response
+ */
+ assertTrue(subnets.isEmpty());
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testGetSubnet() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/subnet_get_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ Subnet subnet = api.get("12345");
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/subnets/12345");
+
+ /*
+ * Check response
+ */
+ assertNotNull(subnet);
+ assertEquals(subnet.getName(), "jclouds-wibble");
+ assertEquals(subnet.getId(), "624312ff-d14b-4ba3-9834-1c78d23d574d");
+ assertEquals(subnet.getTenantId(), "1234567890");
+ assertEquals(subnet.getIPv6AddressMode(), IPv6DHCPMode.SLAAC);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testGetSubnetFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ Subnet subnet = api.get("12345");
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v2.0/subnets/12345");
+
+ /*
+ * Check response
+ */
+ assertNull(subnet);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testCreateBulkSubnet() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201).setBody(stringFromResource("/subnet_bulk_create_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ Subnet.CreateSubnet createSubnet1 = Subnet.createBuilder("e6031bc2-901a-4c66-82da-f4c32ed89406",
+ "192.168.199.0/24")
+ .ipVersion(4)
+ .build();
+
+ Subnet.CreateSubnet createSubnet2 = Subnet.createBuilder("64239a54-dcc4-4b39-920b-b37c2144effa",
+ "10.56.4.0/22")
+ .ipVersion(4)
+ .build();
+
+ FluentIterable<Subnet> subnets = api.createBulk(ImmutableList.of(createSubnet1, createSubnet2));
+
+ /*
+ * Check request
+ */
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "POST", "/v2.0/subnets", "/subnet_bulk_create_request.json");
+
+ /*
+ * Check response
+ */
+ assertNotNull(subnets);
+ assertEquals(subnets.size(), 2);
+ assertEquals(subnets.get(0).getName(), "");
+ assertEquals(subnets.get(0).getIpVersion().intValue(), 4);
+ assertEquals(subnets.get(0).getCidr(), "192.168.199.0/24");
+ assertTrue(subnets.get(0).getDnsNameservers().isEmpty());
+ assertTrue(subnets.get(0).getEnableDhcp());
+ assertTrue(subnets.get(0).getHostRoutes().isEmpty());
+ assertEquals(subnets.get(0).getTenantId(), "d19231fc08ec4bc4829b668040d34512");
+ assertEquals(subnets.get(0).getId(), "0468a7a7-290d-4127-aedd-6c9449775a24");
+ assertEquals(subnets.get(0).getNetworkId(), "e6031bc2-901a-4c66-82da-f4c32ed89406");
+ assertEquals(subnets.get(0).getAllocationPools().iterator().next().getStart(), "192.168.199.2");
+ assertEquals(subnets.get(0).getAllocationPools().iterator().next().getEnd(), "192.168.199.254");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ @Test(expectedExceptions = ResourceNotFoundException.class)
+ public void testCreateBulkSubnetFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ Subnet.CreateSubnet createSubnet1 = Subnet.createBuilder("e6031bc2-901a-4c66-82da-f4c32ed89406",
+ "192.168.199.0/24")
+ .ipVersion(4)
+ .build();
+
+ Subnet.CreateSubnet createSubnet2 = Subnet.createBuilder("64239a54-dcc4-4b39-920b-b37c2144effa",
+ "10.56.4.0/22")
+ .ipVersion(4)
+ .build();
+
+ FluentIterable<Subnet> subnets = api.createBulk(ImmutableList.of(createSubnet1, createSubnet2));
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testUpdateSubnet() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/subnet_update_response.json"))));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ Subnet.UpdateSubnet updateSubnet = Subnet.updateBuilder()
+ .name("new_name")
+ .gatewayIp("10.0.3.254")
+ .build();
+
+ Subnet subnet = api.update("12345", updateSubnet);
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "PUT", "/v2.0/subnets/12345", "/subnet_update_request.json");
+
+ /*
+ * Check response
+ */
+ assertNotNull(subnet);
+ assertEquals(subnet.getName(), "new_name");
+ assertEquals(subnet.getId(), "9436e561-47bf-436a-b1f1-fe23a926e031");
+ assertEquals(subnet.getTenantId(), "c1210485b2424d48804aad5d39c61b8f");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testUpdateSubnetFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ Subnet.UpdateSubnet updateSubnet = Subnet.updateBuilder()
+ .name("new_name")
+ .gatewayIp("10.0.3.254")
+ .build();
+
+ Subnet subnet = api.update("12345", updateSubnet);
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "PUT", "/v2.0/subnets/12345", "/subnet_update_request.json");
+
+ /*
+ * Check response
+ */
+ assertNull(subnet);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testDeleteSubnet() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ boolean result = api.delete("12345");
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "DELETE", "/v2.0/subnets/12345");
+
+ /*
+ * Check response
+ */
+ assertTrue(result);
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testDeleteSubnetFail() throws IOException, InterruptedException, URISyntaxException {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides);
+ SubnetApi api = neutronApi.getSubnetApi("RegionOne");
+
+ boolean result = api.delete("12345");
+
+ /*
+ * Check request
+ */
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "DELETE", "/v2.0/subnets/12345");
+
+ /*
+ * Check response
+ */
+ assertFalse(result);
+ } finally {
+ server.shutdown();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/internal/BaseNeutronApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/internal/BaseNeutronApiLiveTest.java b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/internal/BaseNeutronApiLiveTest.java
new file mode 100644
index 0000000..f220a92
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-neutron/1.8.1-stratos/src/test/java/org/jclouds/openstack/neutron/v2/internal/BaseNeutronApiLiveTest.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.internal;
+
+import org.jclouds.apis.BaseApiLiveTest;
+import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties;
+import org.jclouds.openstack.neutron.v2.NeutronApi;
+import org.testng.annotations.Test;
+
+import java.util.Properties;
+
+/**
+ * Tests behavior of {@code NeutronApi}
+ *
+ */
+@Test(groups = "live")
+public class BaseNeutronApiLiveTest extends BaseApiLiveTest<NeutronApi> {
+
+ public BaseNeutronApiLiveTest() {
+ provider = "openstack-neutron";
+ }
+
+ @Override
+ protected Properties setupProperties() {
+ Properties props = super.setupProperties();
+ setIfTestSystemPropertyPresent(props, KeystoneProperties.CREDENTIAL_TYPE);
+ return props;
+ }
+
+}