Repository: jclouds-labs Updated Branches: refs/heads/master 889b34b96 -> 9c74d22bb
network and image tests / correct zones configuration Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/9c74d22b Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/9c74d22b Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/9c74d22b Branch: refs/heads/master Commit: 9c74d22bb8723df1b31113265fef504272c66b23 Parents: 889b34b Author: Boris Trishkin <[email protected]> Authored: Tue Dec 19 14:34:36 2017 +0000 Committer: Ignasi Barrera <[email protected]> Committed: Wed Dec 20 08:24:28 2017 +0100 ---------------------------------------------------------------------- .../features/InfrastructureApi.java | 7 +- .../cloudcontrol/features/NetworkApi.java | 26 ++- .../features/InfrastructureApiLiveTest.java | 11 +- .../features/InfrastructureApiMockTest.java | 40 ++-- .../features/NetworkApiLiveTest.java | 120 ++++++++++- .../features/NetworkApiMockTest.java | 207 +++++++++++++++---- .../features/ServerImageApiLiveTest.java | 7 + .../features/ServerImageApiMockTest.java | 4 +- .../cloudcontrol/features/TagApiMockTest.java | 4 +- ...aseDimensionDataCloudControlApiLiveTest.java | 27 ++- .../BaseDimensionDataCloudControlMockTest.java | 15 +- 11 files changed, 384 insertions(+), 84 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApi.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApi.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApi.java index eafef2e..a2debef 100644 --- a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApi.java +++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApi.java @@ -47,6 +47,7 @@ import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; +import java.util.Set; @RequestFilters({ BasicAuthentication.class, OrganisationIdFilter.class }) @Consumes(MediaType.APPLICATION_JSON) @@ -75,7 +76,7 @@ public interface InfrastructureApi { @Path("/operatingSystem") @ResponseParser(ParseOperatingSystems.class) @Fallback(Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404.class) - PaginatedCollection<OperatingSystem> listOperatingSystems(@QueryParam("datacenterId") String datacenterId, + PaginatedCollection<OperatingSystem> listOperatingSystems(@QueryParam("datacenterId") Set<String> datacenterId, PaginationOptions options); @Named("infrastructure:operatingSystem") @@ -84,7 +85,7 @@ public interface InfrastructureApi { @Transform(ParseOperatingSystems.ToPagedIterable.class) @ResponseParser(ParseOperatingSystems.class) @Fallback(Fallbacks.EmptyPagedIterableOnNotFoundOr404.class) - PagedIterable<OperatingSystem> listOperatingSystems(@QueryParam("datacenterId") String datacenterId); + PagedIterable<OperatingSystem> listOperatingSystems(@QueryParam("datacenterId") Set<String> datacenterId); final class ParseDatacenters extends ParseJson<Datacenters> { @@ -138,7 +139,7 @@ public interface InfrastructureApi { @Override public IterableWithMarker<OperatingSystem> apply(Object input) { PaginationOptions paginationOptions = PaginationOptions.class.cast(input); - return api.getInfrastructureApi().listOperatingSystems(arg.get().toString(), paginationOptions); + return api.getInfrastructureApi().listOperatingSystems((Set<String>) arg.get(), paginationOptions); } }; } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApi.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApi.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApi.java index 129fa99..2a4629b 100644 --- a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApi.java +++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApi.java @@ -37,7 +37,6 @@ import org.jclouds.dimensiondata.cloudcontrol.domain.PaginatedCollection; import org.jclouds.dimensiondata.cloudcontrol.domain.Placement; import org.jclouds.dimensiondata.cloudcontrol.domain.PublicIpBlock; import org.jclouds.dimensiondata.cloudcontrol.domain.PublicIpBlocks; -import org.jclouds.dimensiondata.cloudcontrol.domain.Response; import org.jclouds.dimensiondata.cloudcontrol.domain.Vlan; import org.jclouds.dimensiondata.cloudcontrol.domain.Vlans; import org.jclouds.dimensiondata.cloudcontrol.filters.OrganisationIdFilter; @@ -165,7 +164,8 @@ public interface NetworkApi { @Path("/addPublicIpBlock") @Produces(MediaType.APPLICATION_JSON) @MapBinder(BindToJsonPayload.class) - Response addPublicIpBlock(@PayloadParam("networkDomainId") String networkDomainId); + @ResponseParser(ParsePublicIpBlockId.class) + String addPublicIpBlock(@PayloadParam("networkDomainId") String networkDomainId); @Named("networkDomain:listPublicIPv4AddressBlocks") @GET @@ -203,7 +203,8 @@ public interface NetworkApi { @Produces(MediaType.APPLICATION_JSON) @MapBinder(BindToJsonPayload.class) @Fallback(Fallbacks.VoidOnNotFoundOr404.class) - Response createNatRule(@PayloadParam("networkDomainId") String networkDomainId, + @ResponseParser(ParseNatRuleId.class) + String createNatRule(@PayloadParam("networkDomainId") String networkDomainId, @PayloadParam("internalIp") String internalIp, @PayloadParam("externalIp") String externalIp); @Named("networkDomain:listNatRules") @@ -483,5 +484,24 @@ public interface NetworkApi { super(json, "firewallRuleId"); } } + + @Singleton + final class ParsePublicIpBlockId extends ParseResponse { + + @Inject + ParsePublicIpBlockId(Json json) { + super(json, "ipBlockId"); + } + } + + @Singleton + final class ParseNatRuleId extends ParseResponse { + + @Inject + ParseNatRuleId(Json json) { + super(json, "natRuleId"); + } + } + } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApiLiveTest.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApiLiveTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApiLiveTest.java index 20f3b29..640ec8b 100644 --- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApiLiveTest.java +++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApiLiveTest.java @@ -22,6 +22,9 @@ import org.jclouds.dimensiondata.cloudcontrol.domain.OperatingSystem; import org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlApiLiveTest; import org.testng.annotations.Test; +import java.util.Set; +import java.util.HashSet; + import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; @@ -45,9 +48,11 @@ public class InfrastructureApiLiveTest extends BaseDimensionDataCloudControlApiL @Test public void testListOperatingSystems() { - FluentIterable<Datacenter> datacenters = getDatacenters(); - FluentIterable<OperatingSystem> operatingSystems = api().listOperatingSystems(datacenters.first().get().id()) - .concat(); + Set<String> datacenterIds = new HashSet<String>(); + for (Datacenter dc : getDatacenters()) { + datacenterIds.add(dc.id()); + } + FluentIterable<OperatingSystem> operatingSystems = api().listOperatingSystems(datacenterIds).concat(); assertNotNull(operatingSystems); assertTrue(!operatingSystems.isEmpty()); for (OperatingSystem operatingSystem : operatingSystems) { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApiMockTest.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApiMockTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApiMockTest.java index c44f764..2658d91 100644 --- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApiMockTest.java +++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/InfrastructureApiMockTest.java @@ -16,15 +16,14 @@ */ package org.jclouds.dimensiondata.cloudcontrol.features; +import com.google.common.collect.Sets; import org.jclouds.dimensiondata.cloudcontrol.domain.Datacenter; import org.jclouds.dimensiondata.cloudcontrol.domain.OperatingSystem; import org.jclouds.dimensiondata.cloudcontrol.internal.BaseAccountAwareCloudControlMockTest; import org.jclouds.http.Uris; -import org.jclouds.location.suppliers.ZoneIdsSupplier; import org.testng.annotations.Test; import javax.ws.rs.HttpMethod; -import java.util.Set; import static com.google.common.collect.Iterables.size; import static org.testng.Assert.assertEquals; @@ -43,7 +42,7 @@ public class InfrastructureApiMockTest extends BaseAccountAwareCloudControlMockT assertEquals(size(datacenters), 1); // Force the PagedIterable to advance assertEquals(server.getRequestCount(), 2); - assertSent(HttpMethod.GET, expectedListDatacentersUriBuilder().toString()); + assertSent(HttpMethod.GET, addZonesToUriBuilder(expectedListDatacentersUriBuilder()).toString()); } public void testListDatacentersWithPagination() throws Exception { @@ -53,29 +52,32 @@ public class InfrastructureApiMockTest extends BaseAccountAwareCloudControlMockT consumeIterableAndAssertAdditionalPagesRequested(datacenters, 2, 1); - assertSent(HttpMethod.GET, expectedListDatacentersUriBuilder().toString()); - assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListDatacentersUriBuilder(), 2).toString()); + assertSent(HttpMethod.GET, addZonesToUriBuilder(expectedListDatacentersUriBuilder()).toString()); + assertSent(HttpMethod.GET, addZonesToUriBuilder(expectedListDatacentersWithPaginationUriBuilder(2)).toString()); } public void testListDatacenters404() throws Exception { server.enqueue(response404()); assertTrue(api.getInfrastructureApi().listDatacenters().concat().isEmpty()); - assertSent(HttpMethod.GET, expectedListDatacentersUriBuilder().toString()); + assertSent(HttpMethod.GET, addZonesToUriBuilder(expectedListDatacentersUriBuilder()).toString()); } private Uris.UriBuilder expectedListDatacentersUriBuilder() { Uris.UriBuilder uriBuilder = Uris .uriBuilder("/caas/" + VERSION + "/6ac1e746-b1ea-4da5-a24e-caf1a978789d/infrastructure/datacenter"); - Set<String> zones = ctx.utils().injector().getInstance(ZoneIdsSupplier.class).get(); - for (String zone : zones) { - uriBuilder.addQuery("id", zone); - } - return uriBuilder; + return addZonesToUriBuilder(uriBuilder); + } + + private Uris.UriBuilder expectedListDatacentersWithPaginationUriBuilder(int pageNumber) { + Uris.UriBuilder uriBuilder = Uris + .uriBuilder("/caas/" + VERSION + "/6ac1e746-b1ea-4da5-a24e-caf1a978789d/infrastructure/datacenter"); + return addZonesToUriBuilder(addPageNumberToUriBuilder(uriBuilder, pageNumber, true)); } public void testListOperatingSystems() throws Exception { server.enqueue(jsonResponse("/operatingSystems.json")); - Iterable<OperatingSystem> operatingSystems = api.getInfrastructureApi().listOperatingSystems("NA9").concat(); + Iterable<OperatingSystem> operatingSystems = api.getInfrastructureApi() + .listOperatingSystems(Sets.newHashSet("NA1", "NA9")).concat(); assertEquals(size(operatingSystems), 33); assertEquals(server.getRequestCount(), 2); @@ -86,26 +88,32 @@ public class InfrastructureApiMockTest extends BaseAccountAwareCloudControlMockT public void testListOperatingSystemsWithPagination() throws Exception { server.enqueue(jsonResponse("/operatingSystems-page1.json")); server.enqueue(jsonResponse("/operatingSystems-page2.json")); - Iterable<OperatingSystem> operatingSystems = api.getInfrastructureApi().listOperatingSystems("NA9").concat(); + Iterable<OperatingSystem> operatingSystems = api.getInfrastructureApi() + .listOperatingSystems(Sets.newHashSet("NA1", "NA9")).concat(); consumeIterableAndAssertAdditionalPagesRequested(operatingSystems, 33, 1); assertSent(HttpMethod.GET, expectedListOperatingSystemsUriBuilder().toString()); - assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListOperatingSystemsUriBuilder(), 2).toString()); + assertSent(HttpMethod.GET, expectedListOperatingSystemsWithPaginationUriBuilder(2).toString()); } public void testListOperatingSystems404() throws Exception { server.enqueue(response404()); - assertTrue(api.getInfrastructureApi().listOperatingSystems("NA9").concat().isEmpty()); + assertTrue(api.getInfrastructureApi().listOperatingSystems(Sets.newHashSet("NA1", "NA9")).concat().isEmpty()); assertSent(HttpMethod.GET, expectedListOperatingSystemsUriBuilder().toString()); } private Uris.UriBuilder expectedListOperatingSystemsUriBuilder() { Uris.UriBuilder uriBuilder = Uris .uriBuilder("/caas/" + VERSION + "/6ac1e746-b1ea-4da5-a24e-caf1a978789d/infrastructure/operatingSystem"); - uriBuilder.addQuery("datacenterId", "NA9"); + uriBuilder.addQuery("datacenterId", "NA1", "NA9"); return uriBuilder; } + private Uris.UriBuilder expectedListOperatingSystemsWithPaginationUriBuilder(int pageNumber) { + Uris.UriBuilder uriBuilder = Uris + .uriBuilder("/caas/" + VERSION + "/6ac1e746-b1ea-4da5-a24e-caf1a978789d/infrastructure/operatingSystem"); + return addPageNumberToUriBuilder(uriBuilder.addQuery("datacenterId", "NA1", "NA9"), pageNumber, false); + } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApiLiveTest.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApiLiveTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApiLiveTest.java index 1d7f427..b8e1c2b 100644 --- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApiLiveTest.java +++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApiLiveTest.java @@ -18,9 +18,13 @@ package org.jclouds.dimensiondata.cloudcontrol.features; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import org.jclouds.collect.PagedIterable; +import org.jclouds.dimensiondata.cloudcontrol.domain.FirewallRule; import org.jclouds.dimensiondata.cloudcontrol.domain.FirewallRuleTarget; import org.jclouds.dimensiondata.cloudcontrol.domain.IpRange; +import org.jclouds.dimensiondata.cloudcontrol.domain.NatRule; import org.jclouds.dimensiondata.cloudcontrol.domain.Placement; +import org.jclouds.dimensiondata.cloudcontrol.domain.PublicIpBlock; import org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlApiLiveTest; import org.jclouds.rest.ResourceAlreadyExistsException; import org.testng.annotations.AfterClass; @@ -28,12 +32,16 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.util.List; +import java.util.Date; import static org.jclouds.dimensiondata.cloudcontrol.features.NetworkApiMockTest.DEFAULT_ACTION; import static org.jclouds.dimensiondata.cloudcontrol.features.NetworkApiMockTest.DEFAULT_IP_VERSION; import static org.jclouds.dimensiondata.cloudcontrol.utils.DimensionDataCloudControlResponseUtils.generateFirewallRuleName; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertEquals; @Test(groups = "live", testName = "NetworkApiLiveTest", singleThreaded = true) public class NetworkApiLiveTest extends BaseDimensionDataCloudControlApiLiveTest { @@ -43,8 +51,14 @@ public class NetworkApiLiveTest extends BaseDimensionDataCloudControlApiLiveTest private static final String DEFAULT_PROTOCOL = "TCP"; private String networkDomainId; + private String networkDomainName; private String vlanId; private String portListId; + private String firewallRuleId; + private String publicIpv4BlockId; + private PublicIpBlock publicIpBlock; + private String natRuleId; + private List<String> firewallRuleIds; @BeforeClass @@ -61,28 +75,106 @@ public class NetworkApiLiveTest extends BaseDimensionDataCloudControlApiLiveTest } @Test(dependsOnMethods = "testCreatePortList") + public void testGetPortList() { + FirewallRuleTarget.PortList portList = api().getPortList(portListId); + assertNotNull(portList); + assertTrue(portList.port().get(0).begin() == 22); + } + + @Test(dependsOnMethods = "testGetPortList") public void testCreateFirewallRuleWithPortList() { - String id = api().createFirewallRule(networkDomainId, generateFirewallRuleName("server-id"), DEFAULT_ACTION, + firewallRuleId = api().createFirewallRule(networkDomainId, generateFirewallRuleName("server-id"), DEFAULT_ACTION, DEFAULT_IP_VERSION, DEFAULT_PROTOCOL, FirewallRuleTarget.builder().ip(IpRange.create("ANY", null)).build(), FirewallRuleTarget.builder().ip(IpRange.create("ANY", null)).portListId(portListId).build(), Boolean.TRUE, Placement.builder().position("LAST").build()); - firewallRuleIds.add(id); + firewallRuleIds.add(firewallRuleId); + } + + @Test(dependsOnMethods = "testCreateFirewallRuleWithPortList") + public void testListFirewallRules() { + PagedIterable<FirewallRule> firewallRulesList = api().listFirewallRules(networkDomainId); + assertFalse(firewallRulesList.isEmpty()); + assertEquals(firewallRulesList.last().get().first().get().networkDomainId(), networkDomainId); + } + + @Test(dependsOnMethods = "testListFirewallRules") + public void testDeleteFirewallRule() { + api().deleteFirewallRule(firewallRuleId); + FirewallRule rule = findById(api().listFirewallRules(networkDomainId).concat().toList(), firewallRuleId); + assertNull(rule); } @Test(dependsOnMethods = "testDeployNetworkDomain") public void testDeployVlan() { - vlanId = api().deployVlan(networkDomainId, NetworkApiLiveTest.class.getSimpleName(), - NetworkApiLiveTest.class.getSimpleName(), DEFAULT_PRIVATE_IPV4_BASE_ADDRESS, + vlanId = api().deployVlan(networkDomainId, NetworkApiLiveTest.class.getSimpleName() + new Date().getTime(), + NetworkApiLiveTest.class.getSimpleName() + new Date().getTime(), DEFAULT_PRIVATE_IPV4_BASE_ADDRESS, DEFAULT_PRIVATE_IPV4_PREFIX_SIZE); assertNotNull(vlanId); assertTrue(vlanNormalPredicate.apply(vlanId), "vlan is not in a NORMAL state after timeout"); } @Test + public void testAddPublicIPv4Block() { + publicIpv4BlockId = api().addPublicIpBlock(PREPARED_NETWORK_DOMAIN_ID); + assertNotNull(publicIpv4BlockId); + } + + @Test(dependsOnMethods = "testAddPublicIPv4Block") + public void testListPublicIPv4AddressBlocks() { + PagedIterable<PublicIpBlock> ipBlockList = api().listPublicIPv4AddressBlocks(PREPARED_NETWORK_DOMAIN_ID); + assertTrue(!ipBlockList.isEmpty()); + assertEquals(ipBlockList.last().get().first().get().size(), 2); + assertEquals(ipBlockList.last().get().first().get().networkDomainId(), PREPARED_NETWORK_DOMAIN_ID); + } + + @Test(dependsOnMethods = "testAddPublicIPv4Block") + public void testGetPublicIPv4AddressBlocks() { + publicIpBlock = api().getPublicIPv4AddressBlock(publicIpv4BlockId); + assertNotNull(publicIpBlock); + assertEquals(publicIpBlock.size(), 2); + assertEquals(publicIpBlock.networkDomainId(), PREPARED_NETWORK_DOMAIN_ID); + } + + @Test(dependsOnMethods = "testGetPublicIPv4AddressBlocks") + public void testCreateNatRule() { + natRuleId = api() + .createNatRule(PREPARED_NETWORK_DOMAIN_ID, PREPARED_PRIVATE_IPV4_ADDRESS, publicIpBlock.baseIp()); + assertNotNull(natRuleId); + } + + @Test(dependsOnMethods = "testCreateNatRule") + public void testListNatRules() { + PagedIterable<NatRule> natRulesList = api().listNatRules(PREPARED_NETWORK_DOMAIN_ID); + assertTrue(!natRulesList.isEmpty()); + assertEquals(natRulesList.last().get().first().get().networkDomainId(), PREPARED_NETWORK_DOMAIN_ID); + } + + @Test(dependsOnMethods = { "testCreateNatRule", "testListNatRules" }) + public void testGetNatRule() { + NatRule natRule = api().getNatRule(natRuleId); + assertNotNull(natRule); + assertEquals(natRule.networkDomainId(), PREPARED_NETWORK_DOMAIN_ID); + } + + @Test(dependsOnMethods = "testGetNatRule", alwaysRun = true) + public void testDeleteNatRule() { + api().deleteNatRule(natRuleId); + NatRule natRule = api().getNatRule(natRuleId); + assertNull(natRule); + } + + @Test(dependsOnMethods = "testDeleteNatRule") + public void testRemovePublicIpBlock() { + api().removePublicIpBlock(publicIpv4BlockId); + publicIpBlock = api().getPublicIPv4AddressBlock(publicIpv4BlockId); + assertNull(publicIpBlock); + } + + @Test public void testDeployNetworkDomain() { - String networkDomainName = NetworkApiLiveTest.class.getSimpleName(); - networkDomainId = api() - .deployNetworkDomain(DATACENTER, networkDomainName, NetworkApiLiveTest.class.getSimpleName(), "ESSENTIALS"); + networkDomainName = NetworkApiLiveTest.class.getSimpleName() + new Date().getTime(); + networkDomainId = api().deployNetworkDomain(DATACENTERS.iterator().next(), networkDomainName, + NetworkApiLiveTest.class.getSimpleName() + new Date().getTime() + "description", "ESSENTIALS"); assertNotNull(networkDomainId); assertTrue(networkDomainNormalPredicate.apply(networkDomainId), "network domain is not in a NORMAL state after timeout"); @@ -90,8 +182,7 @@ public class NetworkApiLiveTest extends BaseDimensionDataCloudControlApiLiveTest @Test(expectedExceptions = ResourceAlreadyExistsException.class) public void testDeploySameNetworkDomain() { - api().deployNetworkDomain(DATACENTER, NetworkApiLiveTest.class.getSimpleName(), - NetworkApiLiveTest.class.getSimpleName(), "ESSENTIALS"); + api().deployNetworkDomain(DATACENTERS.iterator().next(), networkDomainName, networkDomainName, "ESSENTIALS"); } @AfterClass @@ -113,10 +204,21 @@ public class NetworkApiLiveTest extends BaseDimensionDataCloudControlApiLiveTest assertTrue(networkDomainDeletedPredicate.apply(networkDomainId), "network domain is not in a DELETED state after timeout"); } + if (publicIpBlock != null) { + api().removePublicIpBlock(publicIpBlock.id()); + } } private NetworkApi api() { return api.getNetworkApi(); } + private FirewallRule findById(List<FirewallRule> collection, String id) { + for (FirewallRule rule : collection) { + if (rule.id().equals(id)) { + return rule; + } + } + return null; + } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApiMockTest.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApiMockTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApiMockTest.java index 6e4fc86..5002a8b 100644 --- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApiMockTest.java +++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/NetworkApiMockTest.java @@ -16,7 +16,9 @@ */ package org.jclouds.dimensiondata.cloudcontrol.features; +import com.google.common.collect.Lists; import com.squareup.okhttp.mockwebserver.MockResponse; +import com.squareup.okhttp.mockwebserver.RecordedRequest; import org.jclouds.dimensiondata.cloudcontrol.domain.FirewallRule; import org.jclouds.dimensiondata.cloudcontrol.domain.FirewallRuleTarget; import org.jclouds.dimensiondata.cloudcontrol.domain.IpRange; @@ -32,6 +34,7 @@ import org.jclouds.http.Uris; import org.testng.annotations.Test; import javax.ws.rs.HttpMethod; +import java.util.List; import static ch.qos.logback.core.net.ssl.SSL.DEFAULT_PROTOCOL; import static com.google.common.collect.Iterables.size; @@ -51,7 +54,7 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { public void testListNetworkDomains() throws Exception { server.enqueue(jsonResponse("/networkDomains.json")); - Iterable<NetworkDomain> networkDomains = api.getNetworkApi().listNetworkDomains().concat(); + Iterable<NetworkDomain> networkDomains = api().listNetworkDomains().concat(); assertEquals(size(networkDomains), 1); // Force the PagedIterable to advance assertEquals(server.getRequestCount(), 2); @@ -61,30 +64,30 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { public void testListNetworkDomainsWithPagination() throws Exception { server.enqueue(jsonResponse("/networkDomains-page1.json")); server.enqueue(jsonResponse("/networkDomains-page2.json")); - Iterable<NetworkDomain> networkDomains = api.getNetworkApi().listNetworkDomains().concat().toList(); + Iterable<NetworkDomain> networkDomains = api().listNetworkDomains().concat().toList(); consumeIterableAndAssertAdditionalPagesRequested(networkDomains, 20, 0); assertSent(HttpMethod.GET, expectedListNetworkDomainsUriBuilder().toString()); - assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListNetworkDomainsUriBuilder(), 2).toString()); + assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListNetworkDomainsUriBuilder(), 2, false).toString()); } public void testGetNetworkDomain() throws Exception { server.enqueue(jsonResponse("/networkDomain.json")); - api.getNetworkApi().getNetworkDomain("networkDomainId"); + api().getNetworkDomain("networkDomainId"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/networkDomain/networkDomainId"); } public void testGetNetworkDomain_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().listNetworkDomainsWithDatacenterIdAndName("testDatacenterId", "testName").concat(); + api().listNetworkDomainsWithDatacenterIdAndName("testDatacenterId", "testName").concat(); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/networkDomain" + "?datacenterId=testDatacenterId&name=testName"); } public void testListNetworkDomainsWithName() throws Exception { server.enqueue(jsonResponse("/networkDomains.json")); - api.getNetworkApi().listNetworkDomainsWithDatacenterIdAndName("testDatacenterId", "testName").concat(); + api().listNetworkDomainsWithDatacenterIdAndName("testDatacenterId", "testName").concat(); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/networkDomain" + "?datacenterId=testDatacenterId&name=testName"); } @@ -104,21 +107,21 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { public void testListNetworkDomainsWithName_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().listNetworkDomainsWithDatacenterIdAndName("testDatacenterId", "testName").concat(); + api().listNetworkDomainsWithDatacenterIdAndName("testDatacenterId", "testName").concat(); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/networkDomain" + "?datacenterId=testDatacenterId&name=testName"); } public void testListVlansWithNetworkDomainId() throws Exception { server.enqueue(jsonResponse("/vlans.json")); - api.getNetworkApi().listVlans("testNetworkDomainId"); + api().listVlans("testNetworkDomainId"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/vlan?networkDomainId=testNetworkDomainId"); } public void testListVlansWithNetworkDomainId_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().listVlans("testNetworkDomainId"); + api().listVlans("testNetworkDomainId"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/vlan?networkDomainId=testNetworkDomainId"); } @@ -126,60 +129,60 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { public void testListVlanssWithPagination() throws Exception { server.enqueue(jsonResponse("/vlans-page1.json")); server.enqueue(jsonResponse("/vlans-page2.json")); - Iterable<Vlan> vlans = api.getNetworkApi().listVlans("12345").concat().toList(); + Iterable<Vlan> vlans = api().listVlans("12345").concat().toList(); consumeIterableAndAssertAdditionalPagesRequested(vlans, 20, 0); assertSent(HttpMethod.GET, expectedListVlansRulesUriBuilder().toString()); - assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListVlansRulesUriBuilder(), 2).toString()); + assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListVlansRulesUriBuilder(), 2, false).toString()); } public void testListVlans() throws Exception { server.enqueue(new MockResponse().setBody(payloadFromResource("/vlans.json"))); - assertEquals(api.getNetworkApi().listVlans("12345").concat().toList(), new VlansParseTest().expected().toList()); + assertEquals(api().listVlans("12345").concat().toList(), new VlansParseTest().expected().toList()); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/vlan?networkDomainId=12345"); } public void testListVlans_404() throws Exception { server.enqueue(response404()); - assertTrue(api.getNetworkApi().listVlans("12345").concat().isEmpty()); + assertTrue(api().listVlans("12345").concat().isEmpty()); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/vlan?networkDomainId=12345"); } public void testGetVlan() throws Exception { server.enqueue(new MockResponse().setBody(payloadFromResource("/vlan.json"))); - api.getNetworkApi().getVlan("12345"); + api().getVlan("12345"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/vlan/12345"); } public void testGetVlan_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().getVlan("12345"); + api().getVlan("12345"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/vlan/12345"); } public void testListPublicIPv4AddressBlock() throws Exception { server.enqueue(new MockResponse().setBody(payloadFromResource("/publicIpBlocks.json"))); - assertEquals(api.getNetworkApi().listPublicIPv4AddressBlocks("12345").concat().toList(), + assertEquals(api().listPublicIPv4AddressBlocks("12345").concat().toList(), new PublicIpBlocksParseTest().expected().toList()); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/publicIpBlock?networkDomainId=12345"); } public void testListPublicIPv4AddressBlock_404() throws Exception { server.enqueue(response404()); - assertTrue(api.getNetworkApi().listPublicIPv4AddressBlocks("12345").concat().isEmpty()); + assertTrue(api().listPublicIPv4AddressBlocks("12345").concat().isEmpty()); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/publicIpBlock?networkDomainId=12345"); } public void testListPublicIPv4AddressBlockWithPagination() throws Exception { server.enqueue(jsonResponse("/publicIpBlocks-page1.json")); server.enqueue(jsonResponse("/publicIpBlocks-page2.json")); - Iterable<PublicIpBlock> ipBlocks = api.getNetworkApi().listPublicIPv4AddressBlocks("12345").concat().toList(); + Iterable<PublicIpBlock> ipBlocks = api().listPublicIPv4AddressBlocks("12345").concat().toList(); consumeIterableAndAssertAdditionalPagesRequested(ipBlocks, 20, 0); assertSent(HttpMethod.GET, expectedListPublicIpBlockUriBuilder().toString()); - assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListPublicIpBlockUriBuilder(), 2).toString()); + assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListPublicIpBlockUriBuilder(), 2, false).toString()); } public void testCreateFirewallRule() throws Exception { @@ -190,7 +193,7 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { + "} ],\n" + "\"warning\": [],\n" + "\"error\": [],\n" + "\"requestId\": \"NA9/2015-03-05T13:46:34.848-05:00/f8fdef24-8a12-45ea-a831-\n" + "d5463212ef6a\" }")); - api.getNetworkApi().createFirewallRule("123456", "test", DEFAULT_ACTION, DEFAULT_IP_VERSION, DEFAULT_PROTOCOL, + api().createFirewallRule("123456", "test", DEFAULT_ACTION, DEFAULT_IP_VERSION, DEFAULT_PROTOCOL, FirewallRuleTarget.builder().ip(IpRange.create("ANY", null)).build(), FirewallRuleTarget.builder().ip(IpRange.create("ANY", null)).build(), true, Placement.builder().position("LAST").build()); @@ -204,13 +207,13 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { + " has been accepted and is being processed\", \"info\": [],\n" + "\"warning\": [],\n" + "\"error\": [],\n" + "\"requestId\": \"NA9/2015-03-05T13:46:34.848-05:00/f8fdef24-8a12-45ea-a831-\n" + "d5463212ef6a\" }")); - api.getNetworkApi().deleteNetworkDomain("networkDomainId"); + api().deleteNetworkDomain("networkDomainId"); assertSent(POST, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deleteNetworkDomain"); } public void testDeleteNetworkDomain_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().deleteNetworkDomain("networkDomainId"); + api().deleteNetworkDomain("networkDomainId"); assertSent(POST, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deleteNetworkDomain"); } @@ -221,25 +224,25 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { + " \"info\": [],\n" + "\"warning\": [],\n" + "\"error\": [],\n" + "\"requestId\": \"NA9/2015-03-05T13:46:34.848-05:00/f8fdef24-8a12-45ea-a831-\n" + "d5463212ef6a\" }")); - api.getNetworkApi().removePublicIpBlock("publicIpBlockId"); + api().removePublicIpBlock("publicIpBlockId"); assertSent(POST, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/removePublicIpBlock"); } public void testRemovePublicIpBlock_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().removePublicIpBlock("publicIpBlockId"); + api().removePublicIpBlock("publicIpBlockId"); assertSent(POST, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/removePublicIpBlock"); } public void testGetPublicIpBlock() throws Exception { server.enqueue(jsonResponse("/publicIpBlock.json")); - api.getNetworkApi().getPublicIPv4AddressBlock("publicIpBlockId"); + api().getPublicIPv4AddressBlock("publicIpBlockId"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/publicIpBlock/publicIpBlockId"); } public void testGetPublicIpBlock_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().getPublicIPv4AddressBlock("publicIpBlockId"); + api().getPublicIPv4AddressBlock("publicIpBlockId"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/publicIpBlock/publicIpBlockId"); } @@ -250,66 +253,66 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { + "\"value\": \"dc545f3e-823c-4500-93c9-8d7f576311de\"\n" + "} ],\n" + "\"warning\": [],\n" + "\"error\": [],\n" + "\"requestId\": \"NA9/2015-03-05T13:46:34.848-05:00/f8fdef24-8a12-45ea-a831-\n" + "d5463212ef6a\" }")); - api.getNetworkApi().createNatRule("networkDomainId", "10.0.0.5", "155.143.0.54"); + api().createNatRule("networkDomainId", "10.0.0.5", "155.143.0.54"); assertSent(POST, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/createNatRule"); } public void testListNatRules() throws Exception { server.enqueue(new MockResponse().setBody(payloadFromResource("/natRules.json"))); - api.getNetworkApi().listNatRules("12345").concat().toList(); + api().listNatRules("12345").concat().toList(); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/natRule?networkDomainId=12345"); } public void testListNatRulesWithPagination() throws Exception { server.enqueue(jsonResponse("/natRules-page1.json")); server.enqueue(jsonResponse("/natRules-page2.json")); - Iterable<NatRule> natRules = api.getNetworkApi().listNatRules("12345").concat().toList(); + Iterable<NatRule> natRules = api().listNatRules("12345").concat().toList(); consumeIterableAndAssertAdditionalPagesRequested(natRules, 20, 0); assertSent(HttpMethod.GET, expectedListNatRulesUriBuilder().toString()); - assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListNatRulesUriBuilder(), 2).toString()); + assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListNatRulesUriBuilder(), 2, false).toString()); } public void testListNatRules_404() throws Exception { server.enqueue(response404()); - assertTrue(api.getNetworkApi().listNatRules("12345").concat().isEmpty()); + assertTrue(api().listNatRules("12345").concat().isEmpty()); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/natRule?networkDomainId=12345"); } public void testGetNatRule() throws Exception { server.enqueue(jsonResponse("/natRule.json")); - api.getNetworkApi().getNatRule("natRuleId"); + api().getNatRule("natRuleId"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/natRule/natRuleId"); } public void testGetNatRule_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().getNatRule("natRuleId"); + api().getNatRule("natRuleId"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/natRule/natRuleId"); } public void testListFirewallRules() throws Exception { server.enqueue(new MockResponse().setBody(payloadFromResource("/firewallRules.json"))); - api.getNetworkApi().listFirewallRules("12345").concat().toList(); + api().listFirewallRules("12345").concat().toList(); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/firewallRule?networkDomainId=12345"); } public void testListFirewallRules_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().listFirewallRules("12345").concat().toList(); + api().listFirewallRules("12345").concat().toList(); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/firewallRule?networkDomainId=12345"); } public void testListFirewallRulesWithPagination() throws Exception { server.enqueue(jsonResponse("/firewallRules-page1.json")); server.enqueue(jsonResponse("/firewallRules-page2.json")); - Iterable<FirewallRule> firewallRules = api.getNetworkApi().listFirewallRules("12345").concat().toList(); + Iterable<FirewallRule> firewallRules = api().listFirewallRules("12345").concat().toList(); consumeIterableAndAssertAdditionalPagesRequested(firewallRules, 15, 0); assertSent(HttpMethod.GET, expectedListFirewallRulesUriBuilder().toString()); - assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListFirewallRulesUriBuilder(), 2).toString()); + assertSent(HttpMethod.GET, addPageNumberToUriBuilder(expectedListFirewallRulesUriBuilder(), 2, false).toString()); } public void testDeleteFirewallRule() throws Exception { @@ -319,25 +322,25 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { + "\"info\": [],\n" + "\"warning\": [],\n" + "\"error\": [],\n" + "\"requestId\": \"NA9/2015-03-05T13:46:34.848-05:00/f8fdef24-8a12-45ea-a831-\n" + "d5463212ef6a\" }")); - api.getNetworkApi().deleteFirewallRule("firewallRuleId"); + api().deleteFirewallRule("firewallRuleId"); assertSent(POST, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deleteFirewallRule"); } public void testDeleteFirewallRule_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().deleteFirewallRule("firewallRuleId"); + api().deleteFirewallRule("firewallRuleId"); assertSent(POST, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deleteFirewallRule"); } public void testGetPortList() throws Exception { server.enqueue(new MockResponse().setBody(payloadFromResource("/portList.json"))); - api.getNetworkApi().getPortList("portListId"); + api().getPortList("portListId"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/portList/portListId"); } public void testGetPortList_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().getPortList("portListId"); + api().getPortList("portListId"); assertSent(GET, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/portList/portListId"); } @@ -348,16 +351,130 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { + "\"warning\": [],\n" + "\"error\": [],\n" + "\"requestId\": \"NA9/2015-03-05T13:46:34.848-05:00/f8fdef24-8a12-45ea-a831-\n" + "d5463212ef6a\" }")); - api.getNetworkApi().deletePortList("portListId"); + api().deletePortList("portListId"); assertSent(POST, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deletePortList"); } public void testDeletePortList_404() throws Exception { server.enqueue(response404()); - api.getNetworkApi().deletePortList("portListId"); + api().deletePortList("portListId"); assertSent(POST, "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deletePortList"); } + public void testDeployNetworkDomain() throws Exception { + server.enqueue(new MockResponse().setResponseCode(200).setBody( + "{\n" + "\"operation\": \"DEPLOY_NETWORK_DOMAIN\",\n" + "\"responseCode\": \"IN_PROGRESS\",\n" + + "\"message\": \"Request to deploy Network Domain 'test' has been accepted and is being processed.\", " + + "\"info\": [\n" + "{\n" + "\"name\": \"networkDomainId\",\n" + + "\"value\": \"f14a871f-9a25-470c-aef8-51e13202e1aa\"\n" + "} ],\n" + "\"warning\": [],\n" + + "\"error\": [],\n" + "\"requestId\": \"NA9/2017-03-05T13:46:34.848-05:00/7e9fffe7-190b-46f2-9107-\n" + + "9d52fe57d0ad\" }")); + api().deployNetworkDomain("NA9", "test", "test description", NetworkDomain.Type.ESSENTIALS.name()); + RecordedRequest recordedRequest = assertSent(POST, + "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deployNetworkDomain"); + assertBodyContains(recordedRequest, + "{\"datacenterId\":\"NA9\",\"name\":\"test\",\"description\":\"test description\",\"type\":\"ESSENTIALS\"}"); + } + + public void testDeployVlan() throws Exception { + server.enqueue(new MockResponse().setResponseCode(200).setBody( + "{\n" + "\"operation\": \"DEPLOY_VLAN\",\n" + "\"responseCode\": \"IN_PROGRESS\",\n" + + "\"message\": \"Request to Deploy VLAN 'test' has been accepted and is being processed.\", " + + "\"info\": [\n" + "{\n" + "\"name\": \"vlanId\",\n" + + "\"value\": \"0e56433f-d808-4669-821d-812769517ff8\"\n" + "} ],\n" + "\"warning\": [],\n" + + "\"error\": [],\n" + "\"requestId\": \"NA9/2017-03-05T13:46:34.848-05:00/7e9fffe7-190b-46f2-9107-\n" + + "9d52fe57d0ad\" }")); + api.getNetworkApi() + .deployVlan("f14a871f-9a25-470c-aef8-51e13202e1aa", "test", "test description", "10.0.3.0", 23); + RecordedRequest recordedRequest = assertSent(POST, + "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deployVlan"); + assertBodyContains(recordedRequest, + "{\"networkDomainId\":\"f14a871f-9a25-470c-aef8-51e13202e1aa\",\"name\":\"test\"," + + "\"description\":\"test description\",\"privateIpv4BaseAddress\":\"10.0.3.0\",\"privateIpv4PrefixSize\":23}"); + } + + public void testDeleteVlan() throws Exception { + server.enqueue(new MockResponse().setResponseCode(200).setBody( + "{\n" + "\"operation\": \"DELETE_VLAN\",\n" + "\"responseCode\": \"IN_PROGRESS\",\n" + + "\"message\": \"Request to Delete VLAN (Id:0e56433f-d808-4669-821d-812769517ff8) has been accepted and is being processed.\", " + + "\"info\": [],\n" + "\"warning\": [],\n" + "\"error\": [],\n" + + "\"requestId\": \"NA9/2017-03-05T13:46:34.848-05:00/7e9fffe7-190b-46f2-9107-\n" + + "9d52fe57d0ad\" }")); + api().deleteVlan("0e56433f-d808-4669-821d-812769517ff8"); + RecordedRequest recordedRequest = assertSent(POST, + "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deleteVlan"); + assertBodyContains(recordedRequest, "{\"id\":\"0e56433f-d808-4669-821d-812769517ff8\"}"); + } + + public void testDeleteVlan_404() throws Exception { + server.enqueue(response404()); + api().deleteVlan("0e56433f-d808-4669-821d-812769517ff8"); + RecordedRequest recordedRequest = assertSent(POST, + "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deleteVlan"); + assertBodyContains(recordedRequest, "{\"id\":\"0e56433f-d808-4669-821d-812769517ff8\"}"); + } + + public void testAddPublicIpBlock() throws Exception { + server.enqueue(new MockResponse().setResponseCode(200).setBody( + "{\n" + "\"operation\": \"ADD_PUBLIC_IP_BLOCK\",\n" + "\"responseCode\": \"OK\",\n" + + "\"message\": \"Public IPv4 Address Block has been added successfully to" + + "Network Domain 484174a2-ae74-4658-9e56-50fc90e086cf.\",\n" + "\"info\": [\n" + "{\n" + + "\"name\": \"ipBlockId\",\n" + "\"value\": \"4487241a-f0ca-11e3-9315-d4bed9b167ba\"\n" + "} ],\n" + + "\"warning\": [],\n" + "\"error\": [],\n" + + "\"requestId\": \"NA9/2017-03-05T13:46:34.848-05:00/7e9fffe7-190b-46" + + "f2-9107-9d52fe57d0ad\" }")); + api().addPublicIpBlock("484174a2-ae74-4658-9e56-50fc90e086cf"); + RecordedRequest recordedRequest = assertSent(POST, + "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/addPublicIpBlock"); + assertBodyContains(recordedRequest, "{\"networkDomainId\":\"484174a2-ae74-4658-9e56-50fc90e086cf\"}"); + } + + public void testDeleteNatRule() throws Exception { + server.enqueue(new MockResponse().setResponseCode(200).setBody( + "{\n" + "\"operation\": \"DELETE_NAT_RULE\",\n" + "\"responseCode\": \"OK\",\n" + + "\"message\": \"NAT Rule with Id 2169a38e-5692-497e-a22a-701a838a6539 has been deleted.\", " + + "\"info\": [],\n" + "\"warning\": [],\n" + "\"error\": [],\n" + + "\"requestId\": \"NA9/2017-03-05T13:46:34.848-05:00/7e9fffe7-190b-46f2-9107-\n" + + "9d52fe57d0ad\" }")); + api().deleteNatRule("2169a38e-5692-497e-a22a-701a838a6539"); + RecordedRequest recordedRequest = assertSent(POST, + "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deleteNatRule"); + assertBodyContains(recordedRequest, "{\"id\":\"2169a38e-5692-497e-a22a-701a838a6539\"}"); + } + + public void testDeleteNatRule_404() throws Exception { + server.enqueue(response404()); + api().deleteNatRule("2169a38e-5692-497e-a22a-701a838a6539"); + RecordedRequest recordedRequest = assertSent(POST, + "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/deleteNatRule"); + assertBodyContains(recordedRequest, "{\"id\":\"2169a38e-5692-497e-a22a-701a838a6539\"}"); + } + + public void testCreatePortList() throws Exception { + server.enqueue(new MockResponse().setResponseCode(200).setBody( + "{\n" + "\"operation\": \"CREATE_PORT_LIST\",\n" + "\"responseCode\": \"OK\",\n" + + "\"message\": \"Port List 'TestPortList' has been created.\", " + "\"info\": [\n" + "{\n" + + "\"name\": \"portListId\",\n" + "\"value\": \"9e6b496d-5261-4542-91aa-b50c7f569c54\"\n" + "} ],\n" + + "\"warning\": [],\n" + "\"error\": [],\n" + + "\"requestId\": \"NA9/2017-03-05T13:46:34.848-05:00/7e9fffe7-190b-46f2-9107-\n" + + "9d52fe57d0ad\" }")); + List<FirewallRuleTarget.Port> portList = Lists + .newArrayList(FirewallRuleTarget.Port.create(8080, null), FirewallRuleTarget.Port.create(8899, 9023), + FirewallRuleTarget.Port.create(9500, null)); + List<String> childPortListId = Lists + .newArrayList("1ecf8cd4-dcda-4783-b4ba-b50eb541b813", "54da883e-a023-11e5-a668-426c57702d90"); + api.getNetworkApi() + .createPortList("db707da6-5785-4a56-ad58-2f8058708d95", "TestPortList", "Test Port List", portList, + childPortListId); + RecordedRequest recordedRequest = assertSent(POST, + "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/createPortList"); + assertBodyContains(recordedRequest, + "{\"networkDomainId\":\"db707da6-5785-4a56-ad58-2f8058708d95\",\"name\":\"TestPortList\"," + + "\"description\":\"Test Port List\",\"port\":[" + + "{\"begin\":8080},{\"begin\":8899,\"end\":9023},{\"begin\":9500}]," + + "\"childPortListId\":[\"1ecf8cd4-dcda-4783-b4ba-b50eb541b813\",\"54da883e-a023-11e5-a668-426c57702d90\"]}"); + } + private Uris.UriBuilder expectedListFirewallRulesUriBuilder() { Uris.UriBuilder uriBuilder = Uris .uriBuilder("/caas/" + VERSION + "/6ac1e746-b1ea-4da5-a24e-caf1a978789d/network/firewallRule"); @@ -389,4 +506,8 @@ public class NetworkApiMockTest extends BaseAccountAwareCloudControlMockTest { uriBuilder.addQuery("networkDomainId", "12345"); return uriBuilder; } + + private NetworkApi api() { + return api.getNetworkApi(); + } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerImageApiLiveTest.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerImageApiLiveTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerImageApiLiveTest.java index 4a1b05a..4d004e9 100644 --- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerImageApiLiveTest.java +++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerImageApiLiveTest.java @@ -60,6 +60,13 @@ public class ServerImageApiLiveTest extends BaseDimensionDataCloudControlApiLive } } + @Test + public void testGetCustomerImage() { + CustomerImage customerImage = api().getCustomerImage(PREPARED_CUSTOMER_IMAGE_ID); + assertNotNull(customerImage); + assertTrue(customerImage.datacenterId().equals("NA9")); + } + private FluentIterable<CustomerImage> getCustomerImages() { FluentIterable<CustomerImage> customerImages = api().listCustomerImages().concat(); assertNotNull(customerImages); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerImageApiMockTest.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerImageApiMockTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerImageApiMockTest.java index 1d45ff0..8738903 100644 --- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerImageApiMockTest.java +++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerImageApiMockTest.java @@ -70,7 +70,7 @@ public class ServerImageApiMockTest extends BaseAccountAwareCloudControlMockTest Uris.UriBuilder uriBuilder = getListOsImageUrl(); assertSent(HttpMethod.GET, uriBuilder.toString()); - assertSent(HttpMethod.GET, addPageNumberToUriBuilder(uriBuilder, 2).toString()); + assertSent(HttpMethod.GET, addPageNumberToUriBuilder(uriBuilder, 2, false).toString()); } public void testListOsImage_404() throws Exception { @@ -121,7 +121,7 @@ public class ServerImageApiMockTest extends BaseAccountAwareCloudControlMockTest Uris.UriBuilder uriBuilder = getListCustomerImageUrl(); assertSent(HttpMethod.GET, uriBuilder.toString()); - assertSent(HttpMethod.GET, addPageNumberToUriBuilder(uriBuilder, 2).toString()); + assertSent(HttpMethod.GET, addZonesToUriBuilder(addPageNumberToUriBuilder(uriBuilder, 2, true)).toString()); } public void testListCustomerImage_404() throws Exception { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/TagApiMockTest.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/TagApiMockTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/TagApiMockTest.java index 9a0d8c8..0f35cda 100644 --- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/TagApiMockTest.java +++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/TagApiMockTest.java @@ -100,7 +100,7 @@ public class TagApiMockTest extends BaseAccountAwareCloudControlMockTest { consumeIterableAndAssertAdditionalPagesRequested(tags, 8, 0); assertSent(GET, expectedListTagsUriBuilder().toString()); - assertSent(GET, addPageNumberToUriBuilder(expectedListTagsUriBuilder(), 2).toString()); + assertSent(GET, addPageNumberToUriBuilder(expectedListTagsUriBuilder(), 2, true).toString()); } @Test @@ -128,7 +128,7 @@ public class TagApiMockTest extends BaseAccountAwareCloudControlMockTest { consumeIterableAndAssertAdditionalPagesRequested(tagKeys, 18, 0); assertSent(GET, expectedListTagKeysUriBuilder().toString()); - assertSent(GET, addPageNumberToUriBuilder(expectedListTagKeysUriBuilder(), 2).toString()); + assertSent(GET, addPageNumberToUriBuilder(expectedListTagKeysUriBuilder(), 2, true).toString()); } private Uris.UriBuilder expectedListTagKeysUriBuilder() { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/internal/BaseDimensionDataCloudControlApiLiveTest.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/internal/BaseDimensionDataCloudControlApiLiveTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/internal/BaseDimensionDataCloudControlApiLiveTest.java index affbe16..cd3e148 100644 --- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/internal/BaseDimensionDataCloudControlApiLiveTest.java +++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/internal/BaseDimensionDataCloudControlApiLiveTest.java @@ -17,21 +17,30 @@ package org.jclouds.dimensiondata.cloudcontrol.internal; import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableSet; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.TypeLiteral; import com.google.inject.name.Names; +import org.jclouds.ContextBuilder; import org.jclouds.apis.ApiMetadata; import org.jclouds.apis.BaseApiLiveTest; +import org.jclouds.concurrent.config.ExecutorServiceModule; import org.jclouds.dimensiondata.cloudcontrol.DimensionDataCloudControlApi; import org.jclouds.dimensiondata.cloudcontrol.DimensionDataCloudControlApiMetadata; +import org.jclouds.dimensiondata.cloudcontrol.DimensionDataCloudControlProviderMetadata; +import org.jclouds.location.suppliers.ZoneIdsSupplier; import org.jclouds.logging.config.LoggingModule; import org.jclouds.logging.slf4j.config.SLF4JLoggingModule; +import org.jclouds.rest.ApiContext; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.util.Properties; +import java.util.Set; +import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor; import static org.jclouds.dimensiondata.cloudcontrol.config.DimensionDataCloudControlComputeServiceContextModule.NETWORK_DOMAIN_DELETED_PREDICATE; import static org.jclouds.dimensiondata.cloudcontrol.config.DimensionDataCloudControlComputeServiceContextModule.NETWORK_DOMAIN_NORMAL_PREDICATE; import static org.jclouds.dimensiondata.cloudcontrol.config.DimensionDataCloudControlComputeServiceContextModule.SERVER_DELETED_PREDICATE; @@ -45,11 +54,27 @@ import static org.jclouds.dimensiondata.cloudcontrol.config.DimensionDataCloudCo @Test(groups = "live") public class BaseDimensionDataCloudControlApiLiveTest extends BaseApiLiveTest<DimensionDataCloudControlApi> { + private static final Set<Module> modules = ImmutableSet.<Module>of(new ExecutorServiceModule(sameThreadExecutor())); + + protected static final String PREPARED_CUSTOMER_IMAGE_ID = "fb438e00-10f8-47ac-a434-f3f9461c3a76"; + protected static final String NETWORK_DOMAIN_ID = System .getProperty("networkDomainId", "690de302-bb80-49c6-b401-8c02bbefb945"); protected static final String VLAN_ID = System.getProperty("vlanId", "6b25b02e-d3a2-4e69-8ca7-9bab605deebd"); protected static final String IMAGE_ID = System.getProperty("imageId", "4c02126c-32fc-4b4c-9466-9824c1b5aa0f"); - protected static final String DATACENTER = System.getProperty("datacenter", "NW20-EPC-LAB04"); + + protected static final String PREPARED_NETWORK_DOMAIN_ID = System + .getProperty("networkDomainId", "d122949b-8990-46d6-98f0-91c8676fc720"); + protected static final String PREPARED_PRIVATE_IPV4_ADDRESS = "10.0.0.6"; + protected static ApiContext<DimensionDataCloudControlApi> ctx; + protected static Set<String> DATACENTERS; + + @BeforeClass + public static void setUp() { + ctx = ContextBuilder.newBuilder(DimensionDataCloudControlProviderMetadata.builder().build()).credentials("", "") + .modules(modules).overrides(new Properties()).build(); + DATACENTERS = ctx.utils().injector().getInstance(ZoneIdsSupplier.class).get(); + } protected static final String SERVER_ID = System.getProperty("serverId", "b1c537bb-018c-49ba-beef-e0600e948149"); protected Predicate<String> vlanDeletedPredicate; http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9c74d22b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/internal/BaseDimensionDataCloudControlMockTest.java ---------------------------------------------------------------------- diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/internal/BaseDimensionDataCloudControlMockTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/internal/BaseDimensionDataCloudControlMockTest.java index 7856524..69707b4 100644 --- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/internal/BaseDimensionDataCloudControlMockTest.java +++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/internal/BaseDimensionDataCloudControlMockTest.java @@ -31,6 +31,7 @@ import org.jclouds.dimensiondata.cloudcontrol.DimensionDataCloudControlApi; import org.jclouds.dimensiondata.cloudcontrol.DimensionDataCloudControlProviderMetadata; import org.jclouds.http.Uris; import org.jclouds.json.Json; +import org.jclouds.location.suppliers.ZoneIdsSupplier; import org.jclouds.rest.ApiContext; import org.testng.IHookCallBack; import org.testng.IHookable; @@ -205,8 +206,18 @@ public class BaseDimensionDataCloudControlMockTest implements IHookable { assertEquals(server.getRequestCount() - initialRequestCount, expectedAdditionalPagesRequested); } - protected Uris.UriBuilder addPageNumberToUriBuilder(Uris.UriBuilder uriBuilder, int pageNumber) { - uriBuilder.addQuery("pageNumber", Integer.toString(pageNumber)); + protected Uris.UriBuilder addPageNumberToUriBuilder(Uris.UriBuilder uriBuilder, int pageNumber, boolean clearQuery) { + if (clearQuery){ + uriBuilder.clearQuery(); + } + return uriBuilder.addQuery("pageNumber", Integer.toString(pageNumber)); + } + + protected Uris.UriBuilder addZonesToUriBuilder(Uris.UriBuilder uriBuilder) { + Set<String> zones = ctx.utils().injector().getInstance(ZoneIdsSupplier.class).get(); + for (String zone : zones) { + uriBuilder.addQuery("datacenterId", zone); + } return uriBuilder; }
