http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiLiveTest.java deleted file mode 100644 index 5ca868b..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiLiveTest.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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.assertFalse; -import static org.testng.Assert.assertNotNull; - -import java.util.Set; - -import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiLiveTest; -import org.jclouds.openstack.v2_0.domain.Extension; -import org.jclouds.openstack.v2_0.features.ExtensionApi; -import org.testng.annotations.Test; - -/** - * Tests behavior of {@link ExtensionApi} - */ -@Test(groups = "live", testName = "ExtensionApiLiveTest") -public class ExtensionApiLiveTest extends BaseNeutronApiLiveTest { - - /** - * Tests the listing of Neutron Extensions. - * - * @throws Exception - */ - public void testListExtensions() throws Exception { - for (String regionId : api.getConfiguredRegions()) { - ExtensionApi extensionApi = api.getExtensionApi(regionId); - Set<Extension> response = extensionApi.list(); - assertNotNull(response); - assertFalse(response.isEmpty()); - - for (Extension extension : response) { - assertNotNull(extension.getId()); - assertNotNull(extension.getName()); - assertNotNull(extension.getDescription()); - assertNotNull(extension.getLinks()); - // Namespace and updated fields are nullable - } - } - } - - /** - * Tests retrieval of Neutron Extensions by their alias. - * - * @throws Exception - */ - public void testGetExtensionByAlias() throws Exception { - for (String regionId : api.getConfiguredRegions()) { - ExtensionApi extensionApi = api.getExtensionApi(regionId); - Set<Extension> response = extensionApi.list(); - assertNotNull(response); - - for (Extension extension : response) { - Extension details = extensionApi.get(extension.getId()); - assertNotNull(details); - assertEquals(details.getId(), extension.getId()); - assertEquals(details.getName(), extension.getName()); - assertEquals(details.getDescription(), extension.getDescription()); - assertEquals(details.getNamespace(), extension.getNamespace()); - assertEquals(details.getUpdated(), extension.getUpdated()); - assertEquals(details.getLinks(), extension.getLinks()); - } - } - } - -}
http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java deleted file mode 100644 index a929881..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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 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, uriApiVersion + ""); - - /* - * Check response - */ - assertNotNull(extensions); - assertEquals(extensions.size(), 15); - } 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", uriApiVersion + "/extensions/router"); - - /* - * Check response - */ - assertNotNull(routerExtension); - assertEquals(routerExtension.getName(), "Neutron L3 Router"); - } finally { - server.shutdown(); - } - } - -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiLiveTest.java deleted file mode 100644 index 1d4e3a0..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiLiveTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiMockTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiMockTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiMockTest.java deleted file mode 100644 index 95e3f4c..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/NetworkApiMockTest.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * 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.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.assertNotNull; -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", uriApiVersion + "/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(); - } - } - - 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", uriApiVersion + "/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", uriApiVersion + "/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", uriApiVersion + "/networks"); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/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 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", uriApiVersion + "/networks/12345"); - - /* - * Check response - */ - assertNotNull(network); - assertEquals(network.getName(), "jclouds-wibble"); - assertEquals(network.getId(), "624312ff-d14b-4ba3-9834-1c78d23d574d"); - } 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", uriApiVersion + "/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(); - } - } - - 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", uriApiVersion + "/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 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", uriApiVersion + "/networks/123456"); - - /* - * Check response - */ - assertTrue(result); - } finally { - server.shutdown(); - } - } - -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiLiveTest.java deleted file mode 100644 index bcde014..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiLiveTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * 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/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiMockTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiMockTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiMockTest.java deleted file mode 100644 index a8932c7..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/PortApiMockTest.java +++ /dev/null @@ -1,298 +0,0 @@ -/* - * 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.assertTrue; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.List; -import java.util.Map; - -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.testng.annotations.Test; - -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; - -/** - * 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", uriApiVersion + "/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(); - } - } - - 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", uriApiVersion + "/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 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", uriApiVersion + "/ports"); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/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 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", uriApiVersion + "/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(); - } - } - - 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", uriApiVersion + "/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 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", uriApiVersion + "/ports/12345", "/port_update_request.json"); - - /* - * Check response - */ - assertNotNull(port); - assertEquals(port.getId(), "1d8591f4-7b62-428e-857d-e82a15e5a7f1"); - } 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", uriApiVersion + "/ports/12345"); - - /* - * Check response - */ - assertTrue(result); - } finally { - server.shutdown(); - } - } - -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiLiveTest.java deleted file mode 100644 index 37ebe3d..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiLiveTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * 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 com.google.common.collect.Iterables.filter; -import static com.google.common.collect.Iterables.size; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertTrue; - -import org.jclouds.openstack.neutron.v2.domain.Rule; -import org.jclouds.openstack.neutron.v2.domain.RuleDirection; -import org.jclouds.openstack.neutron.v2.domain.RuleEthertype; -import org.jclouds.openstack.neutron.v2.domain.RuleProtocol; -import org.jclouds.openstack.neutron.v2.domain.SecurityGroup; -import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiLiveTest; -import org.testng.annotations.Test; - -import com.google.common.base.Predicate; - -/** - * Tests parsing and Guice wiring of RouterApi - */ -@Test(groups = "live", testName = "SecurityGroupApiLiveTest") -public class SecurityGroupApiLiveTest extends BaseNeutronApiLiveTest { - - /** - * Smoke test for the Security Group extension for Neutron - */ - public void testCreateUpdateAndDeleteSecurityGroup() { - for (String region : api.getConfiguredRegions()) { - SecurityGroupApi sgApi = null; - Rule rule = null; - SecurityGroup securityGroup = null; - - try { - sgApi = api.getSecurityGroupApi(region); - - securityGroup = sgApi.create( - SecurityGroup.createBuilder().name("jclouds-test").description("jclouds test security group") - .build()); - assertNotNull(securityGroup); - - rule = sgApi.create( - Rule.createBuilder(RuleDirection.INGRESS, securityGroup.getId()) - .ethertype(RuleEthertype.IPV6) - .portRangeMax(90) - .portRangeMin(80) - .protocol(RuleProtocol.TCP) - .build()); - - assertNotNull(rule); - - // Refresh - securityGroup = sgApi.getSecurityGroup(securityGroup.getId()); - - assertEquals(securityGroup.getName(), "jclouds-test"); - assertEquals(securityGroup.getDescription(), "jclouds test security group"); - assertEquals(size(filter(securityGroup.getRules(), new Predicate<Rule>() { - @Override - public boolean apply(Rule input) { - return RuleDirection.INGRESS.equals(input.getDirection()); - } - })), 1); - - Rule newSecGroupRule = null; - - for (Rule sgr : securityGroup.getRules()) { - if (sgr.getId().equals(rule.getId())) { - newSecGroupRule = sgr; - break; - } - } - assertNotNull(newSecGroupRule, "Did not find the new rule in the group."); - - assertEquals(rule, newSecGroupRule); - - assertEquals(rule.getEthertype(), RuleEthertype.IPV6); - assertEquals(rule.getProtocol(), RuleProtocol.TCP); - assertEquals(rule.getPortRangeMax().intValue(), 90); - assertEquals(rule.getPortRangeMin().intValue(), 80); - assertEquals(rule.getDirection(), RuleDirection.INGRESS); - } finally { - if (sgApi != null) { - try { - if (rule != null) { - assertTrue(sgApi.deleteRule(rule.getId())); - } - } finally { - assertTrue(sgApi.deleteSecurityGroup(securityGroup.getId())); - } - } - } - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiMockTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiMockTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiMockTest.java deleted file mode 100644 index 39bb8c5..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiMockTest.java +++ /dev/null @@ -1,394 +0,0 @@ -/* - * 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 com.google.common.collect.Iterables.size; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertTrue; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.List; - -import org.jclouds.openstack.neutron.v2.NeutronApi; -import org.jclouds.openstack.neutron.v2.domain.Rule; -import org.jclouds.openstack.neutron.v2.domain.RuleDirection; -import org.jclouds.openstack.neutron.v2.domain.RuleEthertype; -import org.jclouds.openstack.neutron.v2.domain.RuleProtocol; -import org.jclouds.openstack.neutron.v2.domain.Rules; -import org.jclouds.openstack.neutron.v2.domain.SecurityGroup; -import org.jclouds.openstack.neutron.v2.domain.SecurityGroups; -import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiMockTest; -import org.jclouds.openstack.v2_0.options.PaginationOptions; -import org.testng.annotations.Test; - -import com.squareup.okhttp.mockwebserver.MockResponse; -import com.squareup.okhttp.mockwebserver.MockWebServer; - -/** - * Tests SecurityGroupApi Guice wiring and parsing - * - */ -@Test -public class SecurityGroupApiMockTest extends BaseNeutronApiMockTest { - - public void testCreateSecurityGroup() 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("/security_group_create_response.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); - - SecurityGroup.CreateSecurityGroup createSecurityGroup = SecurityGroup.createBuilder().name("new-webservers") - .description("security group for webservers") - .build(); - - SecurityGroup securityGroup = api.create(createSecurityGroup); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 2); - assertAuthentication(server); - assertRequest(server.takeRequest(), "POST", uriApiVersion + "/security-groups", "/security_group_create_request.json"); - - /* - * Check response - */ - assertNotNull(securityGroup); - assertEquals(securityGroup.getId(), "2076db17-a522-4506-91de-c6dd8e837028"); - assertEquals(securityGroup.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); - assertEquals(securityGroup.getName(), "new-webservers"); - assertEquals(securityGroup.getDescription(), "security group for webservers"); - - Rule sgr0 = securityGroup.getRules().get(0); - Rule sgr1 = securityGroup.getRules().get(1); - - assertEquals(sgr0.getId(), "38ce2d8e-e8f1-48bd-83c2-d33cb9f50c3d"); - assertEquals(sgr1.getId(), "565b9502-12de-4ffd-91e9-68885cff6ae1"); - } finally { - server.shutdown(); - } - } - - public void testCreateSecurityGroupRule() 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("/security_group_rule_create_response.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); - - Rule.CreateRule createSecurityGroupRule = Rule.createBuilder( - RuleDirection.INGRESS, "a7734e61-b545-452d-a3cd-0189cbd9747a") - .portRangeMin(80) - .portRangeMax(80) - .ethertype(RuleEthertype.IPV4) - .protocol(RuleProtocol.TCP) - .remoteGroupId("85cc3048-abc3-43cc-89b3-377341426ac5") - .build(); - - Rule rule = api.create(createSecurityGroupRule); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 2); - assertAuthentication(server); - assertRequest(server.takeRequest(), "POST", uriApiVersion + "/security-group-rules", "/security_group_rule_create_request.json"); - - /* - * Check response - */ - assertNotNull(rule); - assertEquals(rule.getId(), "2bc0accf-312e-429a-956e-e4407625eb62"); - assertEquals(rule.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); - assertEquals(rule.getDirection(), RuleDirection.INGRESS); - assertEquals(rule.getPortRangeMax().intValue(), 80); - assertEquals(rule.getPortRangeMin().intValue(), 80); - assertEquals(rule.getEthertype(), RuleEthertype.IPV4); - assertEquals(rule.getProtocol(), RuleProtocol.TCP); - assertEquals(rule.getRemoteGroupId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); - assertEquals(rule.getSecurityGroupId(), "a7734e61-b545-452d-a3cd-0189cbd9747a"); - - } finally { - server.shutdown(); - } - } - - public void testListSpecificPageSecurityGroup() 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("/security_group_list_response_paged1.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); - - SecurityGroups securityGroups = api.listSecurityGroups(PaginationOptions.Builder.limit(2).marker("abcdefg")); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 2); - assertAuthentication(server); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups?limit=2&marker=abcdefg"); - - /* - * Check response - */ - assertNotNull(securityGroups); - assertEquals(size(securityGroups), 2); - // Ensures the full collection is parsed and ordering is preserved. - assertEquals(securityGroups.first().get().getId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); - assertEquals(securityGroups.get(1).getId(), "85cc3048-abc3-43cc-89b3-377341426ac52"); - } finally { - server.shutdown(); - } - } - - public void testListSpecificPageSecurityGroupRule() 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("/security_group_rule_list_response_paged1.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); - - Rules rules = api.listRules(PaginationOptions.Builder.limit(2).marker("abcdefg")); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 2); - assertAuthentication(server); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules?limit=2&marker=abcdefg"); - - /* - * Check response - */ - assertNotNull(rules); - assertEquals(rules.size(), 4); - // Ensures the full collection is parsed and ordering is preserved. - assertEquals(rules.first().get().getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); - assertEquals(rules.get(3).getId(), "f7d45c89-008e-4bab-88ad-d6811724c51c"); - } finally { - server.shutdown(); - } - } - - public void testListPagedSecurityGroups() 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("/security_group_list_response_paged1.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_list_response_paged2.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); - - // Note: Lazy! Have to actually look at the collection. - List<SecurityGroup> securityGroups = api.listSecurityGroups().concat().toList(); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 3); - assertAuthentication(server); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups"); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups?marker=71c1e68c-171a-4aa2-aca5-50ea153a3718"); - - /* - * Check response - */ - assertNotNull(securityGroups); - assertEquals(securityGroups.size(), 4); - // Ensures ordering is preserved and both pages are parsed. - assertEquals(securityGroups.get(0).getId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); - assertEquals(securityGroups.get(3).getId(), "85cc3048-abc3-43cc-89b3-377341426ac524"); - - } finally { - server.shutdown(); - } - } - - public void testListPagedSecurityGroupRules() 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("/security_group_rule_list_response_paged1.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_rule_list_response_paged2.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); - - // Note: Lazy! Have to actually look at the collection. - List<Rule> rules = api.listRules().concat().toList(); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 3); - assertAuthentication(server); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules"); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules?marker=71c1e68c-171a-4aa2-aca5-50ea153a3718"); - - /* - * Check response - */ - assertNotNull(rules); - assertEquals(rules.size(), 8); - // Ensures both pages are tested and ordering is preserved. - assertEquals(rules.get(0).getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); - assertEquals(rules.get(7).getId(), "f7d45c89-008e-4bab-88ad-d6811724c51c2"); - - } finally { - server.shutdown(); - } - } - - public void testGetSecurityGroup() 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("/security_group_get_response.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); - - SecurityGroup securityGroup = api.getSecurityGroup("12345"); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 2); - assertAuthentication(server); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups/12345"); - - /* - * Check response - */ - assertNotNull(securityGroup); - assertEquals(securityGroup.getName(), "default"); - assertEquals(securityGroup.getDescription(), "default"); - assertEquals(securityGroup.getId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); - assertEquals(securityGroup.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); - Rule sgr = securityGroup.getRules().get(0); - assertEquals(sgr.getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); - } finally { - server.shutdown(); - } - } - - public void testGetSecurityGroupRule() 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("/security_group_rule_get_response.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); - - Rule rule = api.get("12345"); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 2); - assertAuthentication(server); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules/12345"); - - /* - * Check response - */ - assertNotNull(rule); - assertEquals(rule.getDirection(), RuleDirection.EGRESS); - assertEquals(rule.getEthertype(), RuleEthertype.IPV6); - assertEquals(rule.getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); - assertEquals(rule.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); - assertEquals(rule.getSecurityGroupId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); - - } finally { - server.shutdown(); - } - } - - public void testDeleteSecurityGroup() 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); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); - - boolean result = api.deleteSecurityGroup("12345"); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 2); - assertAuthentication(server); - assertRequest(server.takeRequest(), "DELETE", uriApiVersion + "/security-groups/12345"); - - /* - * Check response - */ - assertTrue(result); - } finally { - server.shutdown(); - } - } - - public void testDeleteSecurityGroupRule() 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); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); - - boolean result = api.deleteRule("12345"); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 2); - assertAuthentication(server); - assertRequest(server.takeRequest(), "DELETE", uriApiVersion + "/security-group-rules/12345"); - - /* - * Check response - */ - assertTrue(result); - } finally { - server.shutdown(); - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiLiveTest.java deleted file mode 100644 index 3c5d7a8..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SubnetApiLiveTest.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * 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)); - } - } -}
