You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ab...@apache.org on 2013/11/14 20:54:18 UTC
[2/3] JCLOUDS-361. Add support for filtering Describe* methods in EC2
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiLiveTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiLiveTest.java
index 858cf20..bc080a7 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiLiveTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiLiveTest.java
@@ -20,11 +20,13 @@ import static java.util.concurrent.TimeUnit.SECONDS;
import static org.jclouds.ec2.options.DescribeSnapshotsOptions.Builder.snapshotIds;
import static org.jclouds.util.Predicates2.retry;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import java.util.Set;
import java.util.SortedSet;
+import org.jclouds.aws.AWSResponseException;
import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
import org.jclouds.ec2.EC2Api;
import org.jclouds.ec2.domain.AvailabilityZoneInfo;
@@ -38,6 +40,7 @@ import org.testng.annotations.Test;
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
@@ -75,17 +78,42 @@ public class ElasticBlockStoreApiLiveTest extends BaseComputeServiceContextLiveT
@Test
void testDescribeVolumes() {
- for (String region : ec2Api.getConfiguredRegions()) {
- SortedSet<Volume> allResults = Sets.newTreeSet(client.describeVolumesInRegion(region));
- assertNotNull(allResults);
- if (allResults.size() >= 1) {
- Volume volume = allResults.last();
- SortedSet<Volume> result = Sets.newTreeSet(client.describeVolumesInRegion(region, volume.getId()));
- assertNotNull(result);
- Volume compare = result.last();
- assertEquals(compare, volume);
- }
- }
+ String region = defaultRegion;
+ SortedSet<Volume> allResults = Sets.newTreeSet(client.describeVolumesInRegion(region));
+ assertNotNull(allResults);
+ assertFalse(allResults.isEmpty());
+ Volume volume = allResults.last();
+ SortedSet<Volume> result = Sets.newTreeSet(client.describeVolumesInRegion(region, volume.getId()));
+ assertNotNull(result);
+ Volume compare = result.last();
+ assertEquals(compare, volume);
+ }
+
+ @Test
+ void testDescribeVolumesWithFilter() {
+ String region = defaultRegion;
+ SortedSet<Volume> allResults = Sets.newTreeSet(client.describeVolumesInRegion(region));
+ assertNotNull(allResults);
+ assertFalse(allResults.isEmpty());
+ Volume volume = allResults.last();
+ SortedSet<Volume> result = Sets.newTreeSet(client.describeVolumesInRegionWithFilter(region,
+ ImmutableMultimap.<String, String>builder()
+ .put("volume-id", volume.getId()).build()));
+ assertNotNull(result);
+ Volume compare = result.last();
+ assertEquals(compare, volume);
+ }
+
+ @Test(expectedExceptions = AWSResponseException.class)
+ void testDescribeVolumesWithInvalidFilter() {
+ String region = defaultRegion;
+ SortedSet<Volume> allResults = Sets.newTreeSet(client.describeVolumesInRegion(region));
+ assertNotNull(allResults);
+ assertFalse(allResults.isEmpty());
+ Volume volume = allResults.last();
+ SortedSet<Volume> result = Sets.newTreeSet(client.describeVolumesInRegionWithFilter(region,
+ ImmutableMultimap.<String, String>builder()
+ .put("invalid-filter", volume.getId()).build()));
}
@Test
@@ -163,16 +191,43 @@ public class ElasticBlockStoreApiLiveTest extends BaseComputeServiceContextLiveT
@Test
void testDescribeSnapshots() {
- for (String region : ec2Api.getConfiguredRegions()) {
- SortedSet<Snapshot> allResults = Sets.newTreeSet(client.describeSnapshotsInRegion(region));
- assertNotNull(allResults);
- if (allResults.size() >= 1) {
- Snapshot snapshot = allResults.last();
- Snapshot result = Iterables.getOnlyElement(client.describeSnapshotsInRegion(region,
- snapshotIds(snapshot.getId())));
- assertNotNull(result);
- assertEquals(result, snapshot);
- }
+ String region = defaultRegion;
+ SortedSet<Snapshot> allResults = Sets.newTreeSet(client.describeSnapshotsInRegion(region));
+ assertNotNull(allResults);
+ if (!allResults.isEmpty()) {
+ Snapshot snapshot = allResults.last();
+ Snapshot result = Iterables.getOnlyElement(client.describeSnapshotsInRegion(region,
+ snapshotIds(snapshot.getId())));
+ assertNotNull(result);
+ assertEquals(result, snapshot);
+ }
+ }
+
+ @Test
+ void testDescribeSnapshotsWithFilter() {
+ String region = defaultRegion;
+ SortedSet<Snapshot> allResults = Sets.newTreeSet(client.describeSnapshotsInRegion(region));
+ assertNotNull(allResults);
+ if (!allResults.isEmpty()) {
+ Snapshot snapshot = allResults.last();
+ Snapshot result = Iterables.getOnlyElement(client.describeSnapshotsInRegionWithFilter(region,
+ ImmutableMultimap.<String, String>builder()
+ .put("snapshot-id", snapshot.getId()).build()));
+ assertNotNull(result);
+ assertEquals(result, snapshot);
+ }
+ }
+
+ @Test(expectedExceptions = AWSResponseException.class)
+ void testDescribeSnapshotsWithFilterInvalid() {
+ String region = defaultRegion;
+ SortedSet<Snapshot> allResults = Sets.newTreeSet(client.describeSnapshotsInRegion(region));
+ assertNotNull(allResults);
+ if (!allResults.isEmpty()) {
+ Snapshot snapshot = allResults.last();
+ Snapshot result = Iterables.getOnlyElement(client.describeSnapshotsInRegionWithFilter(region,
+ ImmutableMultimap.<String, String>builder()
+ .put("invalid-filter", snapshot.getId()).build()));
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiTest.java
index b0b4fba..fefd2a7 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiTest.java
@@ -70,11 +70,11 @@ public class ElasticBlockStoreApiTest extends BaseEC2ApiTest<ElasticBlockStoreAp
.endpoint("https://ec2.us-east-1.amazonaws.com/")
.addHeader("Host", "ec2.us-east-1.amazonaws.com")
.addFormParam("Action", "DescribeVolumes")
- .addFormParam("Signature", "hNuorhZQS%2BThX5dWXOvBkvnmTpgp6SvwHmgzjjfKyG8%3D")
+ .addFormParam("Signature", "nNxWg5dwYZEQu1QCzCtNp7iDmPR8wXXdKhWmLEKFLGI%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testDescribeVolumes() throws SecurityException, NoSuchMethodException, IOException {
@@ -119,11 +119,11 @@ public class ElasticBlockStoreApiTest extends BaseEC2ApiTest<ElasticBlockStoreAp
.addFormParam("Action", "AttachVolume")
.addFormParam("Device", "/device")
.addFormParam("InstanceId", "instanceId")
- .addFormParam("Signature", "LaOppR61eWpdNgMYJ3ccfo9vzbmUyJf9Ars%2Bbcu4OGI%3D")
+ .addFormParam("Signature", "0%2BUY5oCQzoJapEHq4Dl2R/0nAA8uXEHqvHbnnNI5NcA%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("VolumeId", "id")
.addFormParam("AWSAccessKeyId", "identity").build();
@@ -151,11 +151,11 @@ public class ElasticBlockStoreApiTest extends BaseEC2ApiTest<ElasticBlockStoreAp
.addHeader("Host", "ec2.us-east-1.amazonaws.com")
.addFormParam("Action", "DetachVolume")
.addFormParam("Force", "false")
- .addFormParam("Signature", "4c6EmHwCYbe%2BifuUV0PNXpKfReoZvJXyme37mKtnLk8%3D")
+ .addFormParam("Signature", "tfNB1g2WVqb3EwvBJlk4duU1H1fDOa1SBstsm1elpbg%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("VolumeId", "id")
.addFormParam("AWSAccessKeyId", "identity").build();
@@ -185,11 +185,11 @@ public class ElasticBlockStoreApiTest extends BaseEC2ApiTest<ElasticBlockStoreAp
.addFormParam("Device", "/device")
.addFormParam("Force", "true")
.addFormParam("InstanceId", "instanceId")
- .addFormParam("Signature", "GrUGXc6H5W%2BNF8zcXU8gSRbt1ELt%2BTcCDEvbY1a88NE%3D")
+ .addFormParam("Signature", "VFhgwdkKBKXr/dEn2gvk6Vqq3JIunw4zZgM2Tt/ouME%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("VolumeId", "id")
.addFormParam("AWSAccessKeyId", "identity").build();
@@ -311,7 +311,7 @@ public class ElasticBlockStoreApiTest extends BaseEC2ApiTest<ElasticBlockStoreAp
.addFormParam("Action", "ModifySnapshotAttribute")
.addFormParam("Attribute", "createVolumePermission")
.addFormParam("OperationType", "add")
- .addFormParam("Signature", "AizV1N1rCCXi%2BbzXX/Vz7shFq9yAJAwcmAGyRQMH%2Bjs%3D")
+ .addFormParam("Signature", "s8m8DqQRXmecWguuRjxfl3Ibd%2B1AjjktGzTlJLUTcPc%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("SnapshotId", "snapshotId")
@@ -319,7 +319,7 @@ public class ElasticBlockStoreApiTest extends BaseEC2ApiTest<ElasticBlockStoreAp
.addFormParam("UserGroup.1", "all")
.addFormParam("UserId.1", "bob")
.addFormParam("UserId.2", "sue")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testAddCreateVolumePermissionsToSnapshot() throws SecurityException, NoSuchMethodException, IOException {
@@ -348,7 +348,7 @@ public class ElasticBlockStoreApiTest extends BaseEC2ApiTest<ElasticBlockStoreAp
.addFormParam("Action", "ModifySnapshotAttribute")
.addFormParam("Attribute", "createVolumePermission")
.addFormParam("OperationType", "remove")
- .addFormParam("Signature", "Lmlt2daM%2BJ4kIoU9HmCempwVGZP1fC6V%2Br9o8MQjYy8%3D")
+ .addFormParam("Signature", "RzxHUIWV80cyhQDtrMiHDWUosS1g8cn1%2B7ONLJCe1dg%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("SnapshotId", "snapshotId")
@@ -356,7 +356,7 @@ public class ElasticBlockStoreApiTest extends BaseEC2ApiTest<ElasticBlockStoreAp
.addFormParam("UserGroup.1", "all")
.addFormParam("UserId.1", "bob")
.addFormParam("UserId.2", "sue")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testRemoveCreateVolumePermissionsFromSnapshot() throws SecurityException, NoSuchMethodException,
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiExpectTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiExpectTest.java
new file mode 100644
index 0000000..824a4ff
--- /dev/null
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiExpectTest.java
@@ -0,0 +1,102 @@
+/*
+ * 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.ec2.features;
+
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import java.util.Properties;
+
+import org.jclouds.Constants;
+import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.domain.PublicIpInstanceIdPair;
+import org.jclouds.ec2.internal.BaseEC2ApiExpectTest;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.rest.internal.BaseRestApiExpectTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * @author Andrew Bayer
+ *
+ * @see org.jclouds.ec2.features.ElasticIPAddressApi
+ */
+@Test(groups = "unit")
+public class ElasticIPAddressApiExpectTest extends BaseEC2ApiExpectTest<EC2Api> {
+
+ protected Properties setupProperties() {
+ Properties props = super.setupProperties();
+ props.put(Constants.PROPERTY_API_VERSION, "2010-08-31");
+ return props;
+ }
+
+ HttpRequest filter =
+ HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2.us-east-1.amazonaws.com/")
+ .addHeader("Host", "ec2.us-east-1.amazonaws.com")
+ .payload(BaseRestApiExpectTest.payloadFromStringWithContentType(
+ "Action=DescribeAddresses" +
+ "&Filter.1.Name=instance-id" +
+ "&Filter.1.Value.1=i-f15ebb98" +
+ "&Signature=dJbTUsBGHSrarQQAwmLm8LLI255R/lzdE7ZcYJucOzI%3D" +
+ "&SignatureMethod=HmacSHA256" +
+ "&SignatureVersion=2" +
+ "&Timestamp=2012-04-16T15%3A54%3A08.897Z" +
+ "&Version=2010-08-31" +
+ "&AWSAccessKeyId=identity",
+ "application/x-www-form-urlencoded"))
+ .build();
+
+ public void testFilterWhenResponseIs2xx() throws Exception {
+
+ HttpResponse filterResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResourceWithContentType("/describe_addresses_single.xml", "text/xml")).build();
+
+
+ EC2Api apiWhenExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse,
+ filter, filterResponse);
+
+ PublicIpInstanceIdPair address = getOnlyElement(apiWhenExist.getElasticIPAddressApi()
+ .get().describeAddressesInRegionWithFilter("us-east-1",
+ ImmutableMultimap.<String, String>builder()
+ .put("instance-id", "i-f15ebb98")
+ .build()));
+ assertNotNull(address, "address should not be null");
+
+ assertEquals(address.getPublicIp(), "67.202.55.255");
+ }
+
+ public void testFilterWhenResponseIs404() throws Exception {
+
+ HttpResponse filterResponse = HttpResponse.builder().statusCode(404).build();
+
+ EC2Api apiWhenDontExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse,
+ filter, filterResponse);
+
+ assertEquals(apiWhenDontExist.getElasticIPAddressApi()
+ .get().describeAddressesInRegionWithFilter("us-east-1",
+ ImmutableMultimap.<String, String>builder()
+ .put("instance-id", "i-f15ebb98")
+ .build()), ImmutableSet.of());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiLiveTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiLiveTest.java
index 119c2de..f435404 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiLiveTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiLiveTest.java
@@ -23,12 +23,11 @@ import java.util.SortedSet;
import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
import org.jclouds.ec2.EC2Api;
-import org.jclouds.ec2.EC2ApiMetadata;
-import org.jclouds.ec2.compute.EC2ComputeServiceContext;
import org.jclouds.ec2.domain.PublicIpInstanceIdPair;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Sets;
/**
@@ -58,13 +57,19 @@ public class ElasticIPAddressApiLiveTest extends BaseComputeServiceContextLiveTe
for (String region : ec2Api.getConfiguredRegions()) {
SortedSet<PublicIpInstanceIdPair> allResults = Sets.newTreeSet(client.describeAddressesInRegion(region));
assertNotNull(allResults);
- if (allResults.size() >= 1) {
+ if (!allResults.isEmpty()) {
PublicIpInstanceIdPair pair = allResults.last();
SortedSet<PublicIpInstanceIdPair> result = Sets.newTreeSet(client.describeAddressesInRegion(region, pair
.getPublicIp()));
assertNotNull(result);
PublicIpInstanceIdPair compare = result.last();
assertEquals(compare, pair);
+
+ SortedSet<PublicIpInstanceIdPair> filterResult = Sets.newTreeSet(client.describeAddressesInRegionWithFilter(
+ region, ImmutableMultimap.<String, String>builder().put("public-ip", pair.getPublicIp()).build()));
+ assertNotNull(filterResult);
+ PublicIpInstanceIdPair filterCompare = filterResult.last();
+ assertEquals(filterCompare, pair);
}
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiTest.java
index d230ca4..abdfae6 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiTest.java
@@ -63,11 +63,11 @@ public class ElasticIPAddressApiTest extends BaseEC2ApiTest<ElasticIPAddressApi>
.addFormParam("Action", "AssociateAddress")
.addFormParam("InstanceId", "me")
.addFormParam("PublicIp", "127.0.0.1")
- .addFormParam("Signature", "YmPyvEljuFw0INSUbQx5xAhC/1GQ4a1Ht6TdoXeMc9Y%3D")
+ .addFormParam("Signature", "nLU6xGLqXtT/dmyAvkN4BdL/3CxQlDWJYeskikhl54k%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testAssociateAddress() throws SecurityException, NoSuchMethodException, IOException {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiExpectTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiExpectTest.java
new file mode 100644
index 0000000..0c19bd7
--- /dev/null
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiExpectTest.java
@@ -0,0 +1,101 @@
+/*
+ * 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.ec2.features;
+
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static org.testng.Assert.assertNotNull;
+
+import java.util.Properties;
+
+import org.jclouds.Constants;
+import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.domain.RunningInstance;
+import org.jclouds.ec2.internal.BaseEC2ApiExpectTest;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.rest.internal.BaseRestApiExpectTest;
+import org.jclouds.util.Strings2;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * @author Andrew Bayer
+ *
+ * @see InstanceApi
+ */
+@Test(groups = "unit")
+public class InstanceApiExpectTest extends BaseEC2ApiExpectTest<EC2Api> {
+
+ protected Properties setupProperties() {
+ Properties props = super.setupProperties();
+ props.put(Constants.PROPERTY_API_VERSION, "2010-08-31");
+ return props;
+ }
+
+ HttpRequest filter =
+ HttpRequest.builder()
+ .method("POST")
+ .endpoint("https://ec2.us-east-1.amazonaws.com/")
+ .addHeader("Host", "ec2.us-east-1.amazonaws.com")
+ .payload(BaseRestApiExpectTest.payloadFromStringWithContentType(
+ "Action=DescribeInstances" +
+ "&Filter.1.Name=key-name" +
+ "&Filter.1.Value.1=" + Strings2.urlEncode("adriancole.ec21") +
+ "&Signature=%2B2ktAljlAPNUMAJUFh3poQrTvwcwWytuQFBg/ktKdTc%3D" +
+ "&SignatureMethod=HmacSHA256" +
+ "&SignatureVersion=2" +
+ "&Timestamp=2012-04-16T15%3A54%3A08.897Z" +
+ "&Version=2010-08-31" +
+ "&AWSAccessKeyId=identity",
+ "application/x-www-form-urlencoded"))
+ .build();
+
+ public void testFilterWhenResponseIs2xx() throws Exception {
+
+ HttpResponse filterResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResourceWithContentType("/describe_instances_running.xml", "text/xml")).build();
+
+
+ EC2Api apiWhenExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse,
+ filter, filterResponse);
+
+ RunningInstance instance = getOnlyElement(getOnlyElement(apiWhenExist.getInstanceApi().get().describeInstancesInRegionWithFilter("us-east-1",
+ ImmutableMultimap.<String, String>builder()
+ .put("key-name", "adriancole.ec21")
+ .build())));
+ assertNotNull(instance, "Instance should not be null");
+
+ Assert.assertEquals(instance.getId(), "i-0799056f");
+ }
+
+ public void testFilterWhenResponseIs404() throws Exception {
+
+ HttpResponse filterResponse = HttpResponse.builder().statusCode(404).build();
+
+ EC2Api apiWhenDontExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse,
+ filter, filterResponse);
+
+ Assert.assertEquals(apiWhenDontExist.getInstanceApi().get().describeInstancesInRegionWithFilter("us-east-1",
+ ImmutableMultimap.<String, String>builder()
+ .put("key-name", "adriancole.ec21")
+ .build()), ImmutableSet.of());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiLiveTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiLiveTest.java
index 57f9441..6b7818a 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiLiveTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiLiveTest.java
@@ -16,22 +16,26 @@
*/
package org.jclouds.ec2.features;
+import static com.google.common.collect.Iterables.getFirst;
import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
import java.util.Set;
+import org.jclouds.aws.AWSResponseException;
import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
import org.jclouds.ec2.EC2Api;
-import org.jclouds.ec2.EC2ApiMetadata;
import org.jclouds.ec2.domain.Reservation;
import org.jclouds.ec2.domain.RunningInstance;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import com.google.common.collect.ImmutableMultimap;
+
/**
* Tests behavior of {@code EC2Api}
*
- * @author Adrian Cole
+ * @author Adrian Cole, Andrew Bayer
*/
@Test(groups = "live", singleThreaded = true, testName = "InstanceApiLiveTest")
public class InstanceApiLiveTest extends BaseComputeServiceContextLiveTest {
@@ -55,7 +59,39 @@ public class InstanceApiLiveTest extends BaseComputeServiceContextLiveTest {
for (String region : ec2Api.getConfiguredRegions()) {
Set<? extends Reservation<? extends RunningInstance>> allResults = client.describeInstancesInRegion(region);
assertNotNull(allResults);
- assert allResults.size() >= 0 : allResults.size();
}
}
-}
+
+ @Test
+ void testFilterInstances() {
+ for (String region : view.unwrapApi(EC2Api.class).getAvailabilityZoneAndRegionApi().get().describeRegions().keySet()) {
+ Set<? extends Reservation<? extends RunningInstance>> allResults = client.describeInstancesInRegion(region);
+ assertNotNull(allResults);
+
+ if (!allResults.isEmpty()) {
+ RunningInstance instance = getFirst(getFirst(allResults, null), null);
+
+ assertNotNull(instance);
+
+ Set<? extends Reservation<? extends RunningInstance>> filterResults = client.describeInstancesInRegionWithFilter(region,
+ ImmutableMultimap.<String, String>builder()
+ .put("key-name", instance.getKeyName())
+ .build());
+
+ assertNotNull(filterResults);
+ assertTrue(!filterResults.isEmpty(), "No results found for filter, but there should be.");
+
+ }
+ }
+ }
+
+ @Test(expectedExceptions = AWSResponseException.class)
+ void testInvalidFilterInstances() {
+ for (String region : view.unwrapApi(EC2Api.class).getAvailabilityZoneAndRegionApi().get().describeRegions().keySet()) {
+ Set<? extends Reservation<? extends RunningInstance>> filterResults = client.describeInstancesInRegionWithFilter(region,
+ ImmutableMultimap.<String, String>builder()
+ .put("invalid-key", "some-value")
+ .build());
+
+ }
+ }}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiTest.java
index 2f17735..fbeb57a 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/InstanceApiTest.java
@@ -351,12 +351,12 @@ public class InstanceApiTest extends BaseEC2ApiTest<InstanceApi> {
.addFormParam("Action", "ModifyInstanceAttribute")
.addFormParam("Attribute", "userData")
.addFormParam("InstanceId", "1")
- .addFormParam("Signature", "LfUmzLM5DsACR5nQcEfGF5FPdznOwwhJ7tjhBWfHtGs%3D")
+ .addFormParam("Signature", "SfxT/1i/WokibleyEHo0zHizHisLzbDzzRxfOdnr1vY%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
.addFormParam("Value", "dGVzdA%3D%3D")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testSetUserDataForInstanceInRegion() throws SecurityException, NoSuchMethodException, IOException {
@@ -384,12 +384,12 @@ public class InstanceApiTest extends BaseEC2ApiTest<InstanceApi> {
.addFormParam("Action", "ModifyInstanceAttribute")
.addFormParam("Attribute", "ramdisk")
.addFormParam("InstanceId", "1")
- .addFormParam("Signature", "qx6NeVbihiYrKvi5Oe5LzMsGHTjS7%2BqoNhh2abt275g%3D")
+ .addFormParam("Signature", "aMQzFsknmQt1OA8Rb8aIzZoFXGK23UvrMIy8imNVUeQ%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
.addFormParam("Value", "test")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testSetRamdiskForInstanceInRegion() throws SecurityException, NoSuchMethodException, IOException {
@@ -417,12 +417,12 @@ public class InstanceApiTest extends BaseEC2ApiTest<InstanceApi> {
.addFormParam("Action", "ModifyInstanceAttribute")
.addFormParam("Attribute", "kernel")
.addFormParam("InstanceId", "1")
- .addFormParam("Signature", "juSiuoiXJzTxj3q0LUW2528HzDyP4JAcKin%2BI4AuIT0%3D")
+ .addFormParam("Signature", "GaQ9sC0uXHlN5JAMWQpYx%2Bc3XaF38qZgJex/kyqdR1E%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
.addFormParam("Value", "test")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testSetKernelForInstanceInRegion() throws SecurityException, NoSuchMethodException, IOException {
@@ -450,12 +450,12 @@ public class InstanceApiTest extends BaseEC2ApiTest<InstanceApi> {
.addFormParam("Action", "ModifyInstanceAttribute")
.addFormParam("Attribute", "disableApiTermination")
.addFormParam("InstanceId", "1")
- .addFormParam("Signature", "tiBMWWTi22BWeAjsRfuzVom0tQgsOBeYTkatMuWRrbg%3D")
+ .addFormParam("Signature", "hErzi%2Bf4jBADviJ%2BLVTTGhlHWhMR/pyPUSBZgaHC79I%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
.addFormParam("Value", "true")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testSetApiTerminationDisabledForInstanceInRegion() throws SecurityException, NoSuchMethodException,
@@ -484,12 +484,12 @@ public class InstanceApiTest extends BaseEC2ApiTest<InstanceApi> {
.addFormParam("Action", "ModifyInstanceAttribute")
.addFormParam("Attribute", "instanceType")
.addFormParam("InstanceId", "1")
- .addFormParam("Signature", "XK%2BzQmQ0S57gXIgVRMqUkKunURN9TaCJD1YWiYMAOHo%3D")
+ .addFormParam("Signature", "OYJQ1w79NoxkcrawNK6U71k3Wl78kqz2ikzTXmQCX2E%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
.addFormParam("Value", "c1.medium")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testSetInstanceTypeForInstanceInRegion() throws SecurityException, NoSuchMethodException, IOException {
@@ -517,12 +517,12 @@ public class InstanceApiTest extends BaseEC2ApiTest<InstanceApi> {
.addFormParam("Action", "ModifyInstanceAttribute")
.addFormParam("Attribute", "instanceInitiatedShutdownBehavior")
.addFormParam("InstanceId", "1")
- .addFormParam("Signature", "s5xBMLd%2BXNVp44x7C6qVE58qBov//f6yvxoM757KcZU%3D")
+ .addFormParam("Signature", "2Tgi9M9AcCv5Y%2BEXwq0SD6g8bBGtPPEgjdTtfdGZQlI%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
.addFormParam("Value", "terminate")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testSetInstanceInitiatedShutdownBehaviorForInstanceInRegion() throws SecurityException,
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/KeyPairApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/KeyPairApiExpectTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/KeyPairApiExpectTest.java
new file mode 100644
index 0000000..4b08ba7
--- /dev/null
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/KeyPairApiExpectTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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.ec2.features;
+
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static org.testng.Assert.assertEquals;
+
+import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.domain.KeyPair;
+import org.jclouds.ec2.internal.BaseEC2ApiExpectTest;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * @author Andrew Bayer
+ */
+@Test(groups = "unit", testName = "KeyPairApiExpectTest")
+public class KeyPairApiExpectTest extends BaseEC2ApiExpectTest<EC2Api> {
+
+ HttpRequest filter = HttpRequest.builder().method("POST")
+ .endpoint("https://ec2.us-east-1.amazonaws.com/")
+ .addHeader("Host", "ec2.us-east-1.amazonaws.com")
+ .addFormParam("Action", "DescribeKeyPairs")
+ .addFormParam("Filter.1.Name", "key-name")
+ .addFormParam("Filter.1.Value.1", "gsg-keypair")
+ .addFormParam("Signature", "xg8vGx%2Bv9UEG0%2BFGy%2BhincdI2ziWLbwPJvW85l%2Bvqwg%3D")
+ .addFormParam("SignatureMethod", "HmacSHA256")
+ .addFormParam("SignatureVersion", "2")
+ .addFormParam("Timestamp", "2012-04-16T15%3A54%3A08.897Z")
+ .addFormParam("Version", "2010-08-31")
+ .addFormParam("AWSAccessKeyId", "identity").build();
+
+ public void testFilterWhenResponseIs2xx() {
+ HttpResponse filterResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResourceWithContentType("/describe_keypairs.xml", "text/xml")).build();
+
+ EC2Api apiWhenExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse, filter, filterResponse);
+
+ KeyPair keyPair = getOnlyElement(apiWhenExist.getKeyPairApi().get().describeKeyPairsInRegionWithFilter("us-east-1",
+ ImmutableMultimap.<String, String>builder()
+ .put("key-name", "gsg-keypair")
+ .build()));
+
+ assertEquals(keyPair.getKeyName(), "gsg-keypair");
+ }
+
+ public void testFilterWhenResponseIs404() {
+ HttpResponse filterResponse = HttpResponse.builder().statusCode(404).build();
+
+ EC2Api apiWhenNotExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse, filter, filterResponse);
+
+ assertEquals(apiWhenNotExist.getKeyPairApi().get().describeKeyPairsInRegionWithFilter("us-east-1",
+ ImmutableMultimap.<String, String>builder()
+ .put("key-name", "gsg-keypair")
+ .build()),
+ ImmutableSet.of());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/KeyPairApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/KeyPairApiLiveTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/KeyPairApiLiveTest.java
index ad693ac..b9219a5 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/KeyPairApiLiveTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/KeyPairApiLiveTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertNotNull;
import java.util.Set;
import java.util.SortedSet;
+import org.jclouds.aws.AWSResponseException;
import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
import org.jclouds.ec2.EC2Api;
import org.jclouds.ec2.domain.KeyPair;
@@ -29,6 +30,7 @@ import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Sets;
/**
@@ -58,7 +60,7 @@ public class KeyPairApiLiveTest extends BaseComputeServiceContextLiveTest {
for (String region : ec2Api.getConfiguredRegions()) {
SortedSet<KeyPair> allResults = Sets.newTreeSet(client.describeKeyPairsInRegion(region));
assertNotNull(allResults);
- if (allResults.size() >= 1) {
+ if (!allResults.isEmpty()) {
KeyPair pair = allResults.last();
SortedSet<KeyPair> result = Sets.newTreeSet(client.describeKeyPairsInRegion(region, pair.getKeyName()));
assertNotNull(result);
@@ -68,6 +70,37 @@ public class KeyPairApiLiveTest extends BaseComputeServiceContextLiveTest {
}
}
+ @Test
+ void testDescribeKeyPairsWithFilter() {
+ for (String region : ec2Api.getConfiguredRegions()) {
+ SortedSet<KeyPair> allResults = Sets.newTreeSet(client.describeKeyPairsInRegion(region));
+ assertNotNull(allResults);
+ if (!allResults.isEmpty()) {
+ KeyPair pair = allResults.last();
+ SortedSet<KeyPair> result = Sets.newTreeSet(client.describeKeyPairsInRegionWithFilter(region,
+ ImmutableMultimap.<String, String>builder()
+ .put("key-name", pair.getKeyName()).build()));
+ assertNotNull(result);
+ KeyPair compare = result.last();
+ assertEquals(compare, pair);
+ }
+ }
+ }
+
+ @Test(expectedExceptions = AWSResponseException.class)
+ void testDescribeKeyPairsWithInvalidFilter() {
+ for (String region : ec2Api.getConfiguredRegions()) {
+ SortedSet<KeyPair> allResults = Sets.newTreeSet(client.describeKeyPairsInRegion(region));
+ assertNotNull(allResults);
+ if (!allResults.isEmpty()) {
+ KeyPair pair = allResults.last();
+ SortedSet<KeyPair> result = Sets.newTreeSet(client.describeKeyPairsInRegionWithFilter(region,
+ ImmutableMultimap.<String, String>builder()
+ .put("invalid-filter", pair.getKeyName()).build()));
+ }
+ }
+ }
+
public static final String PREFIX = System.getProperty("user.name") + "-ec2";
@Test
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiExpectTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiExpectTest.java
new file mode 100644
index 0000000..9e5491e
--- /dev/null
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiExpectTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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.ec2.features;
+
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static org.testng.Assert.assertEquals;
+
+import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.domain.SecurityGroup;
+import org.jclouds.ec2.internal.BaseEC2ApiExpectTest;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * @author Andrew Bayer
+ */
+@Test(groups = "unit", testName = "SecurityGroupApiExpectTest")
+public class SecurityGroupApiExpectTest extends BaseEC2ApiExpectTest<EC2Api> {
+
+ HttpRequest filter = HttpRequest.builder().method("POST")
+ .endpoint("https://ec2.us-east-1.amazonaws.com/")
+ .addHeader("Host", "ec2.us-east-1.amazonaws.com")
+ .addFormParam("Action", "DescribeSecurityGroups")
+ .addFormParam("Filter.1.Name", "owner-id")
+ .addFormParam("Filter.1.Value.1", "993194456877")
+ .addFormParam("Signature", "zk8EEWkG9Hi0bBLPueF9WdTUKapxQqUXgyJTxeZHXBc%3D")
+ .addFormParam("SignatureMethod", "HmacSHA256")
+ .addFormParam("SignatureVersion", "2")
+ .addFormParam("Timestamp", "2012-04-16T15%3A54%3A08.897Z")
+ .addFormParam("Version", "2010-08-31")
+ .addFormParam("AWSAccessKeyId", "identity").build();
+
+ public void testFilterWhenResponseIs2xx() {
+ HttpResponse filterResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResourceWithContentType("/describe_securitygroups_extension_single.xml", "text/xml")).build();
+
+ EC2Api apiWhenExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse, filter, filterResponse);
+
+ SecurityGroup group = getOnlyElement(apiWhenExist.getSecurityGroupApi().get().describeSecurityGroupsInRegionWithFilter("us-east-1",
+ ImmutableMultimap.<String, String>builder()
+ .put("owner-id", "993194456877")
+ .build()));
+
+ assertEquals(group.getId(), "sg-3c6ef654");
+ }
+
+ public void testFilterWhenResponseIs404() {
+ HttpResponse filterResponse = HttpResponse.builder().statusCode(404).build();
+
+ EC2Api apiWhenNotExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse, filter, filterResponse);
+
+ assertEquals(apiWhenNotExist.getSecurityGroupApi().get().describeSecurityGroupsInRegionWithFilter("us-east-1",
+ ImmutableMultimap.<String, String>builder()
+ .put("owner-id", "993194456877")
+ .build()),
+ ImmutableSet.of());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiLiveTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiLiveTest.java
index 220e14f..edfc3ca 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiLiveTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiLiveTest.java
@@ -27,9 +27,9 @@ import static org.testng.Assert.assertTrue;
import java.util.Set;
+import org.jclouds.aws.AWSResponseException;
import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
import org.jclouds.ec2.EC2Api;
-import org.jclouds.ec2.EC2ApiMetadata;
import org.jclouds.ec2.domain.SecurityGroup;
import org.jclouds.ec2.domain.UserIdGroupPair;
import org.jclouds.net.domain.IpPermission;
@@ -70,20 +70,66 @@ public class SecurityGroupApiLiveTest extends BaseComputeServiceContextLiveTest
for (String region : ec2Api.getConfiguredRegions()) {
Set<SecurityGroup> allResults = client.describeSecurityGroupsInRegion(region);
assertNotNull(allResults);
- if (allResults.size() >= 1) {
+ if (!allResults.isEmpty()) {
final SecurityGroup group = getLast(allResults);
// in case there are multiple groups with the same name, which is the case with VPC
ImmutableSet<SecurityGroup> expected = FluentIterable.from(allResults)
- .filter(new Predicate<SecurityGroup>() {
- @Override
- public boolean apply(SecurityGroup in) {
- return group.getName().equals(in.getName());
- }
- }).toSet();
+ .filter(new Predicate<SecurityGroup>() {
+ @Override
+ public boolean apply(SecurityGroup in) {
+ return group.getName().equals(in.getName());
+ }
+ }).toSet();
ImmutableSet<SecurityGroup> result = ImmutableSet.copyOf(client.describeSecurityGroupsInRegion(region,
- group.getName()));
+ group.getName()));
// the above command has a chance of returning less groups than the original
- assertTrue(expected.containsAll(result));
+ assertTrue(expected.containsAll(result), "group(s) for name not found");
+ }
+ }
+ }
+
+ @Test
+ void testFilter() {
+ for (String region : ec2Api.getConfiguredRegions()) {
+ Set<SecurityGroup> allResults = client.describeSecurityGroupsInRegion(region);
+ assertNotNull(allResults);
+ if (!allResults.isEmpty()) {
+ final SecurityGroup group = getLast(allResults);
+ // in case there are multiple groups with the same name, which is the case with VPC
+ ImmutableSet<SecurityGroup> expected = FluentIterable.from(allResults)
+ .filter(new Predicate<SecurityGroup>() {
+ @Override
+ public boolean apply(SecurityGroup in) {
+ return group.getName().equals(in.getName());
+ }
+ }).toSet();
+ ImmutableSet<SecurityGroup> result = ImmutableSet.copyOf(client.describeSecurityGroupsInRegionWithFilter(region,
+ ImmutableMultimap.<String, String>builder()
+ .put("group-name", group.getName()).build()));
+ // the above command has a chance of returning less groups than the original
+ assertTrue(expected.containsAll(result), "group(s) for name not found");
+ }
+ }
+ }
+
+ @Test(expectedExceptions = AWSResponseException.class)
+ void testFilterInvalid() {
+ for (String region : ec2Api.getConfiguredRegions()) {
+ Set<SecurityGroup> allResults = client.describeSecurityGroupsInRegion(region);
+ assertNotNull(allResults);
+ if (!allResults.isEmpty()) {
+ final SecurityGroup group = getLast(allResults);
+ // in case there are multiple groups with the same name, which is the case with VPC
+ ImmutableSet<SecurityGroup> expected = FluentIterable.from(allResults)
+ .filter(new Predicate<SecurityGroup>() {
+ @Override
+ public boolean apply(SecurityGroup in) {
+ return group.getName().equals(in.getName());
+ }
+ }).toSet();
+ ImmutableSet<SecurityGroup> result = ImmutableSet.copyOf(client.describeSecurityGroupsInRegionWithFilter(region,
+ ImmutableMultimap.<String, String>builder()
+ .put("invalid-filter", group.getName()).build()));
}
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiTest.java
index 85b7374..b5d2d17 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/SecurityGroupApiTest.java
@@ -65,11 +65,11 @@ public class SecurityGroupApiTest extends BaseEC2ApiTest<SecurityGroupApi> {
.addFormParam("Action", "CreateSecurityGroup")
.addFormParam("GroupDescription", "description")
.addFormParam("GroupName", "name")
- .addFormParam("Signature", "F3o0gnZcX9sWrtDUhVwi3k5GY2JKLP0Dhi6CcEqK2vE%3D")
+ .addFormParam("Signature", "msp9zFJLrRXYsVu/vbSZE8tQVS/TEvF0Cu/ldYVFdcA%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testCreateSecurityGroup() throws SecurityException, NoSuchMethodException, IOException {
@@ -153,12 +153,12 @@ public class SecurityGroupApiTest extends BaseEC2ApiTest<SecurityGroupApi> {
.addFormParam("FromPort", "6000")
.addFormParam("GroupName", "group")
.addFormParam("IpProtocol", "tcp")
- .addFormParam("Signature", "6NQega9YUGDxdwk3Y0Hv71u/lHi%2B0D6qMCJLpJVD/aI%3D")
+ .addFormParam("Signature", "xeaZpQ1Lvhp%2BqETpEzOPGHW6isAWYwgtBdCnTqWzkAw%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
.addFormParam("ToPort", "7000")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testAuthorizeSecurityGroupIngressCidr() throws SecurityException, NoSuchMethodException, IOException {
@@ -207,12 +207,12 @@ public class SecurityGroupApiTest extends BaseEC2ApiTest<SecurityGroupApi> {
.addFormParam("FromPort", "6000")
.addFormParam("GroupName", "group")
.addFormParam("IpProtocol", "tcp")
- .addFormParam("Signature", "WPlDYXI8P6Ip4F2JIEP3lWrVlP/7gxbZvlshKYlrvxk%3D")
+ .addFormParam("Signature", "P5lxCXMwz6FE8Wo79nEMh8clgLDK3rZxCPRTOKssKKQ%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
.addFormParam("ToPort", "7000")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testRevokeSecurityGroupIngressCidr() throws SecurityException, NoSuchMethodException, IOException {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/WindowsApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/WindowsApiExpectTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/WindowsApiExpectTest.java
index 87dfb87..457b08d 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/WindowsApiExpectTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/WindowsApiExpectTest.java
@@ -16,16 +16,21 @@
*/
package org.jclouds.ec2.features;
+import static com.google.common.collect.Iterables.getOnlyElement;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.domain.BundleTask;
import org.jclouds.ec2.internal.BaseEC2ApiExpectTest;
import org.jclouds.ec2.parse.GetPasswordDataResponseTest;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
import org.testng.annotations.Test;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+
/**
* @author Adrian Cole
*/
@@ -40,16 +45,28 @@ public class WindowsApiExpectTest extends BaseEC2ApiExpectTest<EC2Api> {
payloadFromStringWithContentType(
"Action=GetPasswordData" +
"&InstanceId=i-2574e22a" +
- "&Signature=vX1Tskc4VuBUWPqsJ%2BzcjEj6/2iMCKzqjWnKFXRkDdA%3D" +
+ "&Signature=PMr4kU4p%2BSF2ISHXAFUme1kNh%2BCqftIUQchuw3vhKCw%3D" +
"&SignatureMethod=HmacSHA256" +
"&SignatureVersion=2" +
"&Timestamp=2012-04-16T15%3A54%3A08.897Z" +
- "&Version=2010-06-15" +
+ "&Version=2010-08-31" +
"&AWSAccessKeyId=identity",
"application/x-www-form-urlencoded"))
.build();
-
-
+
+ HttpRequest filter = HttpRequest.builder().method("POST")
+ .endpoint("https://ec2.us-east-1.amazonaws.com/")
+ .addHeader("Host", "ec2.us-east-1.amazonaws.com")
+ .addFormParam("Action", "DescribeBundleTasks")
+ .addFormParam("Filter.1.Name", "instance-id")
+ .addFormParam("Filter.1.Value.1", "i-12345678")
+ .addFormParam("Signature", "y0y3UBUKU/uYwbWPTCbkXzprU%2B8fMhg5LfF%2B5hWU2F4%3D")
+ .addFormParam("SignatureMethod", "HmacSHA256")
+ .addFormParam("SignatureVersion", "2")
+ .addFormParam("Timestamp", "2012-04-16T15%3A54%3A08.897Z")
+ .addFormParam("Version", "2010-08-31")
+ .addFormParam("AWSAccessKeyId", "identity").build();
+
public void testGetPasswordDataWhenResponseIs2xx() throws Exception {
HttpResponse getResponse = HttpResponse.builder().statusCode(200)
@@ -68,4 +85,31 @@ public class WindowsApiExpectTest extends BaseEC2ApiExpectTest<EC2Api> {
assertNull(apiWhenDontExist.getWindowsApi().get().getPasswordDataForInstance("i-2574e22a"));
}
+
+ public void testFilterBundleTasksWhenResponseIs2xx() {
+ HttpResponse filterResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResourceWithContentType("/describe_bundle_tasks.xml", "text/xml")).build();
+
+ EC2Api apiWhenExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse, filter, filterResponse);
+
+ BundleTask task = getOnlyElement(apiWhenExist.getWindowsApi().get().describeBundleTasksInRegionWithFilter("us-east-1",
+ ImmutableMultimap.<String, String>builder()
+ .put("instance-id", "i-12345678")
+ .build()));
+
+ assertEquals(task.getBundleId(), "bun-c1a540a8");
+ }
+
+ public void testFilterBundleTasksWhenResponseIs404() {
+ HttpResponse filterResponse = HttpResponse.builder().statusCode(404).build();
+
+ EC2Api apiWhenNotExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse, filter, filterResponse);
+
+ assertEquals(apiWhenNotExist.getWindowsApi().get().describeBundleTasksInRegionWithFilter("us-east-1",
+ ImmutableMultimap.<String, String>builder()
+ .put("instance-id", "i-12345678")
+ .build()),
+ ImmutableSet.of());
+ }
+
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/features/WindowsApiTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/features/WindowsApiTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/features/WindowsApiTest.java
index 572b247..d6b44e7 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/features/WindowsApiTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/features/WindowsApiTest.java
@@ -45,7 +45,7 @@ public class WindowsApiTest extends BaseEC2ApiTest<WindowsApi> {
.addHeader("Host", "ec2.us-east-1.amazonaws.com")
.addFormParam("Action", "BundleInstance")
.addFormParam("InstanceId", "i-e468cd8d")
- .addFormParam("Signature", "Uw5gH4eN3H8KXeFfIVLDDt88ApYn8L4pkf31hpojpcM%3D")
+ .addFormParam("Signature", "78A6SjliGJg%2BKzaICB9I4bqEXFoNa4FKonuIwAj9hik%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Storage.S3.Bucket", "my-bucket")
@@ -53,7 +53,7 @@ public class WindowsApiTest extends BaseEC2ApiTest<WindowsApi> {
.addFormParam("Storage.S3.UploadPolicy", "eyJleHBpcmF0aW9uIjogIjIwMDgtMDgtMzBUMDg6NDk6MDlaIiwiY29uZGl0aW9ucyI6IFt7ImJ1Y2tldCI6ICJteS1idWNrZXQifSxbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAibXktbmV3LWltYWdlIl1dfQ%3D%3D")
.addFormParam("Storage.S3.UploadPolicySignature", "ih/iohGe0A7y4QVRbKaq6BZShzUsmBEJEa9AdFbxM6Y%3D")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testBundleInstanceInRegion() throws SecurityException, NoSuchMethodException, IOException {
@@ -88,7 +88,7 @@ public class WindowsApiTest extends BaseEC2ApiTest<WindowsApi> {
.addHeader("Host", "ec2.us-east-1.amazonaws.com")
.addFormParam("Action", "BundleInstance")
.addFormParam("InstanceId","i-e468cd8d")
- .addFormParam("Signature", "ahFjX9Tv/DGMFq9EFdF1mWSAnTKyQyyIj7dWJxBOhaE%3D")
+ .addFormParam("Signature", "9UbWwb%2BnO2vHn2O59K9FpmaK445RwX7vXsruHRznwik%3D")
.addFormParam("SignatureMethod", "HmacSHA256")
.addFormParam("SignatureVersion", "2")
.addFormParam("Storage.S3.AWSAccessKeyId", "10QMXFEV71ZS32XQFTR2")
@@ -97,7 +97,7 @@ public class WindowsApiTest extends BaseEC2ApiTest<WindowsApi> {
.addFormParam("Storage.S3.UploadPolicy", "eyJleHBpcmF0aW9uIjogIjIwMDgtMDgtMzBUMDg6NDk6MDlaIiwiY29uZGl0aW9ucyI6IFt7ImJ1Y2tldCI6ICJteS1idWNrZXQifSxbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAibXktbmV3LWltYWdlIl1dfQ%3D%3D")
.addFormParam("Storage.S3.UploadPolicySignature", "ih/iohGe0A7y4QVRbKaq6BZShzUsmBEJEa9AdFbxM6Y%3D")
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
- .addFormParam("Version", "2010-06-15")
+ .addFormParam("Version", "2010-08-31")
.addFormParam("AWSAccessKeyId", "identity").build();
public void testBundleInstanceInRegionOptions() throws SecurityException, NoSuchMethodException, IOException {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/internal/BaseEC2ExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/internal/BaseEC2ExpectTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/internal/BaseEC2ExpectTest.java
index 993bc34..29808b7 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/internal/BaseEC2ExpectTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/internal/BaseEC2ExpectTest.java
@@ -72,7 +72,7 @@ public abstract class BaseEC2ExpectTest<T> extends BaseRestClientExpectTest<T> {
.endpoint("https://ec2." + region + ".amazonaws.com/")
.addHeader("Host", "ec2." + region + ".amazonaws.com")
.payload(payloadFromStringWithContentType(
- "Action=DescribeAvailabilityZones&Version=2010-06-15",
+ "Action=DescribeAvailabilityZones&Version=2010-08-31",
MediaType.APPLICATION_FORM_URLENCODED)).build()),
HttpResponse.builder().statusCode(200)
.payload(payloadFromResourceWithContentType(
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/java/org/jclouds/ec2/xml/DescribeRegionsResponseHandlerTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/xml/DescribeRegionsResponseHandlerTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/xml/DescribeRegionsResponseHandlerTest.java
index 6d8bc58..1e444e3 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/xml/DescribeRegionsResponseHandlerTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/xml/DescribeRegionsResponseHandlerTest.java
@@ -85,7 +85,7 @@ public class DescribeRegionsResponseHandlerTest extends BaseHandlerTest {
public void testEuc() {
InputStream is = Strings2
- .toInputStream("<DescribeRegionsResponse xmlns=\"http://ec2.amazonaws.com/doc/2010-06-15/\"><requestId>6a3b36f9-9ff4-47cf-87e3-285b08fbe5e5</requestId><regionInfo><item><regionName>Eucalyptus</regionName><regionEndpoint>http://173.205.188.130:8773/services/Eucalyptus</regionEndpoint></item><item><regionName>Walrus</regionName><regionEndpoint>http://173.205.188.130:8773/services/Walrus</regionEndpoint></item></regionInfo></DescribeRegionsResponse>");
+ .toInputStream("<DescribeRegionsResponse xmlns=\"http://ec2.amazonaws.com/doc/2010-08-31/\"><requestId>6a3b36f9-9ff4-47cf-87e3-285b08fbe5e5</requestId><regionInfo><item><regionName>Eucalyptus</regionName><regionEndpoint>http://173.205.188.130:8773/services/Eucalyptus</regionEndpoint></item><item><regionName>Walrus</regionName><regionEndpoint>http://173.205.188.130:8773/services/Walrus</regionEndpoint></item></regionInfo></DescribeRegionsResponse>");
Map<String, URI> expected = ImmutableMap.<String, URI> of("Eucalyptus",
URI.create("http://173.205.188.130:8773/services/Eucalyptus"));
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/resources/describe_addresses_single.xml
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/resources/describe_addresses_single.xml b/apis/ec2/src/test/resources/describe_addresses_single.xml
new file mode 100644
index 0000000..d9179bd
--- /dev/null
+++ b/apis/ec2/src/test/resources/describe_addresses_single.xml
@@ -0,0 +1,8 @@
+<DescribeAddressesResponse xmlns="http://ec2.amazonaws.com/doc/2009-11-30/">
+ <addressesSet>
+ <item>
+ <instanceId>i-f15ebb98</instanceId>
+ <publicIp>67.202.55.255</publicIp>
+ </item>
+ </addressesSet>
+</DescribeAddressesResponse>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/resources/describe_securitygroups_empty.xml
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/resources/describe_securitygroups_empty.xml b/apis/ec2/src/test/resources/describe_securitygroups_empty.xml
index ca89f4e..e3336a7 100644
--- a/apis/ec2/src/test/resources/describe_securitygroups_empty.xml
+++ b/apis/ec2/src/test/resources/describe_securitygroups_empty.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" ?>
<DescribeSecurityGroupsResponse
- xmlns="http://ec2.amazonaws.com/doc/2010-06-15/">
+ xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
<requestId>L6EFIZVPJS76T3K5-0UV</requestId>
<securityGroupInfo>
<item>
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/resources/describe_volumes_single.xml
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/resources/describe_volumes_single.xml b/apis/ec2/src/test/resources/describe_volumes_single.xml
new file mode 100644
index 0000000..fcc10a5
--- /dev/null
+++ b/apis/ec2/src/test/resources/describe_volumes_single.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<DescribeVolumesResponse xmlns="http://ec2.amazonaws.com/doc/2009-11-30/">
+ <requestId>31ab5542-e479-44cb-aa94-c340c2481e0b</requestId>
+ <volumeSet>
+ <item>
+ <volumeId>vol-4282672b</volumeId>
+ <size>800</size>
+ <snapshotId>snap-536d1b3a</snapshotId>
+ <availabilityZone>us-east-1a</availabilityZone>
+ <status>in-use</status>
+ <createTime>2008-05-07T11:51:50.000Z</createTime>
+ <attachmentSet />
+ </item>
+ </volumeSet>
+</DescribeVolumesResponse>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/apis/ec2/src/test/resources/run_instances_cloudbridge.xml
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/resources/run_instances_cloudbridge.xml b/apis/ec2/src/test/resources/run_instances_cloudbridge.xml
index 37d5ae8..7dc31f0 100644
--- a/apis/ec2/src/test/resources/run_instances_cloudbridge.xml
+++ b/apis/ec2/src/test/resources/run_instances_cloudbridge.xml
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<RunInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-06-15/">
+<RunInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
<requestId>56eeacd9-c790-45c3-85f3-e4380b55e1d8</requestId>
<reservationId>r-f847a6ca</reservationId>
<ownerId>55ed6530-9b32-48f1-acb7-6ec0d3255a65</ownerId>
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/AWSInstanceApi.java
----------------------------------------------------------------------
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/AWSInstanceApi.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/AWSInstanceApi.java
index 5a26707..4ccb4a2 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/AWSInstanceApi.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/AWSInstanceApi.java
@@ -30,11 +30,12 @@ import org.jclouds.aws.ec2.domain.AWSRunningInstance;
import org.jclouds.aws.ec2.xml.AWSDescribeInstancesResponseHandler;
import org.jclouds.aws.ec2.xml.AWSRunInstancesResponseHandler;
import org.jclouds.aws.filters.FormSigner;
+import org.jclouds.ec2.binders.BindFiltersToIndexedFormParams;
import org.jclouds.ec2.binders.BindInstanceIdsToIndexedFormParams;
import org.jclouds.ec2.binders.IfNotNullBindAvailabilityZoneToFormParam;
import org.jclouds.ec2.domain.Reservation;
-import org.jclouds.ec2.options.RunInstancesOptions;
import org.jclouds.ec2.features.InstanceApi;
+import org.jclouds.ec2.options.RunInstancesOptions;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.location.functions.RegionToEndpointOrProviderIfNull;
import org.jclouds.rest.annotations.BinderParam;
@@ -45,6 +46,8 @@ import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.VirtualHost;
import org.jclouds.rest.annotations.XMLResponseParser;
+import com.google.common.collect.Multimap;
+
/**
* Provides access to EC2 Instance Services via their REST API.
* <p/>
@@ -66,6 +69,16 @@ public interface AWSInstanceApi extends InstanceApi {
@EndpointParam(parser = RegionToEndpointOrProviderIfNull.class) @Nullable String region,
@BinderParam(BindInstanceIdsToIndexedFormParams.class) String... instanceIds);
+ @Named("DescribeInstances")
+ @POST
+ @Path("/")
+ @FormParams(keys = ACTION, values = "DescribeInstances")
+ @XMLResponseParser(AWSDescribeInstancesResponseHandler.class)
+ @Fallback(EmptySetOnNotFoundOr404.class)
+ Set<? extends Reservation<? extends AWSRunningInstance>> describeInstancesInRegionWithFilter(
+ @EndpointParam(parser = RegionToEndpointOrProviderIfNull.class) @Nullable String region,
+ @BinderParam(BindFiltersToIndexedFormParams.class) Multimap<String, String> filter);
+
@Named("RunInstances")
@Override
@POST
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/AWSSecurityGroupApi.java
----------------------------------------------------------------------
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/AWSSecurityGroupApi.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/AWSSecurityGroupApi.java
index 6f0f761..161afba 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/AWSSecurityGroupApi.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/AWSSecurityGroupApi.java
@@ -31,6 +31,7 @@ import org.jclouds.aws.ec2.options.CreateSecurityGroupOptions;
import org.jclouds.aws.ec2.xml.AWSEC2DescribeSecurityGroupsResponseHandler;
import org.jclouds.aws.ec2.xml.CreateSecurityGroupResponseHandler;
import org.jclouds.aws.filters.FormSigner;
+import org.jclouds.ec2.binders.BindFiltersToIndexedFormParams;
import org.jclouds.ec2.binders.BindGroupIdsToIndexedFormParams;
import org.jclouds.ec2.binders.BindGroupNamesToIndexedFormParams;
import org.jclouds.ec2.binders.BindIpPermissionToIndexedFormParams;
@@ -49,6 +50,7 @@ import org.jclouds.rest.annotations.VirtualHost;
import org.jclouds.rest.annotations.XMLResponseParser;
import com.google.common.annotations.Beta;
+import com.google.common.collect.Multimap;
/**
* Provides access to EC2 SecurityGroup Services via their REST API.
@@ -132,4 +134,14 @@ public interface AWSSecurityGroupApi extends SecurityGroupApi {
Set<SecurityGroup> describeSecurityGroupsInRegion(
@EndpointParam(parser = RegionToEndpointOrProviderIfNull.class) @Nullable String region,
@BinderParam(BindGroupNamesToIndexedFormParams.class) String... securityGroupNames);
+
+ @Named("DescribeSecurityGroups")
+ @POST
+ @Path("/")
+ @FormParams(keys = ACTION, values = "DescribeSecurityGroups")
+ @XMLResponseParser(AWSEC2DescribeSecurityGroupsResponseHandler.class)
+ @Fallback(EmptySetOnNotFoundOr404.class)
+ Set<SecurityGroup> describeSecurityGroupsInRegionWithFilter(
+ @EndpointParam(parser = RegionToEndpointOrProviderIfNull.class) @Nullable String region,
+ @BinderParam(BindFiltersToIndexedFormParams.class) Multimap<String, String> filter);
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/2077da28/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/PlacementGroupApi.java
----------------------------------------------------------------------
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/PlacementGroupApi.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/PlacementGroupApi.java
index 1acc121..ec6f986 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/PlacementGroupApi.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/features/PlacementGroupApi.java
@@ -30,6 +30,7 @@ import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
import org.jclouds.aws.ec2.domain.PlacementGroup;
import org.jclouds.aws.ec2.xml.DescribePlacementGroupsResponseHandler;
import org.jclouds.aws.filters.FormSigner;
+import org.jclouds.ec2.binders.BindFiltersToIndexedFormParams;
import org.jclouds.ec2.binders.BindGroupNamesToIndexedFormParams;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.location.functions.RegionToEndpointOrProviderIfNull;
@@ -41,6 +42,8 @@ import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.VirtualHost;
import org.jclouds.rest.annotations.XMLResponseParser;
+import com.google.common.collect.Multimap;
+
/**
* Provides access to EC2 Placement Groups via their REST API.
* <p/>
@@ -133,4 +136,27 @@ public interface PlacementGroupApi {
@EndpointParam(parser = RegionToEndpointOrProviderIfNull.class) @Nullable String region,
@BinderParam(BindGroupNamesToIndexedFormParams.class) String... placementGroupIds);
+ /**
+ *
+ * Returns information about one or more placement groups in your account.
+ *
+ * @param region
+ * The bundleTask ID is tied to the Region.
+ * @param filter
+ * Multimap of filter key/values
+ *
+ * @see #deletePlacementGroupInRegion
+ * @see #createPlacementGroupInRegion
+ * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribePlacementGroups.html"
+ * />
+ */
+ @Named("DescribePlacementGroups")
+ @POST
+ @Path("/")
+ @FormParams(keys = ACTION, values = "DescribePlacementGroups")
+ @XMLResponseParser(DescribePlacementGroupsResponseHandler.class)
+ @Fallback(EmptySetOnNotFoundOr404.class)
+ Set<PlacementGroup> describePlacementGroupsInRegionWithFilter(
+ @EndpointParam(parser = RegionToEndpointOrProviderIfNull.class) @Nullable String region,
+ @BinderParam(BindFiltersToIndexedFormParams.class) Multimap<String, String> filter);
}