http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/ECSTemplateBuilderLiveTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/ECSTemplateBuilderLiveTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/ECSTemplateBuilderLiveTest.java new file mode 100644 index 0000000..6c0343b --- /dev/null +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/ECSTemplateBuilderLiveTest.java @@ -0,0 +1,53 @@ +/* + * 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.aliyun.ecs.compute; + +import com.google.common.collect.ImmutableSet; +import org.jclouds.compute.domain.OsFamily; +import org.jclouds.compute.domain.Template; +import org.jclouds.compute.internal.BaseTemplateBuilderLiveTest; +import org.testng.annotations.Test; + +import java.util.Set; + +import static org.jclouds.compute.util.ComputeServiceUtils.getCores; +import static org.testng.Assert.assertEquals; + +@Test(groups = "live", testName = "ECSTemplateBuilderLiveTest") +public class ECSTemplateBuilderLiveTest extends BaseTemplateBuilderLiveTest { + + public ECSTemplateBuilderLiveTest() { + provider = "alibaba-ecs"; + } + + @Test + @Override + public void testDefaultTemplateBuilder() { + Template defaultTemplate = view.getComputeService().templateBuilder().build(); + assert defaultTemplate.getImage().getOperatingSystem().getVersion().startsWith("7.") : defaultTemplate.getImage() + .getOperatingSystem().getVersion(); + assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true); + assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS); + assertEquals(getCores(defaultTemplate.getHardware()), 1.0d); + } + + @Override + protected Set<String> getIso3166Codes() { + return ImmutableSet.of("US-CA", "US-VA", "DE", "JP", "ID-JK", "SG", "IN", "AU-NSW", "MY", "CN-HE", "CN-SH", "CN-ZJ", "CN-GD", "HK", "AE-DU"); + } + +}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/ImageApiLiveTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/ImageApiLiveTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/ImageApiLiveTest.java index 5fe5c3f..f9e0e66 100644 --- a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/ImageApiLiveTest.java +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/ImageApiLiveTest.java @@ -20,14 +20,13 @@ import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiLiveTest; import org.jclouds.aliyun.ecs.domain.Image; -import org.jclouds.aliyun.ecs.domain.internal.Regions; +import org.jclouds.aliyun.ecs.domain.options.ListImagesOptions; import org.jclouds.aliyun.ecs.features.ImageApi; import org.testng.annotations.Test; import java.util.concurrent.atomic.AtomicInteger; -import static org.jclouds.aliyun.ecs.domain.options.ListImagesOptions.Builder.imageIds; -import static org.jclouds.aliyun.ecs.domain.options.PaginationOptions.Builder.pageNumber; +import static org.jclouds.aliyun.ecs.domain.options.PaginationOptions.Builder.pageSize; import static org.testng.Assert.assertTrue; import static org.testng.util.Strings.isNullOrEmpty; @@ -36,7 +35,7 @@ public class ImageApiLiveTest extends BaseECSComputeServiceApiLiveTest { public void testList() { final AtomicInteger found = new AtomicInteger(0); - assertTrue(Iterables.all(api().list(Regions.EU_CENTRAL_1.getName()).concat(), new Predicate<Image>() { + assertTrue(Iterables.all(api().list(TEST_REGION).concat(), new Predicate<Image>() { @Override public boolean apply(Image input) { found.incrementAndGet(); @@ -48,9 +47,9 @@ public class ImageApiLiveTest extends BaseECSComputeServiceApiLiveTest { public void testListWithOptions() { final AtomicInteger found = new AtomicInteger(0); - assertTrue(api().list(Regions.EU_CENTRAL_1.getName(), - imageIds("debian_8_09_64_20G_alibase_20170824.vhd") - .paginationOptions(pageNumber(3))) + assertTrue(api().list(TEST_REGION, + ListImagesOptions.Builder.imageName("debian_8_09_64_20G_alibase_20170824.vhd") + .paginationOptions(pageSize(1))) .firstMatch(new Predicate<Image>() { @Override public boolean apply(Image input) { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/ImageApiMockTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/ImageApiMockTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/ImageApiMockTest.java index e61b910..d206e8d 100644 --- a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/ImageApiMockTest.java +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/ImageApiMockTest.java @@ -19,7 +19,6 @@ package org.jclouds.aliyun.ecs.compute.features; import com.google.common.collect.ImmutableMap; import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiMockTest; import org.jclouds.aliyun.ecs.domain.Image; -import org.jclouds.aliyun.ecs.domain.internal.Regions; import org.testng.annotations.Test; import static com.google.common.collect.Iterables.isEmpty; @@ -36,35 +35,35 @@ public class ImageApiMockTest extends BaseECSComputeServiceApiMockTest { server.enqueue(jsonResponse("/images-first.json")); server.enqueue(jsonResponse("/images-second.json")); server.enqueue(jsonResponse("/images-last.json")); - Iterable<Image> images = api.imageApi().list(Regions.EU_CENTRAL_1.getName()).concat(); + Iterable<Image> images = api.imageApi().list(TEST_REGION).concat(); assertEquals(size(images), 28); // Force the PagedIterable to advance assertEquals(server.getRequestCount(), 3); - assertSent(server, "GET", "DescribeImages", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); - assertSent(server, "GET", "DescribeImages", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName()), 2); - assertSent(server, "GET", "DescribeImages", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName()), 3); + assertSent(server, "GET", "DescribeImages", ImmutableMap.of("RegionId", TEST_REGION)); + assertSent(server, "GET", "DescribeImages", ImmutableMap.of("RegionId", TEST_REGION), 2); + assertSent(server, "GET", "DescribeImages", ImmutableMap.of("RegionId", TEST_REGION), 3); } public void testListImagesReturns404() { server.enqueue(response404()); - Iterable<Image> images = api.imageApi().list(Regions.EU_CENTRAL_1.getName()).concat(); + Iterable<Image> images = api.imageApi().list(TEST_REGION).concat(); assertTrue(isEmpty(images)); assertEquals(server.getRequestCount(), 1); } public void testListImagesWithOptions() throws InterruptedException { server.enqueue(jsonResponse("/images-first.json")); - Iterable<Image> images = api.imageApi().list(Regions.EU_CENTRAL_1.getName(), paginationOptions(pageNumber(1))); + Iterable<Image> images = api.imageApi().list(TEST_REGION, paginationOptions(pageNumber(1))); assertEquals(size(images), 10); assertEquals(server.getRequestCount(), 1); - assertSent(server, "GET", "DescribeImages", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); + assertSent(server, "GET", "DescribeImages", ImmutableMap.of("RegionId", TEST_REGION)); } public void testListImagesWithOptionsReturns404() throws InterruptedException { server.enqueue(response404()); - Iterable<Image> images = api.imageApi().list(Regions.EU_CENTRAL_1.getName(), paginationOptions(pageNumber(2))); + Iterable<Image> images = api.imageApi().list(TEST_REGION, paginationOptions(pageNumber(2))); assertTrue(isEmpty(images)); assertEquals(server.getRequestCount(), 1); - assertSent(server, "GET", "DescribeImages", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName()), 2); + assertSent(server, "GET", "DescribeImages", ImmutableMap.of("RegionId", TEST_REGION), 2); } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/InstanceApiLiveTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/InstanceApiLiveTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/InstanceApiLiveTest.java new file mode 100644 index 0000000..1b987fd --- /dev/null +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/InstanceApiLiveTest.java @@ -0,0 +1,189 @@ +/* + * 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.aliyun.ecs.compute.features; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; +import com.google.common.util.concurrent.Uninterruptibles; +import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiLiveTest; +import org.jclouds.aliyun.ecs.domain.AvailableZone; +import org.jclouds.aliyun.ecs.domain.Instance; +import org.jclouds.aliyun.ecs.domain.InstanceRequest; +import org.jclouds.aliyun.ecs.domain.InstanceStatus; +import org.jclouds.aliyun.ecs.domain.InstanceType; +import org.jclouds.aliyun.ecs.domain.SecurityGroupRequest; +import org.jclouds.aliyun.ecs.domain.VPC; +import org.jclouds.aliyun.ecs.domain.VPCRequest; +import org.jclouds.aliyun.ecs.domain.VSwitch; +import org.jclouds.aliyun.ecs.domain.VSwitchRequest; +import org.jclouds.aliyun.ecs.domain.options.CreateInstanceOptions; +import org.jclouds.aliyun.ecs.domain.options.CreateSecurityGroupOptions; +import org.jclouds.aliyun.ecs.domain.options.ListInstancesOptions; +import org.jclouds.aliyun.ecs.domain.options.ListVPCsOptions; +import org.jclouds.aliyun.ecs.domain.options.ListVSwitchesOptions; +import org.jclouds.aliyun.ecs.domain.regionscoped.RegionAndId; +import org.jclouds.aliyun.ecs.features.InstanceApi; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import static org.jclouds.aliyun.ecs.compute.strategy.CreateResourcesThenCreateNodes.DEFAULT_CIDR_BLOCK; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; +import static org.testng.util.Strings.isNullOrEmpty; + +@Test(groups = "live", testName = "InstanceApiLiveTest") +public class InstanceApiLiveTest extends BaseECSComputeServiceApiLiveTest { + + private String imageId = "ubuntu_16_0402_32_20G_alibase_20180409.vhd"; + private String hostname = "jclouds-test"; + private String instanceType = "ecs.t5-lc2m1.nano"; + private String vpcId; + private String vSwitchId; + private String securityGroupId; + private String instanceId; + private String slashEncodedInstanceId; + + @BeforeClass + public void setUp() { + VPCRequest vpcRequest = api.vpcApi().create(TEST_REGION); + vpcId = vpcRequest.getVpcId(); + VPC vpc = api.vpcApi().list(TEST_REGION, ListVPCsOptions.Builder.vpcId(vpcId)).firstMatch(Predicates.notNull()).orNull(); + while (vpc == null || vpc.status() == VPC.Status.PENDING) { + vpc = api.vpcApi().list(TEST_REGION, ListVPCsOptions.Builder.vpcId(vpcId)).firstMatch(Predicates.notNull()).orNull(); + Uninterruptibles.sleepUninterruptibly(2, TimeUnit.SECONDS); + } + + VSwitchRequest vSwitchRequest = api.vSwitchApi().create(TEST_ZONE, DEFAULT_CIDR_BLOCK, vpcId); + vSwitchId = vSwitchRequest.getVSwitchId(); + VSwitch vSwitch = api.vSwitchApi().list(TEST_REGION, ListVSwitchesOptions.Builder.vSwitchId(vSwitchId)).firstMatch(Predicates.notNull()).orNull(); + while (vSwitch == null || vSwitch.status() == VSwitch.Status.PENDING) { + vSwitch = api.vSwitchApi().list(TEST_REGION, ListVSwitchesOptions.Builder.vSwitchId(vSwitchId)).firstMatch(Predicates.notNull()).orNull(); + Uninterruptibles.sleepUninterruptibly(2, TimeUnit.SECONDS); + } + + SecurityGroupRequest request = api.securityGroupApi().create(TEST_REGION, + CreateSecurityGroupOptions.Builder + .securityGroupName(InstanceApiLiveTest.class.getSimpleName()) + .vpcId(vpcId) + ); + securityGroupId = request.getSecurityGroupId(); + } + + @AfterClass(alwaysRun = true) + public void tearDown() { + if (instanceId != null) { + api().delete(instanceId); + } + + if (securityGroupId != null) { + api.securityGroupApi().delete(TEST_REGION, securityGroupId); + } + + if (vSwitchId != null) { + api.vSwitchApi().delete(TEST_REGION, vSwitchId); + } + + if (vpcId != null) { + api.vpcApi().delete(TEST_REGION, vpcId); + } + } + + public void testListInstanceTypeByAvailableZone() { + final AtomicInteger found = new AtomicInteger(0); + assertTrue(Iterables.all(api().listInstanceTypesByAvailableZone(TEST_REGION), new Predicate<AvailableZone>() { + @Override + public boolean apply(AvailableZone input) { + found.incrementAndGet(); + return !input.availableResources().isEmpty(); + } + }), "All available zones must have the 'id' field populated"); + assertTrue(found.get() > 0, "Expected some instance type to be returned"); + } + + public void testListInstanceType() { + final AtomicInteger found = new AtomicInteger(0); + assertTrue(Iterables.all(api().listTypes(), new Predicate<InstanceType>() { + @Override + public boolean apply(InstanceType input) { + found.incrementAndGet(); + return !isNullOrEmpty(input.id()); + } + }), "All instance types must have the 'id' field populated"); + assertTrue(found.get() > 0, "Expected some instance type to be returned"); + } + + @Test(groups = "live", dependsOnMethods = "testListInstanceType") + public void testListInstance() { + final AtomicInteger found = new AtomicInteger(0); + assertTrue(Iterables.all(api().list(TEST_REGION).concat(), new Predicate<Instance>() { + @Override + public boolean apply(Instance input) { + found.incrementAndGet(); + return !isNullOrEmpty(input.id()); + } + }), "All instances must have the 'id' field populated"); + } + + @Test(groups = "live") + public void testCreate() { + InstanceRequest instanceRequest = api().create(TEST_REGION, imageId, securityGroupId, hostname, instanceType, + CreateInstanceOptions.Builder.vSwitchId(vSwitchId)); + instanceId = instanceRequest.getInstanceId(); + slashEncodedInstanceId = RegionAndId.slashEncodeRegionAndId(TEST_REGION, instanceId); + assertNotNull(instanceId, "Instance id must not be null"); + } + + @Test(groups = "live", dependsOnMethods = "testCreate") + public void testGet() { + Instance instance = Iterables.getOnlyElement(api().list(TEST_REGION, + ListInstancesOptions.Builder.instanceIds(instanceId))); + assertNotNull(instance.id(), "Instance must not be null"); + } + + @Test(groups = "live", dependsOnMethods = "testCreate") + public void testListInstanceStatus() { + final AtomicInteger found = new AtomicInteger(0); + assertTrue(Iterables.all(api().listInstanceStatus(TEST_REGION).concat(), new Predicate<InstanceStatus>() { + @Override + public boolean apply(InstanceStatus input) { + found.incrementAndGet(); + return !isNullOrEmpty(input.instanceId()); + } + }), "All instance status must have the 'instance id' field populated"); + } + + @Test(groups = "live", dependsOnMethods = "testGet") + public void testStartInstance() { + api().powerOn(instanceId); + assertTrue(instanceRunningPredicate.apply(slashEncodedInstanceId)); + } + + @Test(groups = "live", dependsOnMethods = "testStartInstance") + public void testStopInstance() { + api().powerOff(instanceId); + assertTrue(instanceSuspendedPredicate.apply(slashEncodedInstanceId)); + } + + private InstanceApi api() { + return api.instanceApi(); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/InstanceApiMockTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/InstanceApiMockTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/InstanceApiMockTest.java new file mode 100644 index 0000000..95609b9 --- /dev/null +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/InstanceApiMockTest.java @@ -0,0 +1,168 @@ +/* + * 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.aliyun.ecs.compute.features; + +import com.google.common.collect.Iterables; +import com.squareup.okhttp.mockwebserver.MockResponse; +import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiMockTest; +import org.jclouds.aliyun.ecs.domain.AvailableZone; +import org.jclouds.aliyun.ecs.domain.Instance; +import org.jclouds.aliyun.ecs.domain.InstanceStatus; +import org.jclouds.aliyun.ecs.domain.InstanceType; +import org.jclouds.aliyun.ecs.domain.options.CreateInstanceOptions; +import org.testng.annotations.Test; + +import java.util.List; + +import static com.google.common.collect.Iterables.isEmpty; +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; + +@Test(groups = "unit", testName = "InstanceApiMockTest", singleThreaded = true) +public class InstanceApiMockTest extends BaseECSComputeServiceApiMockTest { + + public void testListInstances() throws InterruptedException { + server.enqueue(jsonResponse("/instances-first.json")); + server.enqueue(jsonResponse("/instances-last.json")); + + Iterable<Instance> instances = api.instanceApi().list(TEST_REGION).concat(); + assertEquals(size(instances), 20); // Force the PagedIterable to advance + assertEquals(server.getRequestCount(), 2); + assertSent(server, "GET", "DescribeInstances"); + assertSent(server, "GET", "DescribeInstances", 2); + } + + public void testListInstancesReturns404() throws InterruptedException { + server.enqueue(response404()); + Iterable<Instance> instances = api.instanceApi().list(TEST_REGION).concat(); + assertTrue(isEmpty(instances)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeInstances"); + } + + public void testListInstanceTypes() throws InterruptedException { + server.enqueue(jsonResponse("/instanceTypes.json")); + + List<InstanceType> instanceTypes = api.instanceApi().listTypes(); + assertEquals(size(instanceTypes), 308); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeInstanceTypes"); + } + + public void testListInstanceTypesReturns404() throws InterruptedException { + server.enqueue(response404()); + List<InstanceType> instanceTypes = api.instanceApi().listTypes(); + assertTrue(isEmpty(instanceTypes)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeInstanceTypes"); + } + + public void testListInstanceTypesByAvailableZone() throws InterruptedException { + server.enqueue(jsonResponse("/availableZones.json")); + + List<AvailableZone> availableZones = api.instanceApi().listInstanceTypesByAvailableZone(TEST_REGION); + assertEquals(size(availableZones), 2); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeAvailableResource"); + } + + public void testListInstanceTypesByAvailableZoneReturns404() throws InterruptedException { + server.enqueue(response404()); + List<AvailableZone> availableZones = api.instanceApi().listInstanceTypesByAvailableZone(TEST_REGION); + assertTrue(isEmpty(availableZones)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeAvailableResource"); + } + + public void testCreateInstance() throws InterruptedException { + server.enqueue(new MockResponse().setResponseCode(200).setBody( + "{" + + " \"RequestId\": \"04F0F334-1335-436C-A1D7-6C044FE73368\"," + + " \"InstanceId\": \"i-instance1\"" + + "}")); + api.instanceApi().create(TEST_REGION, + "test", + "SecurityGroupId", + "Hostname", + "InstanceType" + ); + assertSent(server, "POST", "CreateInstance"); + } + + public void testCreateInstanceWithInstanceName() throws InterruptedException { + server.enqueue(new MockResponse().setResponseCode(200).setBody( + "{" + + " \"RequestId\": \"04F0F334-1335-436C-A1D7-6C044FE73368\"," + + " \"InstanceId\": \"i-instance1\"" + + "}")); + api.instanceApi().create(TEST_REGION, + "test", + "SecurityGroupId", + "Hostname", + "InstanceType", + CreateInstanceOptions.Builder.instanceName("jclouds") + ); + assertSent(server, "POST", "CreateInstance"); + } + + public void testAllocatePublicIpAddress() throws InterruptedException { + server.enqueue(new MockResponse().setResponseCode(200).setBody( + "{" + + " \"RequestId\": \"F2EF6A3B-E345-46B9-931E-0EA094818567\"," + + " \"IpAddress\": \"10.1.149.159\"" + + "}")); + api.instanceApi().create(TEST_REGION, + "test", + "SecurityGroupId", + "Hostname", + "InstanceType" + ); + assertSent(server, "POST", "CreateInstance"); + } + + public void testGetStatus() throws Exception { + server.enqueue(jsonResponse("/instanceStatus.json")); + Iterable<InstanceStatus> instanceStatuses = api.instanceApi().listInstanceStatus("12345").concat(); + assertSent(server, "GET", "DescribeInstanceStatus"); + assertNotNull(instanceStatuses); + } + + public void testGetStatusReturns404() throws InterruptedException { + server.enqueue(response404()); + Iterable<InstanceStatus> instanceStatuses = api.instanceApi().listInstanceStatus("12345").concat(); + assertTrue(Iterables.isEmpty(instanceStatuses)); + assertSent(server, "GET", "DescribeInstanceStatus"); + } + + public void testDeleteInstance() throws Exception { + server.enqueue(new MockResponse().setResponseCode(200).setBody( + "{" + + " \"RequestId\": \"928E2273-5715-46B9-A730-238DC996A533\"" + + "}")); + api.instanceApi().delete("instanceId"); + assertSent(server, "POST", "DeleteInstance"); + } + + public void testDeleteInstanceReturns404() throws Exception { + server.enqueue(response404()); + api.instanceApi().delete("instanceId"); + assertSent(server, "POST", "DeleteInstance"); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/RegionAndZoneApiMockTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/RegionAndZoneApiMockTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/RegionAndZoneApiMockTest.java index e116845..46badaf 100644 --- a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/RegionAndZoneApiMockTest.java +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/RegionAndZoneApiMockTest.java @@ -19,7 +19,6 @@ package org.jclouds.aliyun.ecs.compute.features; import com.google.common.collect.ImmutableMap; import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiMockTest; import org.jclouds.aliyun.ecs.domain.Region; -import org.jclouds.aliyun.ecs.domain.internal.Regions; import org.jclouds.aliyun.ecs.domain.Zone; import org.testng.annotations.Test; @@ -51,18 +50,18 @@ public class RegionAndZoneApiMockTest extends BaseECSComputeServiceApiMockTest { public void testListZones() throws InterruptedException { server.enqueue(jsonResponse("/zones.json")); - List<Zone> zones = api.regionAndZoneApi().describeZones(Regions.EU_CENTRAL_1.getName()); + List<Zone> zones = api.regionAndZoneApi().describeZones(TEST_REGION); assertEquals(size(zones), 2); assertEquals(server.getRequestCount(), 1); - assertSent(server, "GET", "DescribeZones", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); + assertSent(server, "GET", "DescribeZones", ImmutableMap.of("RegionId", TEST_REGION)); } public void testListZonesReturns404() throws InterruptedException { server.enqueue(response404()); - List<Zone> zones = api.regionAndZoneApi().describeZones(Regions.EU_CENTRAL_1.getName()); + List<Zone> zones = api.regionAndZoneApi().describeZones(TEST_REGION); assertTrue(isEmpty(zones)); assertEquals(server.getRequestCount(), 1); - assertSent(server, "GET", "DescribeZones", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); + assertSent(server, "GET", "DescribeZones", ImmutableMap.of("RegionId", TEST_REGION)); } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SecurityGroupApiLiveTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SecurityGroupApiLiveTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SecurityGroupApiLiveTest.java index 5c76fc5..6fde29e 100644 --- a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SecurityGroupApiLiveTest.java +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SecurityGroupApiLiveTest.java @@ -21,7 +21,6 @@ import com.google.common.collect.Iterables; import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiLiveTest; import org.jclouds.aliyun.ecs.domain.IpProtocol; import org.jclouds.aliyun.ecs.domain.Permission; -import org.jclouds.aliyun.ecs.domain.internal.Regions; import org.jclouds.aliyun.ecs.domain.SecurityGroup; import org.jclouds.aliyun.ecs.domain.SecurityGroupRequest; import org.jclouds.aliyun.ecs.domain.options.CreateSecurityGroupOptions; @@ -46,7 +45,7 @@ public class SecurityGroupApiLiveTest extends BaseECSComputeServiceApiLiveTest { @BeforeClass public void setUp() { - SecurityGroupRequest request = api().create(Regions.EU_CENTRAL_1.getName(), + SecurityGroupRequest request = api().create(TEST_REGION, CreateSecurityGroupOptions.Builder .securityGroupName("jclouds-test") ); @@ -56,24 +55,24 @@ public class SecurityGroupApiLiveTest extends BaseECSComputeServiceApiLiveTest { @AfterClass public void tearDown() { if (securityGroupId != null) { - api().delete(Regions.EU_CENTRAL_1.getName(), securityGroupId); + api().delete(TEST_REGION, securityGroupId); } } public void testAddRules() { - api().addInboundRule(Regions.EU_CENTRAL_1.getName(), securityGroupId, IpProtocol.TCP, TEST_PORT_RANGE, INTERNET); + api().addInboundRule(TEST_REGION, securityGroupId, IpProtocol.TCP, TEST_PORT_RANGE, INTERNET); } @Test(groups = "live", dependsOnMethods = "testAddRules") public void testGet() { - Permission permission = Iterables.getOnlyElement(api().get(Regions.EU_CENTRAL_1.getName(), securityGroupId)); + Permission permission = Iterables.getOnlyElement(api().get(TEST_REGION, securityGroupId)); checkPermission(permission); } @Test(groups = "live", dependsOnMethods = "testGet") public void testList() { final AtomicInteger found = new AtomicInteger(0); - assertTrue(Iterables.all(api().list(Regions.EU_CENTRAL_1.getName()).concat(), new Predicate<SecurityGroup>() { + assertTrue(Iterables.all(api().list(TEST_REGION).concat(), new Predicate<SecurityGroup>() { @Override public boolean apply(SecurityGroup input) { found.incrementAndGet(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SecurityGroupApiMockTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SecurityGroupApiMockTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SecurityGroupApiMockTest.java index 46aa76b..a7999a3 100644 --- a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SecurityGroupApiMockTest.java +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SecurityGroupApiMockTest.java @@ -18,7 +18,6 @@ package org.jclouds.aliyun.ecs.compute.features; import com.google.common.collect.ImmutableMap; import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiMockTest; -import org.jclouds.aliyun.ecs.domain.internal.Regions; import org.jclouds.aliyun.ecs.domain.SecurityGroup; import org.testng.annotations.Test; @@ -35,35 +34,35 @@ public class SecurityGroupApiMockTest extends BaseECSComputeServiceApiMockTest { public void testListSecurityGroups() throws InterruptedException { server.enqueue(jsonResponse("/securitygroups-first.json")); server.enqueue(jsonResponse("/securitygroups-last.json")); - Iterable<SecurityGroup> securitygroups = api.securityGroupApi().list(Regions.EU_CENTRAL_1.getName()).concat(); + Iterable<SecurityGroup> securitygroups = api.securityGroupApi().list(TEST_REGION).concat(); assertEquals(size(securitygroups), 7); // Force the PagedIterable to advance assertEquals(server.getRequestCount(), 2); - assertSent(server, "GET", "DescribeSecurityGroups", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); - assertSent(server, "GET", "DescribeSecurityGroups", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName()), 2); + assertSent(server, "GET", "DescribeSecurityGroups", ImmutableMap.of("RegionId", TEST_REGION)); + assertSent(server, "GET", "DescribeSecurityGroups", ImmutableMap.of("RegionId", TEST_REGION), 2); } public void testListSecurityGroupsReturns404() throws InterruptedException { server.enqueue(response404()); - Iterable<SecurityGroup> securitygroups = api.securityGroupApi().list(Regions.EU_CENTRAL_1.getName()).concat(); + Iterable<SecurityGroup> securitygroups = api.securityGroupApi().list(TEST_REGION).concat(); assertTrue(isEmpty(securitygroups)); assertEquals(server.getRequestCount(), 1); - assertSent(server, "GET", "DescribeSecurityGroups", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); + assertSent(server, "GET", "DescribeSecurityGroups", ImmutableMap.of("RegionId", TEST_REGION)); } public void testListSecurityGroupsWithOptions() throws InterruptedException { server.enqueue(jsonResponse("/securitygroups-first.json")); - Iterable<SecurityGroup> securitygroups = api.securityGroupApi().list(Regions.EU_CENTRAL_1.getName(), paginationOptions(pageNumber(1).pageSize(5))); + Iterable<SecurityGroup> securitygroups = api.securityGroupApi().list(TEST_REGION, paginationOptions(pageNumber(1).pageSize(5))); assertEquals(size(securitygroups), 5); assertEquals(server.getRequestCount(), 1); - assertSent(server, "GET", "DescribeSecurityGroups", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName()), 1); + assertSent(server, "GET", "DescribeSecurityGroups", ImmutableMap.of("RegionId", TEST_REGION), 1); } public void testListSecurityGroupsWithOptionsReturns404() throws InterruptedException { server.enqueue(response404()); - Iterable<SecurityGroup> securitygroups = api.securityGroupApi().list(Regions.EU_CENTRAL_1.getName(), paginationOptions(pageNumber(2))); + Iterable<SecurityGroup> securitygroups = api.securityGroupApi().list(TEST_REGION, paginationOptions(pageNumber(2))); assertTrue(isEmpty(securitygroups)); assertEquals(server.getRequestCount(), 1); - assertSent(server, "GET", "DescribeSecurityGroups", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName()), 2); + assertSent(server, "GET", "DescribeSecurityGroups", ImmutableMap.of("RegionId", TEST_REGION), 2); } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SshKeyPairApiLiveTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SshKeyPairApiLiveTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SshKeyPairApiLiveTest.java index 85ceee5..632e06e 100644 --- a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SshKeyPairApiLiveTest.java +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SshKeyPairApiLiveTest.java @@ -21,9 +21,8 @@ import com.google.common.collect.Iterables; import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiLiveTest; import org.jclouds.aliyun.ecs.domain.KeyPair; import org.jclouds.aliyun.ecs.domain.KeyPairRequest; -import org.jclouds.aliyun.ecs.domain.internal.Regions; import org.jclouds.aliyun.ecs.features.SshKeyPairApi; -import org.jclouds.ssh.SshKeys; +import org.jclouds.compute.ComputeTestUtils; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -43,22 +42,22 @@ public class SshKeyPairApiLiveTest extends BaseECSComputeServiceApiLiveTest { @BeforeClass public void setUp() { - KeyPairRequest request = api().create(Regions.EU_CENTRAL_1.getName(), keyPairName); + KeyPairRequest request = api().create(TEST_REGION, keyPairName); assertNotNull(request.getRequestId()); } @AfterClass public void tearDown() { if (keyPairName != null) { - api().delete(Regions.EU_CENTRAL_1.getName(), keyPairName); + api().delete(TEST_REGION, keyPairName); } } public void testImport() { String importedKeyPairName = keyPairName + new Random().nextInt(1024); KeyPair imported = api().importKeyPair( - Regions.EU_CENTRAL_1.getName(), - SshKeys.generate().get("public"), + TEST_REGION, + ComputeTestUtils.setupKeyPair().get("public"), //SshKeys.generate().get("public"), importedKeyPairName); assertEquals(imported.name(), importedKeyPairName); assertNotNull(imported.privateKeyBody()); @@ -67,7 +66,7 @@ public class SshKeyPairApiLiveTest extends BaseECSComputeServiceApiLiveTest { public void testList() { final AtomicInteger found = new AtomicInteger(0); - assertTrue(Iterables.all(api().list(Regions.EU_CENTRAL_1.getName()).concat(), new Predicate<KeyPair>() { + assertTrue(Iterables.all(api().list(TEST_REGION).concat(), new Predicate<KeyPair>() { @Override public boolean apply(KeyPair input) { found.incrementAndGet(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SshKeyPairApiMockTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SshKeyPairApiMockTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SshKeyPairApiMockTest.java index 23c21ad..78f5a39 100644 --- a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SshKeyPairApiMockTest.java +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/SshKeyPairApiMockTest.java @@ -20,7 +20,6 @@ import com.google.common.collect.ImmutableMap; import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiMockTest; import org.jclouds.aliyun.ecs.domain.KeyPair; import org.jclouds.aliyun.ecs.domain.KeyPairRequest; -import org.jclouds.aliyun.ecs.domain.internal.Regions; import org.jclouds.aliyun.ecs.domain.Request; import org.jclouds.aliyun.ecs.domain.options.ListKeyPairsOptions; import org.jclouds.aliyun.ecs.domain.options.PaginationOptions; @@ -37,37 +36,37 @@ public class SshKeyPairApiMockTest extends BaseECSComputeServiceApiMockTest { public void testCreateSshKey() throws InterruptedException { server.enqueue(jsonResponse("/keypair-create-res.json")); - KeyPairRequest keyPairRequest = api.sshKeyPairApi().create(Regions.EU_CENTRAL_1.getName(), "jclouds"); + KeyPairRequest keyPairRequest = api.sshKeyPairApi().create(TEST_REGION, "jclouds"); assertEquals(keyPairRequest, objectFromResource("/keypair-create-res.json", KeyPairRequest.class)); assertEquals(server.getRequestCount(), 1); - assertSent(server, "POST", "CreateKeyPair", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); + assertSent(server, "POST", "CreateKeyPair", ImmutableMap.of("RegionId", TEST_REGION)); } public void testDeleteSshKey() throws InterruptedException { server.enqueue(jsonResponse("/keypair-delete-res.json")); - Request delete = api.sshKeyPairApi().delete(Regions.EU_CENTRAL_1.getName()); + Request delete = api.sshKeyPairApi().delete(TEST_REGION); assertEquals(delete, objectFromResource("/keypair-delete-res.json", Request.class)); assertEquals(server.getRequestCount(), 1); - assertSent(server, "POST", "DeleteKeyPairs", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); + assertSent(server, "POST", "DeleteKeyPairs", ImmutableMap.of("RegionId", TEST_REGION)); } public void testImportSshKey() throws InterruptedException { server.enqueue(jsonResponse("/keypair-import-res.json")); KeyPair keyPair = api.sshKeyPairApi().importKeyPair( - Regions.EU_CENTRAL_1.getName(), + TEST_REGION, "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCdgcoNzH4hCc0j3b4MuG503L/J54uyFvwCAOu8vSsYuLpJ4AEyEOv+T0SfdF605fK6GYXA16Rxk3lrPt7mfKGNtXR0Ripbv7Zc6PvCRorwgj/cjh/45miozjrkXAiHD1GFZycfbi4YsoWAqZj7W4mwtctmhrYM0FPdya2XoRpVy89N+A5Xo4Xtd6EZn6JGEKQM5+kF2aL3ggy0od/DqjuEVYwZoyTe1RgUTXZSU/Woh7WMhsRHbqd3eYz4s6ac8n8IJPGKtUaQeqUtH7OK6NRYXVypUrkqNlwdNYZAwrjXg/x5T3D+bo11LENASRt9OJ2OkmRSTqRxBeDkhnVauWK/", "jclouds" ); assertEquals(keyPair, objectFromResource("/keypair-import-res.json", KeyPair.class)); assertEquals(server.getRequestCount(), 1); - assertSent(server, "POST", "ImportKeyPair", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); + assertSent(server, "POST", "ImportKeyPair", ImmutableMap.of("RegionId", TEST_REGION)); } public void testListImages() throws InterruptedException { server.enqueue(jsonResponse("/keypairs-first.json")); server.enqueue(jsonResponse("/keypairs-last.json")); - Iterable<KeyPair> keypairs = api.sshKeyPairApi().list(Regions.EU_CENTRAL_1.getName()).concat(); + Iterable<KeyPair> keypairs = api.sshKeyPairApi().list(TEST_REGION).concat(); assertEquals(size(keypairs), 12); assertEquals(server.getRequestCount(), 2); assertSent(server, "GET", "DescribeKeyPairs"); @@ -76,7 +75,7 @@ public class SshKeyPairApiMockTest extends BaseECSComputeServiceApiMockTest { public void testListKeyPairsReturns404() { server.enqueue(response404()); - Iterable<KeyPair> keypairs = api.sshKeyPairApi().list(Regions.EU_CENTRAL_1.getName()).concat(); + Iterable<KeyPair> keypairs = api.sshKeyPairApi().list(TEST_REGION).concat(); assertTrue(isEmpty(keypairs)); assertEquals(server.getRequestCount(), 1); } @@ -84,7 +83,7 @@ public class SshKeyPairApiMockTest extends BaseECSComputeServiceApiMockTest { public void testListKeyPairsWithOptions() throws InterruptedException { server.enqueue(jsonResponse("/keypairs-first.json")); - IterableWithMarker<KeyPair> keypairs = api.sshKeyPairApi().list(Regions.EU_CENTRAL_1.getName(), ListKeyPairsOptions.Builder + IterableWithMarker<KeyPair> keypairs = api.sshKeyPairApi().list(TEST_REGION, ListKeyPairsOptions.Builder .paginationOptions(PaginationOptions.Builder.pageNumber(1))); assertEquals(size(keypairs), 10); @@ -96,7 +95,7 @@ public class SshKeyPairApiMockTest extends BaseECSComputeServiceApiMockTest { public void testListKeyPairsWithOptionsReturns404() throws InterruptedException { server.enqueue(response404()); - IterableWithMarker<KeyPair> keypairs = api.sshKeyPairApi().list(Regions.EU_CENTRAL_1.getName(), ListKeyPairsOptions.Builder + IterableWithMarker<KeyPair> keypairs = api.sshKeyPairApi().list(TEST_REGION, ListKeyPairsOptions.Builder .paginationOptions(PaginationOptions.Builder.pageNumber(2))); assertTrue(isEmpty(keypairs)); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/TagApiLiveTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/TagApiLiveTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/TagApiLiveTest.java index 854b494..cd07ae2 100644 --- a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/TagApiLiveTest.java +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/TagApiLiveTest.java @@ -18,7 +18,6 @@ package org.jclouds.aliyun.ecs.compute.features; import com.google.common.base.Predicate; import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiLiveTest; -import org.jclouds.aliyun.ecs.domain.internal.Regions; import org.jclouds.aliyun.ecs.domain.Request; import org.jclouds.aliyun.ecs.domain.SecurityGroupRequest; import org.jclouds.aliyun.ecs.domain.Tag; @@ -32,6 +31,7 @@ import org.testng.annotations.Test; import java.util.concurrent.atomic.AtomicInteger; +import static org.jclouds.aliyun.ecs.domain.ResourceType.SECURITYGROUP; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; @@ -40,38 +40,36 @@ import static org.testng.util.Strings.isNullOrEmpty; @Test(groups = "live", testName = "TagApiLiveTest") public class TagApiLiveTest extends BaseECSComputeServiceApiLiveTest { - public static final String RESOURCE_TYPE = "securitygroup"; - private String securityGroupName = "pre-test-security"; private String securityGroupId; @BeforeClass public void setUp() { - SecurityGroupRequest preRequisite = api.securityGroupApi().create(Regions.EU_CENTRAL_1.getName(), + SecurityGroupRequest preRequisite = api.securityGroupApi().create(TEST_REGION, CreateSecurityGroupOptions.Builder.securityGroupName(securityGroupName) ); securityGroupId = preRequisite.getSecurityGroupId(); - Request request = api().add(Regions.EU_CENTRAL_1.getName(), securityGroupId, RESOURCE_TYPE, + Request request = api().add(TEST_REGION, securityGroupId, SECURITYGROUP, TagOptions.Builder.tag(1, "owner")); assertNotNull(request.getRequestId()); } @AfterClass public void tearDown() { - api().remove(Regions.EU_CENTRAL_1.getName(), securityGroupId, RESOURCE_TYPE); + api().remove(TEST_REGION, securityGroupId, SECURITYGROUP); if (securityGroupId != null) { - api.securityGroupApi().delete(Regions.EU_CENTRAL_1.getName(), securityGroupId); + api.securityGroupApi().delete(TEST_REGION, securityGroupId); } } public void testList() { final AtomicInteger found = new AtomicInteger(0); - assertFalse(api().list(Regions.EU_CENTRAL_1.getName(), ListTagsOptions.Builder.resourceId(securityGroupId)) + assertFalse(api().list(TEST_REGION, ListTagsOptions.Builder.resourceId(securityGroupId)) .filter(new Predicate<Tag>() { @Override public boolean apply(Tag input) { found.incrementAndGet(); - return !isNullOrEmpty(input.tagKey()); + return !isNullOrEmpty(input.key()); } }).isEmpty(), "All tags must have the 'key' field populated"); assertTrue(found.get() > 0, "Expected some tags to be returned"); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/TagApiMockTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/TagApiMockTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/TagApiMockTest.java index deb492d..350a218 100644 --- a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/TagApiMockTest.java +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/TagApiMockTest.java @@ -18,7 +18,6 @@ package org.jclouds.aliyun.ecs.compute.features; import com.google.common.collect.ImmutableMap; import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiMockTest; -import org.jclouds.aliyun.ecs.domain.internal.Regions; import org.jclouds.aliyun.ecs.domain.Tag; import org.testng.annotations.Test; @@ -35,35 +34,35 @@ public class TagApiMockTest extends BaseECSComputeServiceApiMockTest { public void testListTags() throws InterruptedException { server.enqueue(jsonResponse("/tags-first.json")); server.enqueue(jsonResponse("/tags-last.json")); - Iterable<Tag> tags = api.tagApi().list(Regions.EU_CENTRAL_1.getName()).concat(); + Iterable<Tag> tags = api.tagApi().list(TEST_REGION).concat(); assertEquals(size(tags), 10); // Force the PagedIterable to advance assertEquals(server.getRequestCount(), 2); - assertSent(server, "GET", "DescribeTags", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); - assertSent(server, "GET", "DescribeTags", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName()), 2); + assertSent(server, "GET", "DescribeTags", ImmutableMap.of("RegionId", TEST_REGION)); + assertSent(server, "GET", "DescribeTags", ImmutableMap.of("RegionId", TEST_REGION), 2); } public void testListTagsReturns404() throws InterruptedException { server.enqueue(response404()); - Iterable<Tag> tags = api.tagApi().list(Regions.EU_CENTRAL_1.getName()).concat(); + Iterable<Tag> tags = api.tagApi().list(TEST_REGION).concat(); assertTrue(isEmpty(tags)); assertEquals(server.getRequestCount(), 1); - assertSent(server, "GET", "DescribeTags", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName())); + assertSent(server, "GET", "DescribeTags", ImmutableMap.of("RegionId", TEST_REGION)); } public void testListTagsWithOptions() throws InterruptedException { server.enqueue(jsonResponse("/tags-first.json")); - Iterable<Tag> tags = api.tagApi().list(Regions.EU_CENTRAL_1.getName(), paginationOptions(pageNumber(1).pageSize(5))); + Iterable<Tag> tags = api.tagApi().list(TEST_REGION, paginationOptions(pageNumber(1).pageSize(5))); assertEquals(size(tags), 8); assertEquals(server.getRequestCount(), 1); - assertSent(server, "GET", "DescribeTags", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName()), 1); + assertSent(server, "GET", "DescribeTags", ImmutableMap.of("RegionId", TEST_REGION), 1); } public void testListTagsWithOptionsReturns404() throws InterruptedException { server.enqueue(response404()); - Iterable<Tag> tags = api.tagApi().list(Regions.EU_CENTRAL_1.getName(), paginationOptions(pageNumber(2))); + Iterable<Tag> tags = api.tagApi().list(TEST_REGION, paginationOptions(pageNumber(2))); assertTrue(isEmpty(tags)); assertEquals(server.getRequestCount(), 1); - assertSent(server, "GET", "DescribeTags", ImmutableMap.of("RegionId", Regions.EU_CENTRAL_1.getName()), 2); + assertSent(server, "GET", "DescribeTags", ImmutableMap.of("RegionId", TEST_REGION), 2); } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VPCApiLiveTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VPCApiLiveTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VPCApiLiveTest.java new file mode 100644 index 0000000..8d2639e --- /dev/null +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VPCApiLiveTest.java @@ -0,0 +1,89 @@ +/* + * 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.aliyun.ecs.compute.features; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiLiveTest; +import org.jclouds.aliyun.ecs.domain.VPC; +import org.jclouds.aliyun.ecs.domain.VPCRequest; +import org.jclouds.aliyun.ecs.domain.options.CreateVPCOptions; +import org.jclouds.aliyun.ecs.domain.options.ListVPCsOptions; +import org.jclouds.aliyun.ecs.features.VPCApi; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.concurrent.atomic.AtomicInteger; + +import static org.jclouds.aliyun.ecs.domain.options.PaginationOptions.Builder.pageSize; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; +import static org.testng.util.Strings.isNullOrEmpty; + +@Test(groups = "live", testName = "VPCApiLiveTest") +public class VPCApiLiveTest extends BaseECSComputeServiceApiLiveTest { + + public static final String VPC_NAME = "jclouds-vpc"; + + private String vpcId; + + @BeforeClass + public void setUp() { + VPCRequest vpcRequest = api().create(TEST_REGION, CreateVPCOptions.Builder.vpcName(VPC_NAME)); + assertNotNull(vpcRequest.getRequestId()); + assertNotNull(vpcRequest.getVpcId()); + vpcId = vpcRequest.getVpcId(); + } + + @AfterClass(alwaysRun = true) + public void tearDown() { + if (vpcId != null) { + assertNotNull(api().delete(TEST_REGION, vpcId)); + } + } + + public void testList() { + final AtomicInteger found = new AtomicInteger(0); + assertTrue(Iterables.all(api().list(TEST_REGION).concat(), new Predicate<VPC>() { + @Override + public boolean apply(VPC input) { + found.incrementAndGet(); + return !isNullOrEmpty(input.id()); + } + }), "All vpcs must have at least the 'id' field populated"); + assertTrue(found.get() > 0, "Expected some vpc to be returned"); + } + + public void testListWithOptions() { + final AtomicInteger found = new AtomicInteger(0); + assertTrue(api().list(TEST_REGION, ListVPCsOptions.Builder.vpcId(vpcId) + .paginationOptions(pageSize(50))) + .firstMatch(new Predicate<VPC>() { + @Override + public boolean apply(VPC input) { + found.incrementAndGet(); + return !isNullOrEmpty(input.id()); + } + }).isPresent(), "All vpcs must have the 'id' field populated"); + assertTrue(found.get() > 0, "Expected some image to be returned"); + } + + private VPCApi api() { + return api.vpcApi(); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VPCApiMockTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VPCApiMockTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VPCApiMockTest.java new file mode 100644 index 0000000..80de7f3 --- /dev/null +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VPCApiMockTest.java @@ -0,0 +1,87 @@ +/* + * 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.aliyun.ecs.compute.features; + +import com.google.common.collect.ImmutableMap; +import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiMockTest; +import org.jclouds.aliyun.ecs.domain.Request; +import org.jclouds.aliyun.ecs.domain.VPC; +import org.jclouds.aliyun.ecs.domain.VPCRequest; +import org.jclouds.collect.IterableWithMarker; +import org.testng.annotations.Test; + +import static com.google.common.collect.Iterables.isEmpty; +import static com.google.common.collect.Iterables.size; +import static org.jclouds.aliyun.ecs.domain.options.ListVPCsOptions.Builder.paginationOptions; +import static org.jclouds.aliyun.ecs.domain.options.PaginationOptions.Builder.pageNumber; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +@Test(groups = "unit", testName = "VPCApiMockTest", singleThreaded = true) +public class VPCApiMockTest extends BaseECSComputeServiceApiMockTest { + + public void testListVPCs() throws InterruptedException { + server.enqueue(jsonResponse("/vpcs-first.json")); + server.enqueue(jsonResponse("/vpcs-last.json")); + Iterable<VPC> vpcs = api.vpcApi().list(TEST_REGION).concat(); + assertEquals(size(vpcs), 2); // Force the PagedIterable to advance + assertEquals(server.getRequestCount(), 2); + assertSent(server, "GET", "DescribeVpcs", ImmutableMap.of("RegionId", TEST_REGION)); + assertSent(server, "GET", "DescribeVpcs", ImmutableMap.of("RegionId", TEST_REGION), 2); + } + + public void testListVPCsReturns404() throws InterruptedException { + server.enqueue(response404()); + Iterable<VPC> vpcs = api.vpcApi().list(TEST_REGION).concat(); + assertTrue(isEmpty(vpcs)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeVpcs", ImmutableMap.of("RegionId", TEST_REGION)); + } + + public void testListVPCsWithOptions() throws InterruptedException { + server.enqueue(jsonResponse("/vpcs-first.json")); + IterableWithMarker<VPC> vpcs = api.vpcApi().list(TEST_REGION, paginationOptions(pageNumber(1).pageSize(5))); + assertEquals(size(vpcs), 1); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeVpcs", ImmutableMap.of("RegionId", TEST_REGION), 1); + } + + public void testListVPCsWithOptionsReturns404() throws InterruptedException { + server.enqueue(response404()); + Iterable<VPC> vpcs = api.vpcApi().list(TEST_REGION, paginationOptions(pageNumber(2))); + assertTrue(isEmpty(vpcs)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeVpcs", ImmutableMap.of("RegionId", TEST_REGION), 2); + } + + public void testCreateVPC() throws InterruptedException { + server.enqueue(jsonResponse("/vpc-create-res.json")); + VPCRequest vpcRequest = api.vpcApi().create(TEST_REGION); + assertEquals(vpcRequest, objectFromResource("/vpc-create-res.json", VPCRequest.class)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "POST", "CreateVpc", ImmutableMap.of("RegionId", TEST_REGION)); + } + + public void testDeleteVPC() throws InterruptedException { + server.enqueue(jsonResponse("/vpc-delete-res.json")); + Request delete = api.vpcApi().delete(TEST_REGION, "vpc-123456789"); + assertEquals(delete, objectFromResource("/vpc-delete-res.json", Request.class)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "POST", "DeleteVpc", ImmutableMap.of("RegionId", TEST_REGION, "VpcId", "vpc-123456789")); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VSwitchApiLiveTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VSwitchApiLiveTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VSwitchApiLiveTest.java new file mode 100644 index 0000000..c7abc40 --- /dev/null +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VSwitchApiLiveTest.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.aliyun.ecs.compute.features; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiLiveTest; +import org.jclouds.aliyun.ecs.domain.VPCRequest; +import org.jclouds.aliyun.ecs.domain.VSwitch; +import org.jclouds.aliyun.ecs.domain.VSwitchRequest; +import org.jclouds.aliyun.ecs.domain.options.CreateVSwitchOptions; +import org.jclouds.aliyun.ecs.domain.options.ListVSwitchesOptions; +import org.jclouds.aliyun.ecs.features.VSwitchApi; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.concurrent.atomic.AtomicInteger; + +import static org.jclouds.aliyun.ecs.domain.options.PaginationOptions.Builder.pageSize; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; +import static org.testng.util.Strings.isNullOrEmpty; + +@Test(groups = "live", testName = "VSwitchApiLiveTest") +public class VSwitchApiLiveTest extends BaseECSComputeServiceApiLiveTest { + + public static final String VSWITCH_NAME = "jclouds-vswitch"; + public static final String DEFAULT_CIDR_BLOCK = "172.16.1.0/24"; + private String vpcId; + private String vSwitchId; + + @BeforeClass + public void setUp() { + VPCRequest preRequisite = api.vpcApi().create(TEST_REGION); + vpcId = preRequisite.getVpcId(); + VSwitchRequest vpcRequest = api().create( + TEST_ZONE, + DEFAULT_CIDR_BLOCK, + vpcId, + CreateVSwitchOptions.Builder.vSwitchName(VSWITCH_NAME)); + assertNotNull(vpcRequest.getRequestId()); + assertNotNull(vpcRequest.getVSwitchId()); + vSwitchId = vpcRequest.getVSwitchId(); + } + + @AfterClass(alwaysRun = true) + public void tearDown() { + if (vSwitchId != null) { + assertNotNull(api().delete(TEST_REGION, vSwitchId)); + } + if (vpcId != null) { + assertNotNull(api.vpcApi().delete(TEST_REGION, vpcId)); + } + } + + public void testList() { + final AtomicInteger found = new AtomicInteger(0); + assertTrue(Iterables.all(api().list(TEST_REGION).concat(), new Predicate<VSwitch>() { + @Override + public boolean apply(VSwitch input) { + found.incrementAndGet(); + return !isNullOrEmpty(input.id()); + } + }), "All vSwitches must have at least the 'id' field populated"); + assertTrue(found.get() > 0, "Expected some vSwitch to be returned"); + } + + public void testListWithOptions() { + final AtomicInteger found = new AtomicInteger(0); + assertTrue(api().list(TEST_REGION, ListVSwitchesOptions.Builder.vSwitchId(vSwitchId) + .paginationOptions(pageSize(50))) + .firstMatch(new Predicate<VSwitch>() { + @Override + public boolean apply(VSwitch input) { + found.incrementAndGet(); + return !isNullOrEmpty(input.id()); + } + }).isPresent(), "All vSwitches must have at least the 'id' field populated"); + assertTrue(found.get() > 0, "Expected some vSwitch to be returned"); + } + + private VSwitchApi api() { + return api.vSwitchApi(); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VSwitchApiMockTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VSwitchApiMockTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VSwitchApiMockTest.java new file mode 100644 index 0000000..b80111d --- /dev/null +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/features/VSwitchApiMockTest.java @@ -0,0 +1,87 @@ +/* + * 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.aliyun.ecs.compute.features; + +import com.google.common.collect.ImmutableMap; +import org.jclouds.aliyun.ecs.compute.internal.BaseECSComputeServiceApiMockTest; +import org.jclouds.aliyun.ecs.domain.Request; +import org.jclouds.aliyun.ecs.domain.VSwitch; +import org.jclouds.aliyun.ecs.domain.VSwitchRequest; +import org.jclouds.collect.IterableWithMarker; +import org.testng.annotations.Test; + +import static com.google.common.collect.Iterables.isEmpty; +import static com.google.common.collect.Iterables.size; +import static org.jclouds.aliyun.ecs.domain.options.ListVSwitchesOptions.Builder.paginationOptions; +import static org.jclouds.aliyun.ecs.domain.options.PaginationOptions.Builder.pageNumber; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +@Test(groups = "unit", testName = "VSwitchApiMockTest", singleThreaded = true) +public class VSwitchApiMockTest extends BaseECSComputeServiceApiMockTest { + + public void testListVSwitches() throws InterruptedException { + server.enqueue(jsonResponse("/vswitches-first.json")); + server.enqueue(jsonResponse("/vswitches-last.json")); + Iterable<VSwitch> vSwitches = api.vSwitchApi().list(TEST_REGION).concat(); + assertEquals(size(vSwitches), 2); // Force the PagedIterable to advance + assertEquals(server.getRequestCount(), 2); + assertSent(server, "GET", "DescribeVSwitches", ImmutableMap.of("RegionId", TEST_REGION)); + assertSent(server, "GET", "DescribeVSwitches", ImmutableMap.of("RegionId", TEST_REGION), 2); + } + + public void testListVSwitchesReturns404() throws InterruptedException { + server.enqueue(response404()); + Iterable<VSwitch> vSwitches = api.vSwitchApi().list(TEST_REGION).concat(); + assertTrue(isEmpty(vSwitches)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeVSwitches", ImmutableMap.of("RegionId", TEST_REGION)); + } + + public void testListVSwitchesWithOptions() throws InterruptedException { + server.enqueue(jsonResponse("/vswitches-first.json")); + IterableWithMarker<VSwitch> vSwitches = api.vSwitchApi().list(TEST_REGION, paginationOptions(pageNumber(1).pageSize(5))); + assertEquals(size(vSwitches), 1); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeVSwitches", ImmutableMap.of("RegionId", TEST_REGION), 1); + } + + public void testListVSwitchesWithOptionsReturns404() throws InterruptedException { + server.enqueue(response404()); + IterableWithMarker<VSwitch> vSwitches = api.vSwitchApi().list(TEST_REGION, paginationOptions(pageNumber(2))); + assertTrue(isEmpty(vSwitches)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "DescribeVSwitches", ImmutableMap.of("RegionId", TEST_REGION), 2); + } + + public void testCreateVSwitch() throws InterruptedException { + server.enqueue(jsonResponse("/vswitch-create-res.json")); + VSwitchRequest vSwitchRequest = api.vSwitchApi().create(TEST_ZONE, "192.168.1.0/24", "vsw-25naue4gz"); + assertEquals(vSwitchRequest, objectFromResource("/vswitch-create-res.json", VSwitchRequest.class)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "POST", "CreateVSwitch", ImmutableMap.of("ZoneId", TEST_ZONE, "CidrBlock", "192.168.1.0/24", "VpcId", "vsw-25naue4gz")); + } + + public void testDeletVSwitch() throws InterruptedException { + server.enqueue(jsonResponse("/vswitch-delete-res.json")); + Request delete = api.vSwitchApi().delete(TEST_REGION, "vsw-123456789"); + assertEquals(delete, objectFromResource("/vswitch-delete-res.json", Request.class)); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "POST", "DeleteVSwitch", ImmutableMap.of("RegionId", TEST_REGION, "VSwitchId", "vsw-123456789")); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/ImageInRegionToImageTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/ImageInRegionToImageTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/ImageInRegionToImageTest.java new file mode 100644 index 0000000..c9cf1ab --- /dev/null +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/ImageInRegionToImageTest.java @@ -0,0 +1,141 @@ +/* + * 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.aliyun.ecs.compute.functions; + +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import org.jclouds.aliyun.ecs.domain.DiskDeviceMapping; +import org.jclouds.aliyun.ecs.domain.Tag; +import org.jclouds.aliyun.ecs.domain.internal.Regions; +import org.jclouds.aliyun.ecs.domain.regionscoped.ImageInRegion; +import org.jclouds.compute.domain.Image; +import org.jclouds.domain.Location; +import org.jclouds.domain.LocationBuilder; +import org.jclouds.domain.LocationScope; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import javax.xml.bind.DatatypeConverter; +import java.util.Date; +import java.util.List; +import java.util.Set; + +import static org.jclouds.aliyun.ecs.domain.Image.Status.AVAILABLE; +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertTrue; + +@Test(groups = "unit", testName = "ImageInRegionToImageTest") +public class ImageInRegionToImageTest { + + private final Location region = new LocationBuilder() + .id(Regions.EU_CENTRAL_1.getName()) + .description(Regions.EU_CENTRAL_1.getDescription()) + .scope(LocationScope.REGION).build(); + private final Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet.of(region)); + + private ImageInRegionToImage imageInRegionToImage; + + @BeforeMethod + public void setUp() { + imageInRegionToImage = new ImageInRegionToImage(locations); + } + + @Test + public void testOsImageToImage() { + final org.jclouds.aliyun.ecs.domain.Image ecsImage = org.jclouds.aliyun.ecs.domain.Image.builder() + .id("centos_6_09_64_20G_alibase_20180326.vhd") + .description("") + .productCode("") + .osType("linux") + .architecture("x86_64") + .osName("CentOS 6.9 64ä½") + .imageOwnerAlias("system") + .progress("100%") + .isSupportCloudinit(true) + .usage("instance") + .creationTime(parseDate("2018-05-10T12:40:55Z")) + .imageVersion("") + .status(AVAILABLE) + .name("centos_6_09_64_20G_alibase_20180326.vhd") + .isSupportIoOptimizeds(true) + .isCopied(false) + .isSubscribed(false) + .isSelfShared(false) + .platform("CentOS") + .size(20) + .diskDeviceMappings(ImmutableMap.<String, List<DiskDeviceMapping>>of()) + .tags(ImmutableMap.<String, List<Tag>>of()) + .build(); + + final Image image = imageInRegionToImage.apply(ImageInRegion.create(Regions.EU_CENTRAL_1.getName(), ecsImage)); + assertEquals(ecsImage.id(), image.getProviderId()); + assertEquals(ecsImage.name(), image.getName()); + assertEquals(Image.Status.AVAILABLE, image.getStatus()); + final org.jclouds.compute.domain.OperatingSystem operatingSystem = image.getOperatingSystem(); + + assertEquals(ecsImage.osName(), operatingSystem.getName()); + assertEquals(ecsImage.description(), operatingSystem.getDescription()); + assertTrue(operatingSystem.is64Bit()); + assertEquals(region, image.getLocation()); + } + + @Test + public void testOsImageFromOtherOSMapToImage() { + final org.jclouds.aliyun.ecs.domain.Image ecsImage = org.jclouds.aliyun.ecs.domain.Image.builder() + .id("alinux_17_01_64_20G_cloudinit_20171222.vhd") + .description("") + .productCode("") + .osType("linux") + .architecture("x86_64") + .osName("Aliyun Linux 17.1 64ä½") + .imageOwnerAlias("system") + .progress("100%") + .isSupportCloudinit(true) + .usage("instance") + .creationTime(parseDate("2017-12-22T05:56:16Z")) + .imageVersion("") + .status(AVAILABLE) + .name("alinux_17_01_64_20G_cloudinit_20171222.vhd") + .isSupportIoOptimizeds(true) + .isCopied(false) + .isSubscribed(false) + .isSelfShared(false) + .platform("Aliyun") + .size(20) + .diskDeviceMappings(ImmutableMap.<String, List<DiskDeviceMapping>>of()) + .tags(ImmutableMap.<String, List<Tag>>of()) + .build(); + + final Image image = imageInRegionToImage.apply(ImageInRegion.create(Regions.EU_CENTRAL_1.getName(), ecsImage)); + assertEquals(ecsImage.id(), image.getProviderId()); + assertEquals(ecsImage.name(), image.getName()); + assertEquals(Image.Status.AVAILABLE, image.getStatus()); + final org.jclouds.compute.domain.OperatingSystem operatingSystem = image.getOperatingSystem(); + + assertEquals(ecsImage.osName(), operatingSystem.getName()); + assertEquals(ecsImage.description(), operatingSystem.getDescription()); + assertTrue(operatingSystem.is64Bit()); + assertEquals(region, image.getLocation()); + } + + Date parseDate(final String dateString) { + return DatatypeConverter.parseDateTime(dateString).getTime(); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/InstanceStatusToStatusTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/InstanceStatusToStatusTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/InstanceStatusToStatusTest.java new file mode 100644 index 0000000..62f22e5 --- /dev/null +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/InstanceStatusToStatusTest.java @@ -0,0 +1,58 @@ +/* + * 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.aliyun.ecs.compute.functions; + +import org.jclouds.aliyun.ecs.domain.Instance; +import org.jclouds.compute.domain.NodeMetadata; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import static org.testng.Assert.assertEquals; + +/** + * Unit tests for the {@link InstanceStatusToStatus} class. + */ +@Test(groups = "unit", testName = "InstanceStatusToStatusTest") +public class InstanceStatusToStatusTest { + private InstanceStatusToStatus function; + + @BeforeMethod + public void setup() { + function = new InstanceStatusToStatus(); + } + + public void testStatusRunningToStatusRunning() { + NodeMetadata.Status status = function.apply(Instance.Status.RUNNING); + assertEquals(status, NodeMetadata.Status.RUNNING); + } + + public void testStatusStartingToStatusPending() { + NodeMetadata.Status status = function.apply(Instance.Status.STARTING); + assertEquals(status, NodeMetadata.Status.PENDING); + } + + public void testStatusStoppingToStatusPending() { + NodeMetadata.Status status = function.apply(Instance.Status.STOPPING); + assertEquals(status, NodeMetadata.Status.PENDING); + } + + public void testStatusStoppedToStatusSuspended() { + NodeMetadata.Status status = function.apply(Instance.Status.STOPPED); + assertEquals(status, NodeMetadata.Status.SUSPENDED); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/2c7db7e8/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/InstanceToHardwareTest.java ---------------------------------------------------------------------- diff --git a/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/InstanceToHardwareTest.java b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/InstanceToHardwareTest.java new file mode 100644 index 0000000..910703c --- /dev/null +++ b/aliyun-ecs/src/test/java/org/jclouds/aliyun/ecs/compute/functions/InstanceToHardwareTest.java @@ -0,0 +1,61 @@ +/* + * 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.aliyun.ecs.compute.functions; + +import org.jclouds.aliyun.ecs.domain.InstanceType; +import org.jclouds.compute.domain.Hardware; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import static org.testng.AssertJUnit.assertEquals; + +@Test(groups = "unit", testName = "InstanceToHardwareTest") +public class InstanceToHardwareTest { + + private InstanceTypeToHardware instanceTypeToHardware; + + @BeforeMethod + public void setUp() { + instanceTypeToHardware = new InstanceTypeToHardware(); + } + + @Test + public void testApplyServer() { + final InstanceType instanceType = InstanceType.builder() + .id("ecs.t1.small") + .cpuCoreCount(1) + .instanceTypeFamily("ecs.t1") + .eniQuantity(1) + .memorySize(1.0) + .gpuAmount(0d) + .localStorageCategory("") + .gpuSpec("") + .build(); + applyAndAssert(instanceType); + } + + private void applyAndAssert(InstanceType instanceType) { + final Hardware hardware = instanceTypeToHardware.apply(instanceType); + assertEquals(instanceType.memorySize().intValue() * 1024, hardware.getRam()); + assertEquals(instanceType.id(), hardware.getId()); + assertEquals(instanceType.id(), hardware.getProviderId()); + assertEquals(instanceType.id(), hardware.getName()); + assertEquals(instanceType.cpuCoreCount().intValue(), hardware.getProcessors().size()); + assertEquals(Double.valueOf(instanceType.cpuCoreCount().intValue()), hardware.getProcessors().get(0).getCores()); + } + +}
