nacx requested changes on this pull request. Thanks @andreaturli!
> + VPC() {} + + public static Builder builder() { + return new AutoValue_VPC.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder id(String id); + public abstract Builder state(State state); + public abstract Builder cidrBlock(String cidrBlock); + public abstract Builder dhcpOptionsId(String dhcpOptionsId); + public abstract Builder instanceTenancy(String instanceTenancy); + public abstract Builder isDefault(Boolean isDefault); + public abstract Builder tags(Map<String, String> tags); Enforce an immutable map by providing a hidden method for auto-value. [This is the pattern](d31a85af1fa1b7de3676946ce9eaf29ad23e3b1f) we use. > + PENDING, UNRECOGNIZED; + public String value() { + return name().toLowerCase(); + } + + public static State fromValue(String v) { + try { + return valueOf(v.toUpperCase()); + } catch (IllegalArgumentException e) { + return UNRECOGNIZED; + } + } + } + + @Nullable + public abstract String id(); Is this really nullable? > + } + } + } + + @Nullable + public abstract String id(); + @Nullable + public abstract State state(); + @Nullable + public abstract String cidrBlock(); + @Nullable + public abstract String dhcpOptionsId(); + @Nullable + public abstract String instanceTenancy(); + @Nullable + public abstract Boolean isDefault(); Same here. Is this really nullable? Use a primitive type if not? > + */ +@RequestFilters(FormSigner.class) +@VirtualHost +public interface VPCApi { + + /** + * Describes all of your VPCs + * + * @return VPCs or empty if there are none + * @see <a href= + * "http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html" + * >docs</href> + */ + @Named("DescribeVpcs") + @POST + @Path("/") Move this annotation to the class and remove it from all methods. > +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.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import com.google.common.collect.FluentIterable; + +/** + * Tests behavior of {@code VPCApi} + */ +@Test(groups = "live", singleThreaded = true) +public class VPCApiLiveTest extends BaseComputeServiceContextLiveTest { SHouldn't this better extend the BaseHttpApiLiveTest? > + client = view.unwrapApi(AWSEC2Api.class).getVPCApi().get(); + } + + @Test + public void testCreate() { + vpc = client.createVpc(null, "10.0.0.0/16", CreateVpcOptions.NONE); + assertNotNull(vpc); + } + + @Test(dependsOnMethods = "testCreate") + public void testGet() { + FluentIterable<VPC> vpcs = client.describeVpcsInRegion(null, vpc.id()); + assertTrue(vpcs.toList().size() == 1); + } + + @Test(dependsOnMethods = "testGet") Depend on the `testCreate` to avoid skipping this if the get test fails. > + assertNotNull(vpc); + } + + @Test(dependsOnMethods = "testCreate") + public void testGet() { + FluentIterable<VPC> vpcs = client.describeVpcsInRegion(null, vpc.id()); + assertTrue(vpcs.toList().size() == 1); + } + + @Test(dependsOnMethods = "testGet") + public void testList() { + FluentIterable<VPC> vpcs = client.describeVpcsInRegion(null); + assertTrue(!vpcs.toList().isEmpty()); + } + + @Test(dependsOnMethods = "testList") `@Test(dependsOnMethods = {"testList", "testGet"}, alwaysRun = true)` to make sure this is never skipped and we don't leak resources. > + @EndpointParam(parser = RegionToEndpointOrProviderIfNull.class) > @Nullable String region, + @FormParam("CidrBlock") String cidrBlock, CreateVpcOptions... options); + /** + * Deletes {@code VPC}. + * + * @param region + * VPCs are tied to the Region where its files are located within Amazon S3. + * @param vpcId + * The VPC ID. + * + */ + @Named("DeleteVpc") + @POST + @Path("/") + @FormParams(keys = ACTION, values = "DeleteVpc") + @XMLResponseParser(ReturnValueHandler.class) Add a fallback to return false if the vpc does not exist? It is a common pattern in jclouds. > + @Test + public void testCreate() { + vpc = client.createVpc(null, "10.0.0.0/16", CreateVpcOptions.NONE); + assertNotNull(vpc); + } + + @Test(dependsOnMethods = "testCreate") + public void testGet() { + FluentIterable<VPC> vpcs = client.describeVpcsInRegion(null, vpc.id()); + assertTrue(vpcs.toList().size() == 1); + } + + @Test(dependsOnMethods = "testGet") + public void testList() { + FluentIterable<VPC> vpcs = client.describeVpcsInRegion(null); + assertTrue(!vpcs.toList().isEmpty()); Better use just assertFalse. Also, check that the created VPC is in the list, and I'd check the method when passing the region id too. > + + assertNotNull(result); + + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=CreateVpc&CidrBlock=10.0.0.0/16"); + } + + public void describeVpcsInRegion() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueueXml(DEFAULT_REGION, "/describe_vpcs.xml"); + FluentIterable<VPC> result = vpcApi().describeVpcsInRegion(DEFAULT_REGION); + + assertFalse(result.isEmpty()); + assertPosted(DEFAULT_REGION, "Action=DescribeRegions"); + assertPosted(DEFAULT_REGION, "Action=DescribeVpcs"); + } Add tests to exercise all defined fallbacks. > +import org.jclouds.aws.ec2.domain.VPC; +import org.jclouds.aws.ec2.internal.BaseAWSEC2ApiMockTest; +import org.jclouds.aws.ec2.options.CreateVpcOptions; +import org.testng.annotations.Test; + +import com.google.common.collect.FluentIterable; + +@Test(groups = "unit", testName = "VPCApiMockTest", singleThreaded = true) +public class VPCApiMockTest extends BaseAWSEC2ApiMockTest { + + public void create() throws Exception { + enqueueRegions(DEFAULT_REGION); + enqueueXml(DEFAULT_REGION, "/create_vpc.xml"); + VPC result = vpcApi().createVpc(DEFAULT_REGION, "10.0.0.0/16", CreateVpcOptions.NONE); + + assertNotNull(result); Verify (at least) the id field to make sure the response is properly deserialized. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/jclouds/jclouds/pull/1032#pullrequestreview-6370065