From f306137eb0e285f302246d23366ce48e1d4c055f Mon Sep 17 00:00:00 2001 From: Andrew Donald Kennedy Date: Mon, 10 Oct 2011 12:49:46 +0100 Subject: [PATCH] 612: Added testing of tags for instances and checking for empty key values --- .../aws/ec2/domain/AWSRunningInstance.java | 5 +- .../aws/ec2/domain/SpotInstanceRequest.java | 5 +- .../AWSDescribeInstancesResponseHandler.java | 2 +- .../ec2/xml/DescribeTagsResponseHandler.java | 20 ++-- .../aws/ec2/xml/SpotInstanceHandler.java | 57 +++++----- .../xml/{TagsHandler.java => TagHandler.java} | 5 +- .../jclouds/aws/ec2/xml/TagSetHandler.java | 81 ++++++++++++++ .../BindTagsToIndexedFormParamsTest.java | 6 ++ .../AWSRunningInstanceToNodeMetadataTest.java | 101 ++++++++++++------ ...stanceRequestToAWSRunningInstanceTest.java | 12 ++- .../aws/ec2/services/TagClientLiveTest.java | 4 + ...SDescribeInstancesResponseHandlerTest.java | 37 ++++--- .../aws/ec2/xml/SpotInstanceHandlerTest.java | 6 +- .../resources/describe_instances_latest.xml | 4 + .../test/resources/describe_spot_instance.xml | 8 ++ 15 files changed, 260 insertions(+), 93 deletions(-) rename providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/{TagsHandler.java => TagHandler.java} (93%) create mode 100644 providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/TagSetHandler.java diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/AWSRunningInstance.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/AWSRunningInstance.java index ffe568d216..eb428895bd 100644 --- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/AWSRunningInstance.java +++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/AWSRunningInstance.java @@ -31,6 +31,7 @@ import org.jclouds.ec2.domain.InstanceState; import org.jclouds.ec2.domain.RootDeviceType; import org.jclouds.ec2.domain.RunningInstance; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; @@ -64,8 +65,8 @@ public class AWSRunningInstance extends RunningInstance { } public Builder tag(String key, String value) { - if (key != null && value != null) - this.tags.put(key, value); + if (key != null) + this.tags.put(key, Strings.nullToEmpty(value)); return this; } diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/SpotInstanceRequest.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/SpotInstanceRequest.java index 48d6766785..40353ad321 100644 --- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/SpotInstanceRequest.java +++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/domain/SpotInstanceRequest.java @@ -26,6 +26,7 @@ import java.util.Map; import org.jclouds.javax.annotation.Nullable; import com.google.common.base.CaseFormat; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; @@ -89,8 +90,8 @@ public class SpotInstanceRequest implements Comparable { } public Builder tag(String key, String value) { - if (key != null && value != null) - this.tags.put(key, value); + if (key != null) + this.tags.put(key, Strings.nullToEmpty(value)); return this; } public Builder availabilityZoneGroup(String availabilityZoneGroup) { diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/AWSDescribeInstancesResponseHandler.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/AWSDescribeInstancesResponseHandler.java index 6b1d725b1b..94646dbd4f 100644 --- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/AWSDescribeInstancesResponseHandler.java +++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/AWSDescribeInstancesResponseHandler.java @@ -53,7 +53,7 @@ public class AWSDescribeInstancesResponseHandler extends @Inject AWSDescribeInstancesResponseHandler(DateService dateService, @Region String defaultRegion, - Provider builderProvider) { + Provider builderProvider, TagSetHandler tagSetHandler) { super(dateService, defaultRegion, builderProvider); } diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/DescribeTagsResponseHandler.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/DescribeTagsResponseHandler.java index 1d6cbd3948..daa08d1c18 100644 --- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/DescribeTagsResponseHandler.java +++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/DescribeTagsResponseHandler.java @@ -35,39 +35,39 @@ import com.google.common.collect.Sets; * @author grkvlt@apache.org */ public class DescribeTagsResponseHandler extends ParseSax.HandlerWithResult> { - private Set bundleTasks = Sets.newLinkedHashSet(); - private final TagsHandler bundleTaskHandler; + private Set tags = Sets.newLinkedHashSet(); + private final TagHandler tagHandler; @Inject - public DescribeTagsResponseHandler(TagsHandler bundleTaskHandler) { - this.bundleTaskHandler = bundleTaskHandler; + public DescribeTagsResponseHandler(TagHandler tagHandler) { + this.tagHandler = tagHandler; } public Set getResult() { - return bundleTasks; + return tags; } @Override public HandlerWithResult> setContext(HttpRequest request) { - bundleTaskHandler.setContext(request); + tagHandler.setContext(request); return super.setContext(request); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (!qName.equals("item")) - bundleTaskHandler.startElement(uri, localName, qName, attributes); + tagHandler.startElement(uri, localName, qName, attributes); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equals("item")) { - bundleTasks.add(bundleTaskHandler.getResult()); + tags.add(tagHandler.getResult()); } - bundleTaskHandler.endElement(uri, localName, qName); + tagHandler.endElement(uri, localName, qName); } public void characters(char ch[], int start, int length) { - bundleTaskHandler.characters(ch, start, length); + tagHandler.characters(ch, start, length); } } diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/SpotInstanceHandler.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/SpotInstanceHandler.java index 42006f1d95..53987849af 100644 --- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/SpotInstanceHandler.java +++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/SpotInstanceHandler.java @@ -18,8 +18,9 @@ */ package org.jclouds.aws.ec2.xml; -import static org.jclouds.util.SaxUtils.currentOrNull; -import static org.jclouds.util.SaxUtils.equalsOrSuffix; +import static org.jclouds.util.SaxUtils.*; + +import java.util.Map; import javax.inject.Inject; @@ -30,6 +31,7 @@ import org.jclouds.date.DateService; import org.jclouds.http.functions.ParseSax; import org.jclouds.location.Region; import org.xml.sax.Attributes; +import org.xml.sax.SAXException; /** * @@ -43,16 +45,17 @@ public class SpotInstanceHandler extends ParseSax.HandlerForGeneratedRequestWith protected final Builder builder; protected boolean inLaunchSpecification; protected final LaunchSpecificationHandler launchSpecificationHandler; - private boolean inTagSet; - private String key; - private String value; + protected boolean inTagSet; + protected final TagSetHandler tagSetHandler; @Inject public SpotInstanceHandler(DateService dateService, @Region String defaultRegion, - LaunchSpecificationHandler launchSpecificationHandler, SpotInstanceRequest.Builder builder) { + LaunchSpecificationHandler launchSpecificationHandler, TagSetHandler tagSetHandler, + SpotInstanceRequest.Builder builder) { this.dateService = dateService; this.defaultRegion = defaultRegion; this.launchSpecificationHandler = launchSpecificationHandler; + this.tagSetHandler = tagSetHandler; this.builder = builder; } @@ -67,37 +70,37 @@ public class SpotInstanceHandler extends ParseSax.HandlerForGeneratedRequestWith } } - public void startElement(String uri, String name, String qName, Attributes attrs) { + @Override + public void startElement(String uri, String name, String qName, Attributes attrs) throws SAXException { if (equalsOrSuffix(qName, "launchSpecification")) { inLaunchSpecification = true; } else if (equalsOrSuffix(qName, "tagSet")) { inTagSet = true; } - if (inLaunchSpecification) - launchSpecificationHandler.startElement(uri, name, qName, attrs); + if (inLaunchSpecification) { + launchSpecificationHandler.startElement(uri, name, qName, attrs); + } else if (inTagSet) { + tagSetHandler.startElement(uri, name, qName, attrs); + } } - public void endElement(String uri, String name, String qName) { + @Override + public void endElement(String uri, String name, String qName) throws SAXException { if (equalsOrSuffix(qName, "tagSet")) { inTagSet = false; + builder.tags(tagSetHandler.getResult()); } else if (inTagSet) { - if (equalsOrSuffix(qName, "key")) { - key = currentOrNull(currentText); - } else if (equalsOrSuffix(qName, "value")) { - value = currentOrNull(currentText); - } + tagSetHandler.endElement(uri, name, qName); } + if (qName.equals("launchSpecification")) { inLaunchSpecification = false; builder.launchSpecification(launchSpecificationHandler.getResult()); - } else if (qName.equals("item") && inTagSet) { - builder.tag(key, value); - key = null; - value = null; - } - if (inLaunchSpecification) { + } else if (inLaunchSpecification) { launchSpecificationHandler.endElement(uri, name, qName); - } else if (qName.equals("spotInstanceRequestId")) { + } + + if (qName.equals("spotInstanceRequestId")) { builder.id(currentOrNull(currentText)); } else if (qName.equals("instanceId")) { builder.instanceId(currentOrNull(currentText)); @@ -133,10 +136,14 @@ public class SpotInstanceHandler extends ParseSax.HandlerForGeneratedRequestWith currentText = new StringBuilder(); } + @Override public void characters(char ch[], int start, int length) { - if (inLaunchSpecification) - launchSpecificationHandler.characters(ch, start, length); - else + if (inLaunchSpecification) { + launchSpecificationHandler.characters(ch, start, length); + } else if (inTagSet) { + tagSetHandler.characters(ch, start, length); + } else { currentText.append(ch, start, length); + } } } diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/TagsHandler.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/TagHandler.java similarity index 93% rename from providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/TagsHandler.java rename to providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/TagHandler.java index 6d2a7a64ef..a87f17efcd 100644 --- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/TagsHandler.java +++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/xml/TagHandler.java @@ -21,11 +21,12 @@ package org.jclouds.aws.ec2.xml; import org.jclouds.aws.ec2.domain.Tag; import org.jclouds.aws.ec2.util.TagFilters.ResourceType; import org.jclouds.http.functions.ParseSax; +import org.xml.sax.SAXException; /** * @author grkvlt@apache.org */ -public class TagsHandler extends ParseSax.HandlerForGeneratedRequestWithResult { +public class TagHandler extends ParseSax.HandlerForGeneratedRequestWithResult { private StringBuilder currentText = new StringBuilder(); private String resourceId; @@ -38,7 +39,7 @@ public class TagsHandler extends ParseSax.HandlerForGeneratedRequestWithResult> { + private StringBuilder currentText = new StringBuilder(); + + private ImmutableMap.Builder result; + private boolean inItem = false; + private String key; + private String value; + + public TagSetHandler() { + super(); + this.result = ImmutableMap.builder(); + } + + public Map getResult() { + return result.build(); + } + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + if (qName.equals("item")) { + inItem = true; + key = null; + value = null; + } + currentText = new StringBuilder(); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + if (qName.equals("item")) { + inItem = false; + if (key != null) { + result.put(key, Strings.nullToEmpty(value)); + } + } + if (inItem) { + if (qName.equals("key")) { + key = currentText.toString().trim(); + } else if (qName.equals("value")) { + value = currentText.toString().trim(); + } + } + } + + @Override + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +} diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/binders/BindTagsToIndexedFormParamsTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/binders/BindTagsToIndexedFormParamsTest.java index 3f32a31283..1e32845f76 100644 --- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/binders/BindTagsToIndexedFormParamsTest.java +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/binders/BindTagsToIndexedFormParamsTest.java @@ -48,6 +48,12 @@ public class BindTagsToIndexedFormParamsTest { assertEquals(request.getPayload().getRawContent(), "Tag.1.Key=one&Tag.1.Value=alpha&Tag.2.Key=two&Tag.2.Value=beta"); } + public void testEmpty() { + HttpRequest request = HttpRequest.builder().method("POST").endpoint(URI.create("http://localhost")).build(); + request = binder.bindToRequest(request, ImmutableMap.builder().put("empty", "").build()); + assertEquals(request.getPayload().getRawContent(), "Tag.1.Key=empty&Tag.1.Value="); + } + @Test(expectedExceptions = IllegalArgumentException.class) public void testMustBeArray() { HttpRequest request = new HttpRequest(HttpMethod.POST, URI.create("http://localhost")); diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSRunningInstanceToNodeMetadataTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSRunningInstanceToNodeMetadataTest.java index 2b78fb7356..18e5209729 100644 --- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSRunningInstanceToNodeMetadataTest.java +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/functions/AWSRunningInstanceToNodeMetadataTest.java @@ -80,43 +80,76 @@ public class AWSRunningInstanceToNodeMetadataTest { . of(), ImmutableSet. of(), ImmutableMap. of()); ImmutableSet contents = ImmutableSet.of(new AWSRunningInstance.Builder() - .region(defaultRegion).instanceId("i-911444f0").imageId("ami-63be790a").instanceState( - InstanceState.RUNNING).privateDnsName("ip-10-212-81-7.ec2.internal").dnsName( - "ec2-174-129-173-155.compute-1.amazonaws.com").keyName("jclouds#zkclustertest#us-east-1#23") - .amiLaunchIndex("0").instanceType("t1.micro").launchTime( - dateService.iso8601DateParse("2011-08-16T13:40:50.000Z")).availabilityZone("us-east-1c") - .kernelId("aki-427d952b").monitoringState(MonitoringState.DISABLED).privateIpAddress("10.212.81.7") - .ipAddress("174.129.173.155").securityGroupIdToNames( - ImmutableMap. of("sg-ef052b86", "jclouds#zkclustertest#us-east-1")) - .rootDeviceType(RootDeviceType.EBS).rootDeviceName("/dev/sda1").device( - "/dev/sda1", - new BlockDevice("vol-5829fc32", Attachment.Status.ATTACHED, dateService - .iso8601DateParse("2011-08-16T13:41:19.000Z"), true)) - .virtualizationType("paravirtual").tag("Name", "foo").build(),// - new AWSRunningInstance.Builder().region(defaultRegion).instanceId("i-931444f2").imageId("ami-63be790a") - .instanceState(InstanceState.RUNNING).privateDnsName("ip-10-212-185-8.ec2.internal").dnsName( - "ec2-50-19-207-248.compute-1.amazonaws.com").keyName( - "jclouds#zkclustertest#us-east-1#23").amiLaunchIndex("0").instanceType("t1.micro") - .launchTime(dateService.iso8601DateParse("2011-08-16T13:40:50.000Z")).availabilityZone( - "us-east-1c").kernelId("aki-427d952b").monitoringState(MonitoringState.DISABLED) - .privateIpAddress("10.212.185.8").ipAddress("50.19.207.248").securityGroupIdToNames( - ImmutableMap. of("sg-ef052b86", "jclouds#zkclustertest#us-east-1")) - .rootDeviceType(RootDeviceType.EBS).rootDeviceName("/dev/sda1").device( - "/dev/sda1", - new BlockDevice("vol-5029fc3a", Attachment.Status.ATTACHED, dateService - .iso8601DateParse("2011-08-16T13:41:19.000Z"), true)).virtualizationType( - "paravirtual").build()); + .region(defaultRegion) + .instanceId("i-911444f0") + .imageId("ami-63be790a") + .instanceState(InstanceState.RUNNING) + .privateDnsName("ip-10-212-81-7.ec2.internal") + .dnsName("ec2-174-129-173-155.compute-1.amazonaws.com") + .keyName("jclouds#zkclustertest#us-east-1#23") + .amiLaunchIndex("0") + .instanceType("t1.micro") + .launchTime(dateService.iso8601DateParse("2011-08-16T13:40:50.000Z")) + .availabilityZone("us-east-1c") + .kernelId("aki-427d952b") + .monitoringState(MonitoringState.DISABLED) + .privateIpAddress("10.212.81.7") + .ipAddress("174.129.173.155") + .securityGroupIdToNames(ImmutableMap. of("sg-ef052b86", "jclouds#zkclustertest#us-east-1")) + .rootDeviceType(RootDeviceType.EBS) + .rootDeviceName("/dev/sda1") + .device("/dev/sda1", new BlockDevice("vol-5829fc32", Attachment.Status.ATTACHED, dateService.iso8601DateParse("2011-08-16T13:41:19.000Z"), true)) + .virtualizationType("paravirtual") + .tag("Name", "foo") + .tag("Empty", "") + .build(),// + new AWSRunningInstance.Builder() + .region(defaultRegion) + .instanceId("i-931444f2") + .imageId("ami-63be790a") + .instanceState(InstanceState.RUNNING) + .privateDnsName("ip-10-212-185-8.ec2.internal") + .dnsName("ec2-50-19-207-248.compute-1.amazonaws.com") + .keyName("jclouds#zkclustertest#us-east-1#23") + .amiLaunchIndex("0") + .instanceType("t1.micro") + .launchTime(dateService.iso8601DateParse("2011-08-16T13:40:50.000Z")) + .availabilityZone("us-east-1c") + .kernelId("aki-427d952b") + .monitoringState(MonitoringState.DISABLED) + .privateIpAddress("10.212.185.8") + .ipAddress("50.19.207.248") + .securityGroupIdToNames(ImmutableMap.of("sg-ef052b86", "jclouds#zkclustertest#us-east-1")) + .rootDeviceType(RootDeviceType.EBS) + .rootDeviceName("/dev/sda1") + .device("/dev/sda1", new BlockDevice("vol-5029fc3a", Attachment.Status.ATTACHED, dateService.iso8601DateParse("2011-08-16T13:41:19.000Z"), true)) + .virtualizationType("paravirtual") + .build()); assertEquals( parser.apply(Iterables.get(contents, 0)).toString(), - new NodeMetadataBuilder().state(NodeState.RUNNING).group("zkclustertest").hostname("ip-10-212-81-7") - .privateAddresses(ImmutableSet.of("10.212.81.7")).publicAddresses(ImmutableSet.of("174.129.173.155")) - .imageId("us-east-1/ami-63be790a").id("us-east-1/i-911444f0").providerId("i-911444f0") - .userMetadata(ImmutableMap.of("Name", "foo")).build().toString()); - assertEquals(parser.apply(Iterables.get(contents, 1)), new NodeMetadataBuilder().state(NodeState.RUNNING).group( - "zkclustertest").hostname("ip-10-212-185-8").privateAddresses(ImmutableSet.of("10.212.185.8")) - .publicAddresses(ImmutableSet.of("50.19.207.248")).imageId("us-east-1/ami-63be790a").id( - "us-east-1/i-931444f2").providerId("i-931444f2").build()); + new NodeMetadataBuilder() + .state(NodeState.RUNNING) + .group("zkclustertest") + .hostname("ip-10-212-81-7") + .privateAddresses(ImmutableSet.of("10.212.81.7")) + .publicAddresses(ImmutableSet.of("174.129.173.155")) + .imageId("us-east-1/ami-63be790a") + .id("us-east-1/i-911444f0") + .providerId("i-911444f0") + .userMetadata(ImmutableMap.of("Name", "foo", "Empty", "")).build().toString()); + assertEquals( + parser.apply(Iterables.get(contents, 1)), + new NodeMetadataBuilder() + .state(NodeState.RUNNING) + .group("zkclustertest") + .hostname("ip-10-212-185-8") + .privateAddresses(ImmutableSet.of("10.212.185.8")) + .publicAddresses(ImmutableSet.of("50.19.207.248")) + .imageId("us-east-1/ami-63be790a") + .id("us-east-1/i-931444f2") + .providerId("i-931444f2") + .build()); } protected AWSRunningInstanceToNodeMetadata createNodeParser(final ImmutableSet hardware, diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/functions/SpotInstanceRequestToAWSRunningInstanceTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/functions/SpotInstanceRequestToAWSRunningInstanceTest.java index f3e2cd6126..4f08e4a59c 100644 --- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/functions/SpotInstanceRequestToAWSRunningInstanceTest.java +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/functions/SpotInstanceRequestToAWSRunningInstanceTest.java @@ -33,8 +33,7 @@ import org.testng.annotations.Test; * * @author Adrian Cole */ -// NOTE:without testName, this will not call @Before* and fail w/NPE during -// surefire +// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire @Test(groups = "unit", testName = "SpotInstanceRequestToAWSRunningInstanceTest") public class SpotInstanceRequestToAWSRunningInstanceTest { @@ -53,13 +52,18 @@ public class SpotInstanceRequestToAWSRunningInstanceTest { .mapEBSSnapshotToDevice("/dev/sda2", "snap-1ea27576", 1, true) .mapEphemeralDeviceToDevice("/dev/sda3", "vre1").monitoringEnabled(false).build()) .createTime(new SimpleDateFormatDateService().iso8601DateParse("2011-03-08T03:30:36.000Z")) - .productDescription("Linux/UNIX").tag("foo", "bar").build(); + .productDescription("Linux/UNIX") + .tag("foo", "bar") + .tag("empty", "") + .build(); assertEquals( new SpotInstanceRequestToAWSRunningInstance().apply(input), AWSRunningInstance.builder().region("us-east-1").instanceId("sir-228e6406") .spotInstanceRequestId("sir-228e6406").instanceState(InstanceState.PENDING).imageId("ami-595a0a1c") - .groupId("default").instanceType("m1.large").tag("foo", "bar") + .groupId("default").instanceType("m1.large") + .tag("foo", "bar") + .tag("empty", "") .monitoringState(MonitoringState.PENDING).build()); } diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/services/TagClientLiveTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/services/TagClientLiveTest.java index c13a8004d5..5af5c33030 100644 --- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/services/TagClientLiveTest.java +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/services/TagClientLiveTest.java @@ -109,11 +109,15 @@ public class TagClientLiveTest { @Test void test() { cleanupTag(testGroup, "test-key"); + cleanupTag(testGroup, "empty-key"); try { client.createTagsInRegion(null, ImmutableList.builder().add(testGroup).build(), ImmutableMap.builder().put("test-key", "test-value").build()); checkTag(testGroup, ResourceType.SECURITY_GROUP, "test-key", "test-value"); + client.createTagsInRegion(null, ImmutableList.builder().add(testGroup).build(), ImmutableMap.builder().put("empty-key", "").build()); + checkTag(testGroup, ResourceType.SECURITY_GROUP, "empty-key", ""); } finally { cleanupTag(testGroup, "test-key"); + cleanupTag(testGroup, "empty-key"); } } diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/xml/AWSDescribeInstancesResponseHandlerTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/xml/AWSDescribeInstancesResponseHandlerTest.java index f6e9394b43..1183cdf649 100644 --- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/xml/AWSDescribeInstancesResponseHandlerTest.java +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/xml/AWSDescribeInstancesResponseHandlerTest.java @@ -69,17 +69,30 @@ public class AWSDescribeInstancesResponseHandlerTest extends BaseEC2HandlerTest public void testWhenRunning() throws UnknownHostException { - Set> contents = ImmutableSet.of(new Reservation( - defaultRegion, ImmutableSet.of("adriancole.ec2ingress"), ImmutableSet.of(new AWSRunningInstance.Builder() - .region(defaultRegion).groupId("adriancole.ec2ingress").amiLaunchIndex("0") - .dnsName("ec2-174-129-81-68.compute-1.amazonaws.com").imageId("ami-82e4b5c7") - .instanceId("i-0799056f").instanceState(InstanceState.RUNNING).instanceType(InstanceType.M1_SMALL) - .ipAddress("174.129.81.68").kernelId("aki-a71cf9ce").keyName("adriancole.ec21") - .launchTime(dateService.iso8601DateParse("2009-11-09T03:00:34.000Z")) - .monitoringState(MonitoringState.DISABLED).availabilityZone("us-east-1c") - .virtualizationType("paravirtual").privateDnsName("ip-10-243-42-70.ec2.internal") - .privateIpAddress("10.243.42.70").ramdiskId("ari-a51cf9cc") - .rootDeviceType(RootDeviceType.INSTANCE_STORE).build()), "993194456877", null, "r-a3c508cb")); + Set> contents = ImmutableSet.of( + new Reservation(defaultRegion, ImmutableSet.of("adriancole.ec2ingress"), ImmutableSet.of( + new AWSRunningInstance.Builder() + .region(defaultRegion) + .groupId("adriancole.ec2ingress") + .amiLaunchIndex("0") + .dnsName("ec2-174-129-81-68.compute-1.amazonaws.com") + .imageId("ami-82e4b5c7") + .instanceId("i-0799056f") + .instanceState(InstanceState.RUNNING) + .instanceType(InstanceType.M1_SMALL) + .ipAddress("174.129.81.68") + .kernelId("aki-a71cf9ce") + .keyName("adriancole.ec21") + .launchTime(dateService.iso8601DateParse("2009-11-09T03:00:34.000Z")) + .monitoringState(MonitoringState.DISABLED) + .availabilityZone("us-east-1c") + .virtualizationType("paravirtual") + .privateDnsName("ip-10-243-42-70.ec2.internal") + .privateIpAddress("10.243.42.70") + .ramdiskId("ari-a51cf9cc") + .rootDeviceType(RootDeviceType.INSTANCE_STORE) + .build()), + "993194456877", null, "r-a3c508cb")); Set> result = parseAWSRunningInstances("/describe_instances_running.xml"); @@ -87,7 +100,6 @@ public class AWSDescribeInstancesResponseHandlerTest extends BaseEC2HandlerTest } public void testWhenRunningLatest() throws UnknownHostException { - Set> contents = ImmutableSet.of(new Reservation( defaultRegion, ImmutableSet.of("jclouds#ec2-s#us-east-1"), ImmutableSet.of( new AWSRunningInstance.Builder() @@ -108,6 +120,7 @@ public class AWSDescribeInstancesResponseHandlerTest extends BaseEC2HandlerTest .ipAddress("174.129.173.155") .securityGroupIdToName("sg-ef052b86", "jclouds#zkclustertest#us-east-1") .tag("Name", "ec2-o") + .tag("Empty", "") .rootDeviceType(RootDeviceType.EBS) .rootDeviceName("/dev/sda1") .device( diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/xml/SpotInstanceHandlerTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/xml/SpotInstanceHandlerTest.java index 2b141ff47e..9dc607bbab 100644 --- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/xml/SpotInstanceHandlerTest.java +++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/xml/SpotInstanceHandlerTest.java @@ -112,7 +112,11 @@ public class SpotInstanceHandlerTest extends BaseEC2HandlerTest { .instanceType("t1.micro").monitoringEnabled(false).keyName("jclouds#adriancole-ec2unssh") .build()) .createTime(new SimpleDateFormatDateService().iso8601DateParse("2011-07-29T05:27:39.000Z")) - .productDescription("Linux/UNIX").tag("Name", "ec2-o").build(); + .productDescription("Linux/UNIX") + .tag("Name", "ec2-o") + .tag("Spot", "spot-value") + .tag("Empty", "") + .build(); SpotInstanceHandler handler = injector.getInstance(SpotInstanceHandler.class); addDefaultRegionToHandler(handler); SpotInstanceRequest result = factory.create(handler).parse(is); diff --git a/providers/aws-ec2/src/test/resources/describe_instances_latest.xml b/providers/aws-ec2/src/test/resources/describe_instances_latest.xml index 065d3507c9..f082f23afc 100644 --- a/providers/aws-ec2/src/test/resources/describe_instances_latest.xml +++ b/providers/aws-ec2/src/test/resources/describe_instances_latest.xml @@ -66,6 +66,10 @@ Name ec2-o + + Empty + + diff --git a/providers/aws-ec2/src/test/resources/describe_spot_instance.xml b/providers/aws-ec2/src/test/resources/describe_spot_instance.xml index 59dd830038..a3f158fdbd 100644 --- a/providers/aws-ec2/src/test/resources/describe_spot_instance.xml +++ b/providers/aws-ec2/src/test/resources/describe_spot_instance.xml @@ -30,6 +30,14 @@ Name ec2-o + + Spot + spot-value + + + Empty + + us-east-1b