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; + } + +}
