blob: 1bfc826dfbc103d48fe66b87b8cfed459c25280a [file] [log] [blame]
/*
* 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.jclouds.aws.ec2.options.ModifySubnetAttributeOptions.Builder.mapPublicIpOnLaunch;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import okhttp3.mockwebserver.MockResponse;
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;
@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");
}
public void modifySubnetAttribute() throws Exception {
String region = "us-west-2";
enqueueRegions(DEFAULT_REGION);
enqueue(DEFAULT_REGION,
new MockResponse().setBody("<ModifySubnetAttributeResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-09-15/\">\n" +
" <requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId>\n" +
" <return>true</return>\n" +
"</ModifySubnetAttributeResponse>"));
final boolean result =
subnetApiForRegion(DEFAULT_REGION).modifySubnetAttribute(DEFAULT_REGION, "subnet-9d4a7b6c", mapPublicIpOnLaunch(true));
assertTrue(result, "Failed to match expected test result of 'true'");
assertPosted(DEFAULT_REGION, "Action=DescribeRegions");
assertPosted(DEFAULT_REGION,
"Action=ModifySubnetAttribute&SubnetId=subnet-9d4a7b6c&MapPublicIpOnLaunch.Value=true",
"2014-06-15");
}
private AWSSubnetApi subnetApi() {
return api().getAWSSubnetApi().get();
}
private AWSSubnetApi subnetApiForRegion(String region) {
return api().getAWSSubnetApiForRegion(region).get();
}
}