Repository: jclouds Updated Branches: refs/heads/2.0.x df5427f77 -> a9cc10c49
http://git-wip-us.apache.org/repos/asf/jclouds/blob/a9cc10c4/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSecurityGroupApiMockTest.java ---------------------------------------------------------------------- diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSecurityGroupApiMockTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSecurityGroupApiMockTest.java new file mode 100644 index 0000000..4d6b382 --- /dev/null +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSecurityGroupApiMockTest.java @@ -0,0 +1,270 @@ +/* + * 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.aws.ec2.features; + +import static org.testng.Assert.assertEquals; + +import java.util.Set; + +import org.jclouds.aws.ec2.internal.BaseAWSEC2ApiMockTest; +import org.jclouds.aws.ec2.options.CreateSecurityGroupOptions; +import org.jclouds.ec2.domain.SecurityGroup; +import org.jclouds.net.domain.IpPermission; +import org.jclouds.net.domain.IpProtocol; +import org.testng.annotations.Test; + +import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.squareup.okhttp.mockwebserver.MockResponse; + +@Test(groups = "unit", testName = "AWSSecurityGroupApiMockTest", singleThreaded = true) +public class AWSSecurityGroupApiMockTest extends BaseAWSEC2ApiMockTest { + + private final String describeSecurityGroupsResponse = Joiner.on("\n").join( + "<DescribeSecurityGroupsResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-11-15/\">", + " <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>", + " <securityGroupInfo>", + " <item>", + " <ownerId>123456789012</ownerId>", + " <groupId>sg-1a2b3c4d</groupId>", + " <groupName>WebServers</groupName>", + " <groupDescription>Web Servers</groupDescription>", + " <vpcId>vpc-614cc409</vpcId>", + " <ipPermissions>", + " <item>", + " <ipProtocol>-1</ipProtocol>", + " <groups>", + " <item>", + " <userId>123456789012</userId>", + " <groupId>sg-af8661c0</groupId>", + " </item>", + " </groups>", + " <ipRanges/>", + " <prefixListIds/>", + " </item>", + " <item>", + " <ipProtocol>tcp</ipProtocol>", + " <fromPort>22</fromPort>", + " <toPort>22</toPort>", + " <groups/>", + " <ipRanges>", + " <item>", + " <cidrIp>204.246.162.38/32</cidrIp>", + " </item>", + " </ipRanges>", + " <prefixListIds/>", + " </item>", + " </ipPermissions>", + " <ipPermissionsEgress>", + " <item>", + " <ipProtocol>-1</ipProtocol>", + " <groups/>", + " <ipRanges>", + " <item>", + " <cidrIp>0.0.0.0/0</cidrIp>", + " </item>", + " </ipRanges>", + " <prefixListIds/>", + " </item>", + " </ipPermissionsEgress>", + " </item>", + " </securityGroupInfo>", + "</DescribeSecurityGroupsResponse>"); + + private final String createSecurityGroupResponse = Joiner.on("\n").join( + "<CreateSecurityGroupResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-11-15/\">", + " <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>", + " <return>true</return>", + " <groupId>sg-0a42d66a</groupId>", + "</CreateSecurityGroupResponse>"); + + private final String authorizeSecurityGroupIngressResponse = Joiner.on("\n").join( + "<AuthorizeSecurityGroupIngressResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-11-15/\">", + " <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>", + " <return>true</return>", + "</AuthorizeSecurityGroupIngressResponse>"); + + private final String revokeSecurityGroupIngressResponse = Joiner.on("\n").join( + "<RevokeSecurityGroupIngressResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-11-15/\">", + " <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>", + " <return>true</return>", + "</RevokeSecurityGroupIngressResponse>"); + + private final String deleteSecurityGroupResponse = Joiner.on("\n").join( + "<DeleteSecurityGroupResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-11-15/\">", + " <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>", + " <return>true</return>", + "</DeleteSecurityGroupResponse>"); + + @SuppressWarnings("deprecation") + public void describeSecurityGroups() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody(describeSecurityGroupsResponse)); + + Set<SecurityGroup> results = securityGroupApi().describeSecurityGroupsInRegion(DEFAULT_REGION); + SecurityGroup result = Iterables.getOnlyElement(results); + assertEquals(result.getId(), "sg-1a2b3c4d"); + assertEquals(result.getRegion(), "us-east-1"); + assertEquals(result.getName(), "WebServers"); + assertEquals(result.getOwnerId(), "123456789012"); + assertEquals(result.getDescription(), "Web Servers"); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DescribeSecurityGroups"); + } + + public void describeSecurityGroupsGiving404() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setResponseCode(404)); + + Set<SecurityGroup> results = securityGroupApi().describeSecurityGroupsInRegion(DEFAULT_REGION); + assertEquals(results, ImmutableSet.of()); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DescribeSecurityGroups"); + } + + public void describeSecurityGroupsById() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody(describeSecurityGroupsResponse)); + + Set<SecurityGroup> results = securityGroupApi().describeSecurityGroupsInRegionById(DEFAULT_REGION, "sg-1a2b3c4d"); + SecurityGroup result = Iterables.getOnlyElement(results); + assertEquals(result.getId(), "sg-1a2b3c4d"); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DescribeSecurityGroups&GroupId.1=sg-1a2b3c4d"); + } + + public void describeSecurityGroupsByName() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody(describeSecurityGroupsResponse)); + + Set<SecurityGroup> results = securityGroupApi().describeSecurityGroupsInRegion(DEFAULT_REGION, "WebServers"); + SecurityGroup result = Iterables.getOnlyElement(results); + assertEquals(result.getId(), "sg-1a2b3c4d"); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DescribeSecurityGroups&GroupName.1=WebServers"); + } + + public void describeSecurityGroupsFiltered() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody(describeSecurityGroupsResponse)); + + Set<SecurityGroup> results = securityGroupApi().describeSecurityGroupsInRegionWithFilter(DEFAULT_REGION, + ImmutableMultimap.of("group-name", "WebServers", "vpc-id", "vpc-614cc409")); + SecurityGroup result = Iterables.getOnlyElement(results); + assertEquals(result.getId(), "sg-1a2b3c4d"); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DescribeSecurityGroups&Filter.1.Name=group-name&Filter.1.Value.1=WebServers&Filter.2.Name=vpc-id&Filter.2.Value.1=vpc-614cc409"); + } + + public void describeSecurityGroupsDifferentRegion() throws Exception { + String region = "us-west-2"; + enqueueRegions(DEFAULT_REGION, region); + enqueue(region, new MockResponse().setBody(describeSecurityGroupsResponse)); + + Set<SecurityGroup> results = securityGroupApi().describeSecurityGroupsInRegion(region); + SecurityGroup result = Iterables.getOnlyElement(results); + assertEquals(result.getId(), "sg-1a2b3c4d"); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(region, "Action=DescribeSecurityGroups"); + } + + public void createSecurityGroupsInRegionAndReturnId() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody(createSecurityGroupResponse)); + + String result = securityGroupApi().createSecurityGroupInRegionAndReturnId(DEFAULT_REGION, "WebServers", "Web Servers", CreateSecurityGroupOptions.Builder.vpcId("vpc-614cc409")); + assertEquals(result, "sg-0a42d66a"); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=CreateSecurityGroup&GroupName=WebServers&GroupDescription=Web%20Servers&VpcId=vpc-614cc409"); + } + + public void authorizeSecurityGroupIngress() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody(authorizeSecurityGroupIngressResponse)); + + IpPermission perm = IpPermission.builder().ipProtocol(IpProtocol.TCP).cidrBlock("0.0.0.0/0") + .fromPort(8080).toPort(8080).build(); + securityGroupApi().authorizeSecurityGroupIngressInRegion(DEFAULT_REGION, "sg-1a2b3c4d", perm); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=AuthorizeSecurityGroupIngress&GroupId=sg-1a2b3c4d&IpPermissions.0.IpProtocol=tcp&IpPermissions.0.FromPort=8080&IpPermissions.0.ToPort=8080&IpPermissions.0.IpRanges.0.CidrIp=0.0.0.0/0"); + } + + public void authorizeSecurityGroupIngressList() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody(authorizeSecurityGroupIngressResponse)); + + IpPermission perm = IpPermission.builder().ipProtocol(IpProtocol.TCP).cidrBlock("0.0.0.0/0") + .fromPort(8080).toPort(8080).build(); + IpPermission perm2 = IpPermission.builder().ipProtocol(IpProtocol.TCP).cidrBlock("0.0.0.0/0") + .fromPort(8443).toPort(8443).build(); + securityGroupApi().authorizeSecurityGroupIngressInRegion(DEFAULT_REGION, "sg-1a2b3c4d", ImmutableList.of(perm, perm2)); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=AuthorizeSecurityGroupIngress&GroupId=sg-1a2b3c4d&IpPermissions.0.IpProtocol=tcp&IpPermissions.0.FromPort=8080&IpPermissions.0.ToPort=8080&IpPermissions.0.IpRanges.0.CidrIp=0.0.0.0/0&IpPermissions.1.IpProtocol=tcp&IpPermissions.1.FromPort=8443&IpPermissions.1.ToPort=8443&IpPermissions.1.IpRanges.0.CidrIp=0.0.0.0/0"); + } + + public void revokeSecurityGroupIngress() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody(revokeSecurityGroupIngressResponse)); + + IpPermission perm = IpPermission.builder().ipProtocol(IpProtocol.TCP).cidrBlock("0.0.0.0/0") + .fromPort(8080).toPort(8080).build(); + securityGroupApi().revokeSecurityGroupIngressInRegion(DEFAULT_REGION, "sg-1a2b3c4d", perm); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=RevokeSecurityGroupIngress&GroupId=sg-1a2b3c4d&IpPermissions.0.IpProtocol=tcp&IpPermissions.0.FromPort=8080&IpPermissions.0.ToPort=8080&IpPermissions.0.IpRanges.0.CidrIp=0.0.0.0/0"); + } + + public void revokeSecurityGroupIngressList() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody(revokeSecurityGroupIngressResponse)); + + IpPermission perm = IpPermission.builder().ipProtocol(IpProtocol.TCP).cidrBlock("0.0.0.0/0") + .fromPort(8080).toPort(8080).build(); + IpPermission perm2 = IpPermission.builder().ipProtocol(IpProtocol.TCP).cidrBlock("0.0.0.0/0") + .fromPort(8443).toPort(8443).build(); + securityGroupApi().revokeSecurityGroupIngressInRegion(DEFAULT_REGION, "sg-1a2b3c4d", ImmutableList.of(perm, perm2)); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=RevokeSecurityGroupIngress&GroupId=sg-1a2b3c4d&IpPermissions.0.IpProtocol=tcp&IpPermissions.0.FromPort=8080&IpPermissions.0.ToPort=8080&IpPermissions.0.IpRanges.0.CidrIp=0.0.0.0/0&IpPermissions.1.IpProtocol=tcp&IpPermissions.1.FromPort=8443&IpPermissions.1.ToPort=8443&IpPermissions.1.IpRanges.0.CidrIp=0.0.0.0/0"); + } + + public void deleteSecurityGroups() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody(deleteSecurityGroupResponse)); + + securityGroupApi().deleteSecurityGroupInRegionById(DEFAULT_REGION, "sg-1a2b3c4d"); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DeleteSecurityGroup&GroupId=sg-1a2b3c4d"); + } + + private AWSSecurityGroupApi securityGroupApi() { + return api().getSecurityGroupApi().get(); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/a9cc10c4/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSubnetApiLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSubnetApiLiveTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSubnetApiLiveTest.java index 0dc9b08..b851f3a 100644 --- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSubnetApiLiveTest.java +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSubnetApiLiveTest.java @@ -16,12 +16,115 @@ */ package org.jclouds.aws.ec2.features; -import org.jclouds.ec2.features.SubnetApiLiveTest; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +import org.jclouds.aws.ec2.AWSEC2Api; +import org.jclouds.aws.ec2.domain.VPC; +import org.jclouds.aws.ec2.options.CreateVpcOptions; +import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest; +import org.jclouds.ec2.domain.Subnet; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -@Test(groups = "live", testName = "AWSSubnetApiLiveTest") -public class AWSSubnetApiLiveTest extends SubnetApiLiveTest { +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Iterables; + +/** + * Tests behavior of {@code VPCApi} + */ +@Test(groups = "live", singleThreaded = true) +public class AWSSubnetApiLiveTest extends BaseComputeServiceContextLiveTest { + + private String region; + + private AWSEC2Api api; + private AWSSubnetApi subnetClient; + private VPCApi vpcClient; + + private Subnet subnet; + private VPC vpc; + public AWSSubnetApiLiveTest() { provider = "aws-ec2"; + region = "us-west-2"; + } + + @Override + @BeforeClass(groups = { "integration", "live" }) + public void setupContext() { + super.setupContext(); + api = view.unwrapApi(AWSEC2Api.class); + subnetClient = api.getAWSSubnetApi().get(); + vpcClient = view.unwrapApi(AWSEC2Api.class).getVPCApi().get(); + } + + @Override + @AfterClass(groups = { "integration", "live" }) + public void tearDownContext() { + try { + try { + if (subnet != null) { + subnetClient.deleteSubnetInRegion(region, subnet.getSubnetId()); + } + } finally { + if (vpc != null) { + vpcClient.deleteVpc(region, vpc.id()); + } + } + } finally { + super.tearDownContext(); + } + } + + @Test + public void testCreateSubnetInRegion() { + vpc = vpcClient.createVpc(region, "10.0.0.0/16", CreateVpcOptions.NONE); + subnet = subnetClient.createSubnetInRegion(region, vpc.id(), "10.0.0.0/20"); + assertNotNull(subnet); + assertEquals(subnet.getCidrBlock(), "10.0.0.0/20"); + } + + @Test(dependsOnMethods = "testCreateSubnetInRegion") + public void testGet() { + FluentIterable<Subnet> subnets = subnetClient.describeSubnetsInRegion(region, subnet.getSubnetId()); + Subnet subnetFound = Iterables.getOnlyElement(subnets); + assertEquals(subnetFound.getSubnetId(), subnet.getSubnetId()); + } + + @Test(dependsOnMethods = "testCreateSubnetInRegion") + public void testFilter() { + FluentIterable<Subnet> subnets = subnetClient.describeSubnetsInRegionWithFilter(region, + ImmutableMultimap.of("subnet-id", subnet.getSubnetId())); + Subnet subnetFound = Iterables.getOnlyElement(subnets); + assertEquals(subnetFound.getSubnetId(), subnet.getSubnetId()); + } + + @Test(dependsOnMethods = "testCreateSubnetInRegion") + public void testList() { + FluentIterable<Subnet> subnets = subnetClient.describeSubnetsInRegionWithFilter(region, + ImmutableMultimap.<String, String>of()); + Optional<Subnet> subnetFound = Iterables.tryFind(subnets, new Predicate<Subnet>() { + @Override + public boolean apply(Subnet input) { + return input != null && input.getSubnetId().equals(subnet.getSubnetId()); + } + }); + assertTrue(subnetFound.isPresent(), "subnets=" + ImmutableList.copyOf(subnets)); + } + + @Test(dependsOnMethods = {"testGet", "testFilter", "testList"}, alwaysRun = true) + public void testDelete() { + if (subnet != null) { + String subnetId = subnet.getSubnetId(); + subnet = null; + subnetClient.deleteSubnetInRegion(region, subnetId); + } } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/a9cc10c4/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSubnetApiMockTest.java ---------------------------------------------------------------------- diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSubnetApiMockTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSubnetApiMockTest.java new file mode 100644 index 0000000..b8f81ca --- /dev/null +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/AWSSubnetApiMockTest.java @@ -0,0 +1,213 @@ +/* + * 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.aws.ec2.features; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +import org.jclouds.aws.ec2.internal.BaseAWSEC2ApiMockTest; +import org.jclouds.aws.ec2.options.CreateSubnetOptions; +import org.jclouds.ec2.domain.Subnet; +import org.testng.annotations.Test; + +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Iterables; +import com.squareup.okhttp.mockwebserver.MockResponse; + +@Test(groups = "unit", testName = "AWSSubnetApiMockTest", singleThreaded = true) +public class AWSSubnetApiMockTest extends BaseAWSEC2ApiMockTest { + + private final String describeSubnetsResponse = "<DescribeSubnetsResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-11-15/\">\n" + + " <requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId>\n" + + " <subnetSet>\n" + + " <item>\n" + + " <subnetId>subnet-9d4a7b6c</subnetId>\n" + + " <state>available</state>\n" + + " <vpcId>vpc-1a2b3c4d</vpcId>\n" + + " <cidrBlock>10.0.1.0/24</cidrBlock> \n" + + " <ipv6CidrBlockAssociationSet>\n" + + " <item>\n" + + " <ipv6CidrBlock>2001:db8:1234:1a00::/64</ipv6CidrBlock>\n" + + " <associationId>subnet-cidr-assoc-abababab</associationId>\n" + + " <ipv6CidrBlockState>\n" + + " <state>ASSOCIATED</state>\n" + + " </ipv6CidrBlockState>\n" + + " </item>\n" + + " </ipv6CidrBlockAssociationSet>\n" + + " <availableIpAddressCount>251</availableIpAddressCount>\n" + + " <availabilityZone>us-east-1a</availabilityZone>\n" + + " <defaultForAz>false</defaultForAz>\n" + + " <mapPublicIpOnLaunch>false</mapPublicIpOnLaunch>\n" + + " <tagSet/>\n" + + " <assignIpv6AddressOnCreation>false</assignIpv6AddressOnCreation>\n" + + " </item>\n" + + " </subnetSet>\n" + + "</DescribeSubnetsResponse>"; + + public void createSubnetInRegion() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, new MockResponse().setBody("<CreateSubnetResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-09-15/\">\n" + + " <requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId>\n" + + " <subnet>\n" + + " <subnetId>subnet-9d4a7b6c</subnetId>\n" + + " <state>pending</state>\n" + + " <vpcId>vpc-1a2b3c4d</vpcId>\n" + + " <cidrBlock>10.0.1.0/24</cidrBlock> \n" + + " <availableIpAddressCount>251</availableIpAddressCount>\n" + + " <availabilityZone>us-east-1a</availabilityZone>\n" + + " <tagSet/>\n" + + " </subnet>\n" + + "</CreateSubnetResponse>")); + + Subnet result = subnetApi().createSubnetInRegion(DEFAULT_REGION, "vpc-1a2b3c4d", "10.0.1.0/24"); + assertEquals(result.getVpcId(), "vpc-1a2b3c4d"); + assertEquals(result.getCidrBlock(), "10.0.1.0/24"); + assertEquals(result.getAvailabilityZone(), "us-east-1a"); + assertEquals(result.getSubnetId(), "subnet-9d4a7b6c"); + assertEquals(result.getSubnetState().value(), "pending"); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=CreateSubnet&VpcId=vpc-1a2b3c4d&CidrBlock=10.0.1.0/24"); + } + + public void createSubnetInRegion_options() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, + new MockResponse().setBody("<CreateSubnetResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-09-15/\">\n" + + " <requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId>\n" + + " <subnet>\n" + + " <subnetId>subnet-9d4a7b6c</subnetId>\n" + + " <state>pending</state>\n" + + " <vpcId>vpc-1a2b3c4d</vpcId>\n" + + " <cidrBlock>10.0.1.0/24</cidrBlock> \n" + + " <availableIpAddressCount>251</availableIpAddressCount>\n" + + " <availabilityZone>us-east-1a</availabilityZone>\n" + + " <tagSet/>\n" + + " </subnet>\n" + + "</CreateSubnetResponse>")); + + Subnet result = subnetApi().createSubnetInRegion(DEFAULT_REGION, "vpc-1a2b3c4d", "10.0.1.0/24", + new CreateSubnetOptions().dryRun().availabilityZone("us-east-1a")); + assertEquals(result.getVpcId(), "vpc-1a2b3c4d"); + assertEquals(result.getCidrBlock(), "10.0.1.0/24"); + assertEquals(result.getAvailabilityZone(), "us-east-1a"); + assertEquals(result.getSubnetId(), "subnet-9d4a7b6c"); + assertEquals(result.getSubnetState().value(), "pending"); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=CreateSubnet&VpcId=vpc-1a2b3c4d&CidrBlock=10.0.1.0/24&DryRun=true&AvailabilityZone=us-east-1a"); + } + + public void deleteSubnetInRegion() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, + new MockResponse().setBody("<DeleteSubnetResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-09-15/\">\n" + + " <requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId>\n" + + " <return>true</return>\n" + + "</DeleteSubnetResponse>")); + + subnetApi().deleteSubnetInRegion(DEFAULT_REGION, "subnet-9d4a7b6c"); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DeleteSubnet&SubnetId=subnet-9d4a7b6c"); + } + + public void describeSubnetInRegion() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, + new MockResponse().setBody(describeSubnetsResponse)); + + FluentIterable<Subnet> results = subnetApi().describeSubnetsInRegion(DEFAULT_REGION); + Subnet result = Iterables.getOnlyElement(results); + assertEquals(result.getSubnetId(), "subnet-9d4a7b6c"); + assertEquals(result.getSubnetState().value(), "available"); + assertEquals(result.getVpcId(), "vpc-1a2b3c4d"); + assertEquals(result.getCidrBlock(), "10.0.1.0/24"); + assertEquals(result.getAvailabilityZone(), "us-east-1a"); + assertEquals(result.getAvailableIpAddressCount(), 251); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DescribeSubnets"); + } + + public void describeSubnetInRegionWithFilter() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, + new MockResponse().setBody(describeSubnetsResponse)); + + FluentIterable<Subnet> results = subnetApi().describeSubnetsInRegionWithFilter(DEFAULT_REGION, + ImmutableMultimap.of("vpc-id", "vpc-1a2b3c4d", "availabilityZone", "us-east-1a")); + Subnet result = Iterables.getOnlyElement(results); + assertEquals(result.getSubnetId(), "subnet-9d4a7b6c"); + assertEquals(result.getSubnetState().value(), "available"); + assertEquals(result.getVpcId(), "vpc-1a2b3c4d"); + assertEquals(result.getCidrBlock(), "10.0.1.0/24"); + assertEquals(result.getAvailabilityZone(), "us-east-1a"); + assertEquals(result.getAvailableIpAddressCount(), 251); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DescribeSubnets&Filter.1.Name=vpc-id&Filter.1.Value.1=vpc-1a2b3c4d&Filter.2.Name=availabilityZone&Filter.2.Value.1=us-east-1a"); + } + + public void describeSubnetInRegionWhen404() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, + new MockResponse().setResponseCode(404)); + + FluentIterable<Subnet> results = subnetApi().describeSubnetsInRegion(DEFAULT_REGION); + assertTrue(Iterables.isEmpty(results)); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DescribeSubnets"); + } + + public void describeSubnetInRegionWithFilterWhen404() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueue(DEFAULT_REGION, + new MockResponse().setResponseCode(404)); + + FluentIterable<Subnet> results = subnetApi().describeSubnetsInRegionWithFilter(DEFAULT_REGION, + ImmutableMultimap.of("vpc-id", "vpc-1a2b3c4d")); + assertTrue(Iterables.isEmpty(results)); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DescribeSubnets&Filter.1.Name=vpc-id&Filter.1.Value.1=vpc-1a2b3c4d"); + } + + public void describeSubnetInNonDefaultRegionWhen404() throws Exception { + String region = "us-west-2"; + + enqueueRegions(DEFAULT_REGION, region); + enqueue(region, + new MockResponse().setResponseCode(404)); + + FluentIterable<Subnet> results = subnetApiForRegion(region).list(); + assertTrue(Iterables.isEmpty(results)); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(region, "Action=DescribeSubnets"); + } + + private AWSSubnetApi subnetApi() { + return api().getAWSSubnetApi().get(); + } + + private AWSSubnetApi subnetApiForRegion(String region) { + return api().getAWSSubnetApiForRegion(region).get(); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/a9cc10c4/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/VPCApiLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/VPCApiLiveTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/VPCApiLiveTest.java index 06c4873..7ee0d31 100644 --- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/VPCApiLiveTest.java +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/VPCApiLiveTest.java @@ -24,6 +24,7 @@ import org.jclouds.aws.ec2.AWSEC2Api; import org.jclouds.aws.ec2.domain.VPC; import org.jclouds.aws.ec2.options.CreateVpcOptions; import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest; +import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -48,6 +49,18 @@ public class VPCApiLiveTest extends BaseComputeServiceContextLiveTest { client = view.unwrapApi(AWSEC2Api.class).getVPCApi().get(); } + @Override + @AfterClass(groups = { "integration", "live" }) + public void tearDownContext() { + try { + if (vpc != null) { + client.deleteVpc(null, vpc.id()); + } + } finally { + super.tearDownContext(); + } + } + @Test public void testCreate() { vpc = client.createVpc(null, "10.0.0.0/16", CreateVpcOptions.NONE); @@ -69,7 +82,9 @@ public class VPCApiLiveTest extends BaseComputeServiceContextLiveTest { @Test(dependsOnMethods = {"testList", "testGet"}, alwaysRun = true) public void testDelete() { if (vpc != null) { - assertTrue(client.deleteVpc(null, vpc.id())); + String vpcId = vpc.id(); + vpc = null; + assertTrue(client.deleteVpc(null, vpcId)); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/a9cc10c4/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/internal/BaseAWSEC2ApiMockTest.java ---------------------------------------------------------------------- diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/internal/BaseAWSEC2ApiMockTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/internal/BaseAWSEC2ApiMockTest.java index 796cf69..060e577 100644 --- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/internal/BaseAWSEC2ApiMockTest.java +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/internal/BaseAWSEC2ApiMockTest.java @@ -116,7 +116,7 @@ public class BaseAWSEC2ApiMockTest { } } - @BeforeMethod + @BeforeMethod(alwaysRun = true) public void start() throws IOException { MockWebServer server = new MockWebServer(); server.play();
