http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiTest.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiTest.java
 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiTest.java
new file mode 100644
index 0000000..f47e65b
--- /dev/null
+++ 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticBlockStoreApiTest.java
@@ -0,0 +1,399 @@
+/*
+ * 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 org.jclouds.ec2.options.DescribeSnapshotsOptions.Builder.ownedBy;
+import static org.jclouds.ec2.options.DetachVolumeOptions.Builder.fromInstance;
+import static org.jclouds.reflect.Reflection2.method;
+
+import java.io.IOException;
+
+import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404;
+import org.jclouds.ec2.EC2Fallbacks.VoidOnVolumeAvailable;
+import org.jclouds.ec2.options.CreateSnapshotOptions;
+import org.jclouds.ec2.options.DescribeSnapshotsOptions;
+import org.jclouds.ec2.options.DetachVolumeOptions;
+import org.jclouds.ec2.xml.AttachmentHandler;
+import org.jclouds.ec2.xml.DescribeSnapshotsResponseHandler;
+import org.jclouds.ec2.xml.DescribeVolumesResponseHandler;
+import org.jclouds.ec2.xml.PermissionHandler;
+import org.jclouds.ec2.xml.SnapshotHandler;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.http.functions.ReleasePayloadAndReturn;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.Invokable;
+/**
+ * Tests behavior of {@code ElasticBlockStoreApi}
+ */
+// NOTE:without testName, this will not call @Before* and fail w/NPE during 
surefire
+@Test(groups = "unit", testName = "ElasticBlockStoreApiTest")
+public class ElasticBlockStoreApiTest extends 
BaseEC2ApiTest<ElasticBlockStoreApi> {
+
+   public void testDeleteVolume() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"deleteVolumeInRegion", String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "id"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, "Action=DeleteVolume&VolumeId=id",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest describeVolumes = HttpRequest.builder().method("POST")
+                                            
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                            .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                            .addFormParam("Action", 
"DescribeVolumes")
+                                            .addFormParam("Signature", 
"nNxWg5dwYZEQu1QCzCtNp7iDmPR8wXXdKhWmLEKFLGI%3D")
+                                            .addFormParam("SignatureMethod", 
"HmacSHA256")
+                                            .addFormParam("SignatureVersion", 
"2")
+                                            .addFormParam("Timestamp", 
"2009-11-08T15%3A54%3A08.897Z")
+                                            .addFormParam("Version", 
"2010-08-31")
+                                            .addFormParam("AWSAccessKeyId", 
"identity").build();
+
+   public void testDescribeVolumes() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"describeVolumesInRegion", String.class,
+            String[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList((String) null));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+      
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
describeVolumes.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+      
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
DescribeVolumesResponseHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testDescribeVolumesArgs() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"describeVolumesInRegion", String.class,
+               String[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", "2"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
"Action=DescribeVolumes&VolumeId.1=1&VolumeId.2=2",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
DescribeVolumesResponseHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest attachVolume = HttpRequest.builder().method("POST")
+                                         
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                         .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                         .addFormParam("Action", 
"AttachVolume")
+                                         .addFormParam("Device", "/device")
+                                         .addFormParam("InstanceId", 
"instanceId")
+                                         .addFormParam("Signature", 
"0%2BUY5oCQzoJapEHq4Dl2R/0nAA8uXEHqvHbnnNI5NcA%3D")
+                                         .addFormParam("SignatureMethod", 
"HmacSHA256")
+                                         .addFormParam("SignatureVersion", "2")
+                                         .addFormParam("Timestamp", 
"2009-11-08T15%3A54%3A08.897Z")
+                                         .addFormParam("Version", "2010-08-31")
+                                         .addFormParam("VolumeId", "id")
+                                         .addFormParam("AWSAccessKeyId", 
"identity").build();
+
+   public void testAttachVolume() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"attachVolumeInRegion", String.class, String.class,
+               String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "id", "instanceId", "/device"));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+      
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
attachVolume.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, AttachmentHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest detachVolume = HttpRequest.builder().method("POST")
+                                         
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                         .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                         .addFormParam("Action", 
"DetachVolume")
+                                         .addFormParam("Force", "false")
+                                         .addFormParam("Signature", 
"tfNB1g2WVqb3EwvBJlk4duU1H1fDOa1SBstsm1elpbg%3D")
+                                         .addFormParam("SignatureMethod", 
"HmacSHA256")
+                                         .addFormParam("SignatureVersion", "2")
+                                         .addFormParam("Timestamp", 
"2009-11-08T15%3A54%3A08.897Z")
+                                         .addFormParam("Version", "2010-08-31")
+                                         .addFormParam("VolumeId", "id")
+                                         .addFormParam("AWSAccessKeyId", 
"identity").build();
+
+   public void testDetachVolume() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"detachVolumeInRegion", String.class, String.class,
+               boolean.class, DetachVolumeOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "id", false));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+      
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
detachVolume.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+      
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, VoidOnVolumeAvailable.class);
+
+      checkFilters(request);
+   }
+
+   HttpRequest detachVolumeOptions = HttpRequest.builder().method("POST")
+                                                
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                                .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                                .addFormParam("Action", 
"DetachVolume")
+                                                .addFormParam("Device", 
"/device")
+                                                .addFormParam("Force", "true")
+                                                .addFormParam("InstanceId", 
"instanceId")
+                                                .addFormParam("Signature", 
"VFhgwdkKBKXr/dEn2gvk6Vqq3JIunw4zZgM2Tt/ouME%3D")
+                                                
.addFormParam("SignatureMethod", "HmacSHA256")
+                                                
.addFormParam("SignatureVersion", "2")
+                                                .addFormParam("Timestamp", 
"2009-11-08T15%3A54%3A08.897Z")
+                                                .addFormParam("Version", 
"2010-08-31")
+                                                .addFormParam("VolumeId", "id")
+                                                
.addFormParam("AWSAccessKeyId", "identity").build();
+
+   public void testDetachVolumeOptions() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"detachVolumeInRegion", String.class, String.class,
+               boolean.class, DetachVolumeOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "id", true, 
fromInstance("instanceId").fromDevice(
+               "/device")));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+      
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
detachVolumeOptions.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+      
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, VoidOnVolumeAvailable.class);
+
+      checkFilters(request);
+   }
+
+   public void testCreateSnapshot() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"createSnapshotInRegion", String.class,
+               String.class, CreateSnapshotOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "volumeId"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, "Action=CreateSnapshot&VolumeId=volumeId",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, SnapshotHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testCreateSnapshotOptions() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"createSnapshotInRegion", String.class,
+               String.class, CreateSnapshotOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "volumeId", CreateSnapshotOptions.Builder
+               .withDescription("description")));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request,
+               
"Action=CreateSnapshot&VolumeId=volumeId&Description=description",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, SnapshotHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testDescribeSnapshots() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"describeSnapshotsInRegion", String.class,
+               DescribeSnapshotsOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList((String) null));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, "Action=DescribeSnapshots", 
"application/x-www-form-urlencoded",
+               false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
DescribeSnapshotsResponseHandler.class);
+      assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+      checkFilters(request);
+   }
+
+   public void testDescribeSnapshotsArgs() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"describeSnapshotsInRegion", String.class,
+               DescribeSnapshotsOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, ownedBy("o1", "o2").restorableBy("r1", "r2")
+               .snapshotIds("s1", "s2")));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(
+               request,
+               
"Action=DescribeSnapshots&Owner.1=o1&Owner.2=o2&RestorableBy.1=r1&RestorableBy.2=r2&SnapshotId.1=s1&SnapshotId.2=s2",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
DescribeSnapshotsResponseHandler.class);
+      assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+      checkFilters(request);
+   }
+
+   public void testGetCreateVolumePermissionForSnapshot() throws 
SecurityException, NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"getCreateVolumePermissionForSnapshotInRegion",
+               String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "snapshotId"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(
+               request,
+               
"Action=DescribeSnapshotAttribute&Attribute=createVolumePermission&SnapshotId=snapshotId",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, PermissionHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest addCreateVolumePermissionsToSnapshot = 
HttpRequest.builder().method("POST")
+                                                                 
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                                                 
.addHeader("Host", "ec2.us-east-1.amazonaws.com")
+                                                                 
.addFormParam("Action", "ModifySnapshotAttribute")
+                                                                 
.addFormParam("Attribute", "createVolumePermission")
+                                                                 
.addFormParam("OperationType", "add")
+                                                                 
.addFormParam("Signature", "s8m8DqQRXmecWguuRjxfl3Ibd%2B1AjjktGzTlJLUTcPc%3D")
+                                                                 
.addFormParam("SignatureMethod", "HmacSHA256")
+                                                                 
.addFormParam("SignatureVersion", "2")
+                                                                 
.addFormParam("SnapshotId", "snapshotId")
+                                                                 
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
+                                                                 
.addFormParam("UserGroup.1", "all")
+                                                                 
.addFormParam("UserId.1", "bob")
+                                                                 
.addFormParam("UserId.2", "sue")
+                                                                 
.addFormParam("Version", "2010-08-31")
+                                                                 
.addFormParam("AWSAccessKeyId", "identity").build();
+
+   public void testAddCreateVolumePermissionsToSnapshot() throws 
SecurityException, NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"addCreateVolumePermissionsToSnapshotInRegion",
+               String.class, Iterable.class, Iterable.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, ImmutableList.of("bob", "sue"), ImmutableList
+               .of("all"), "snapshotId"));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+      
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
addCreateVolumePermissionsToSnapshot.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest removeCreateVolumePermissionsFromSnapshot = 
HttpRequest.builder().method("POST")
+                                                                      
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                                                      
.addHeader("Host", "ec2.us-east-1.amazonaws.com")
+                                                                      
.addFormParam("Action", "ModifySnapshotAttribute")
+                                                                      
.addFormParam("Attribute", "createVolumePermission")
+                                                                      
.addFormParam("OperationType", "remove")
+                                                                      
.addFormParam("Signature", "RzxHUIWV80cyhQDtrMiHDWUosS1g8cn1%2B7ONLJCe1dg%3D")
+                                                                      
.addFormParam("SignatureMethod", "HmacSHA256")
+                                                                      
.addFormParam("SignatureVersion", "2")
+                                                                      
.addFormParam("SnapshotId", "snapshotId")
+                                                                      
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
+                                                                      
.addFormParam("UserGroup.1", "all")
+                                                                      
.addFormParam("UserId.1", "bob")
+                                                                      
.addFormParam("UserId.2", "sue")
+                                                                      
.addFormParam("Version", "2010-08-31")
+                                                                      
.addFormParam("AWSAccessKeyId", "identity").build();
+
+   public void testRemoveCreateVolumePermissionsFromSnapshot() throws 
SecurityException, NoSuchMethodException,
+            IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"removeCreateVolumePermissionsFromSnapshotInRegion",
+               String.class, Iterable.class, Iterable.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, ImmutableList.of("bob", "sue"), ImmutableList
+               .of("all"), "snapshotId"));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+      
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
removeCreateVolumePermissionsFromSnapshot.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testResetCreateVolumePermissionsOnSnapshot() throws 
SecurityException, NoSuchMethodException,
+            IOException {
+      Invokable<?, ?> method = method(ElasticBlockStoreApi.class, 
"resetCreateVolumePermissionsOnSnapshotInRegion",
+               String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "snapshotId"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(
+               request,
+               
"Action=ResetSnapshotAttribute&Attribute=createVolumePermission&SnapshotId=snapshotId",
+               "application/x-www-form-urlencoded", false);
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiExpectTest.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiExpectTest.java
 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiExpectTest.java
new file mode 100644
index 0000000..f96610b
--- /dev/null
+++ 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiExpectTest.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.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;
+
+/**
+ *
+ * @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/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiLiveTest.java
 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiLiveTest.java
new file mode 100644
index 0000000..f2e7c69
--- /dev/null
+++ 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiLiveTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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 org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import java.util.SortedSet;
+
+import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
+import org.jclouds.ec2.EC2Api;
+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;
+
+/**
+ * Tests behavior of {@code ElasticIPAddressApi}
+ */
+@Test(groups = "live", singleThreaded = true, testName = 
"ElasticIPAddressApiLiveTest")
+public class ElasticIPAddressApiLiveTest extends 
BaseComputeServiceContextLiveTest {
+   public ElasticIPAddressApiLiveTest() {
+      provider = "ec2";
+   }
+
+   private EC2Api ec2Api;
+   private ElasticIPAddressApi client;
+
+   @Override
+   @BeforeClass(groups = { "integration", "live" })
+   public void setupContext() {
+      super.setupContext();
+      ec2Api = view.unwrapApi(EC2Api.class);
+      client = ec2Api.getElasticIPAddressApi().get();
+   }
+
+   @Test
+   void testDescribeAddresses() {
+      for (String region : ec2Api.getConfiguredRegions()) {
+         SortedSet<PublicIpInstanceIdPair> allResults = 
Sets.newTreeSet(client.describeAddressesInRegion(region));
+         assertNotNull(allResults);
+         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/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiTest.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiTest.java
 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiTest.java
new file mode 100644
index 0000000..48f7b4c
--- /dev/null
+++ 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/ElasticIPAddressApiTest.java
@@ -0,0 +1,138 @@
+/*
+ * 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 org.jclouds.reflect.Reflection2.method;
+
+import java.io.IOException;
+
+import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404;
+import org.jclouds.ec2.xml.AllocateAddressResponseHandler;
+import org.jclouds.ec2.xml.DescribeAddressesResponseHandler;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.http.functions.ReleasePayloadAndReturn;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.Lists;
+import com.google.common.reflect.Invokable;
+/**
+ * Tests behavior of {@code ElasticIPAddressApi}
+ */
+// NOTE:without testName, this will not call @Before* and fail w/NPE during 
surefire
+@Test(groups = "unit", testName = "ElasticIPAddressApiTest")
+public class ElasticIPAddressApiTest extends 
BaseEC2ApiTest<ElasticIPAddressApi> {
+
+   public void testDisassociateAddress() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticIPAddressApi.class, 
"disassociateAddressInRegion", String.class,
+            String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "127.0.0.1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
"Action=DisassociateAddress&PublicIp=127.0.0.1",
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest associateAddress = HttpRequest.builder().method("POST")
+                                             
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                             .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                             .addFormParam("Action", 
"AssociateAddress")
+                                             .addFormParam("InstanceId", "me")
+                                             .addFormParam("PublicIp", 
"127.0.0.1")
+                                             .addFormParam("Signature", 
"nLU6xGLqXtT/dmyAvkN4BdL/3CxQlDWJYeskikhl54k%3D")
+                                             .addFormParam("SignatureMethod", 
"HmacSHA256")
+                                             .addFormParam("SignatureVersion", 
"2")
+                                             .addFormParam("Timestamp", 
"2009-11-08T15%3A54%3A08.897Z")
+                                             .addFormParam("Version", 
"2010-08-31")
+                                             .addFormParam("AWSAccessKeyId", 
"identity").build();
+
+   public void testAssociateAddress() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticIPAddressApi.class, 
"associateAddressInRegion", String.class,
+            String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "127.0.0.1", "me"));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
associateAddress.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testReleaseAddress() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticIPAddressApi.class, 
"releaseAddressInRegion", String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "127.0.0.1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, "Action=ReleaseAddress&PublicIp=127.0.0.1",
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testDescribeAddresses() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticIPAddressApi.class, 
"describeAddressesInRegion", String.class,
+            String[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "127.0.0.1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
"Action=DescribeAddresses&PublicIp.1=127.0.0.1",
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
DescribeAddressesResponseHandler.class);
+      assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+      checkFilters(request);
+   }
+
+   public void testAllocateAddress() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(ElasticIPAddressApi.class, 
"allocateAddressInRegion", String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList((String) null));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, "Action=AllocateAddress", 
"application/x-www-form-urlencoded",
+            false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
AllocateAddressResponseHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiExpectTest.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiExpectTest.java
 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiExpectTest.java
new file mode 100644
index 0000000..a862e30
--- /dev/null
+++ 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiExpectTest.java
@@ -0,0 +1,100 @@
+/*
+ * 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;
+
+/**
+ *
+ * @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/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiLiveTest.java
 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiLiveTest.java
new file mode 100644
index 0000000..f8ce897
--- /dev/null
+++ 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiLiveTest.java
@@ -0,0 +1,95 @@
+/*
+ * 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.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.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}
+ */
+@Test(groups = "live", singleThreaded = true, testName = "InstanceApiLiveTest")
+public class InstanceApiLiveTest extends BaseComputeServiceContextLiveTest {
+   public InstanceApiLiveTest() {
+      provider = "ec2";
+   }
+
+   private EC2Api ec2Api;
+   private InstanceApi client;
+
+   @Override
+   @BeforeClass(groups = { "integration", "live" })
+   public void setupContext() {
+      super.setupContext();
+      ec2Api = view.unwrapApi(EC2Api.class);
+      client = ec2Api.getInstanceApi().get();
+   }
+
+   @Test
+   void testDescribeInstances() {
+      for (String region : ec2Api.getConfiguredRegions()) {
+         Set<? extends Reservation<? extends RunningInstance>> allResults = 
client.describeInstancesInRegion(region);
+         assertNotNull(allResults);
+      }
+   }
+
+   @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/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiTest.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiTest.java
 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiTest.java
new file mode 100644
index 0000000..8a68517
--- /dev/null
+++ 
b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/test/java/org/jclouds/ec2/features/InstanceApiTest.java
@@ -0,0 +1,591 @@
+/*
+ * 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 org.jclouds.reflect.Reflection2.method;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404;
+import org.jclouds.ec2.domain.BlockDevice;
+import org.jclouds.ec2.domain.InstanceType;
+import org.jclouds.ec2.domain.Volume.InstanceInitiatedShutdownBehavior;
+import org.jclouds.ec2.options.RunInstancesOptions;
+import org.jclouds.ec2.xml.BlockDeviceMappingHandler;
+import org.jclouds.ec2.xml.BooleanValueHandler;
+import org.jclouds.ec2.xml.DescribeInstancesResponseHandler;
+import org.jclouds.ec2.xml.GetConsoleOutputResponseHandler;
+import org.jclouds.ec2.xml.InstanceInitiatedShutdownBehaviorHandler;
+import org.jclouds.ec2.xml.InstanceStateChangeHandler;
+import org.jclouds.ec2.xml.InstanceTypeHandler;
+import org.jclouds.ec2.xml.RunInstancesResponseHandler;
+import org.jclouds.ec2.xml.StringValueHandler;
+import org.jclouds.ec2.xml.UnencodeStringValueHandler;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.http.functions.ReleasePayloadAndReturn;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.reflect.Invokable;
+/**
+ * Tests behavior of {@code InstanceApi}
+ */
+// NOTE:without testName, this will not call @Before* and fail w/NPE during 
surefire
+@Test(groups = "unit", testName = "InstanceApiTest")
+public class InstanceApiTest extends BaseEC2ApiTest<InstanceApi> {
+   public void testDescribeInstances() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"describeInstancesInRegion", String.class, String[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList((String) null));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, "Action=DescribeInstances", 
"application/x-www-form-urlencoded",
+               false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
DescribeInstancesResponseHandler.class);
+      assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+      checkFilters(request);
+   }
+
+   public void testDescribeInstancesArgs() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"describeInstancesInRegion", String.class, String[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", "2"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
"Action=DescribeInstances&InstanceId.1=1&InstanceId.2=2",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
DescribeInstancesResponseHandler.class);
+      assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+      checkFilters(request);
+   }
+
+   public void testTerminateInstances() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"terminateInstancesInRegion", String.class,
+               String[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", "2"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
"Action=TerminateInstances&InstanceId.1=1&InstanceId.2=2",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
InstanceStateChangeHandler.class);
+      assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+      checkFilters(request);
+   }
+
+   public void testRunInstances() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"runInstancesInRegion", String.class, String.class,
+               String.class, int.class, int.class, 
RunInstancesOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, null, "ami-voo", 1, 1));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      try {
+         assertPayloadEquals(request, 
"Action=RunInstances&ImageId=ami-voo&MinCount=1&MaxCount=1",
+                  "application/x-www-form-urlencoded", false);
+      } catch (AssertionError e) {
+         // mvn 3.0 osx 10.6.5 somehow sorts differently
+         assertPayloadEquals(request, 
"Action=RunInstances&ImageId=ami-voo&MaxCount=1&MinCount=1",
+                  "application/x-www-form-urlencoded", false);
+      }
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
RunInstancesResponseHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testRunInstancesOptions() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"runInstancesInRegion", String.class, String.class,
+               String.class, int.class, int.class, 
RunInstancesOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("eu-west-1", "eu-west-1a", "ami-voo",
+               1, 5, new 
RunInstancesOptions().withKernelId("kernelId").withSecurityGroups("group1", 
"group2")));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.eu-west-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.eu-west-1.amazonaws.com\n");
+      try {
+         assertPayloadEquals(
+                  request,
+                  
"Action=RunInstances&ImageId=ami-voo&MinCount=1&MaxCount=5&KernelId=kernelId&SecurityGroup.1=group1&SecurityGroup.2=group2&Placement.AvailabilityZone=eu-west-1a",
+                  "application/x-www-form-urlencoded", false);
+      } catch (AssertionError e) {
+         // mvn 3.0 osx 10.6.5 somehow sorts differently
+         assertPayloadEquals(
+                  request,
+                  
"Action=RunInstances&ImageId=ami-voo&MaxCount=5&MinCount=1&KernelId=kernelId&SecurityGroup.1=group1&SecurityGroup.2=group2&Placement.AvailabilityZone=eu-west-1a",
+                  "application/x-www-form-urlencoded", false);
+      }
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
RunInstancesResponseHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testStopInstances() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"stopInstancesInRegion", String.class, boolean.class,
+               String[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, true, "1", "2"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
"Action=StopInstances&Force=true&InstanceId.1=1&InstanceId.2=2",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
InstanceStateChangeHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testRebootInstances() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"rebootInstancesInRegion", String.class, String[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", "2"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
"Action=RebootInstances&InstanceId.1=1&InstanceId.2=2",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testStartInstances() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"startInstancesInRegion", String.class, String[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", "2"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
"Action=StartInstances&InstanceId.1=1&InstanceId.2=2",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
InstanceStateChangeHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testGetUserDataForInstanceInRegion() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"getUserDataForInstanceInRegion", String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request,
+               
"Action=DescribeInstanceAttribute&Attribute=userData&InstanceId=1",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
UnencodeStringValueHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testGetRootDeviceNameForInstanceInRegion() throws 
SecurityException, NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"getRootDeviceNameForInstanceInRegion", String.class,
+               String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request,
+               
"Action=DescribeInstanceAttribute&Attribute=rootDeviceName&InstanceId=1",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, StringValueHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testGetRamdiskForInstanceInRegion() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"getRamdiskForInstanceInRegion", String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request,
+               
"Action=DescribeInstanceAttribute&Attribute=ramdisk&InstanceId=1",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, StringValueHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testGetDisableApiTerminationForInstanceInRegion() throws 
SecurityException, NoSuchMethodException,
+            IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"isApiTerminationDisabledForInstanceInRegion", String.class,
+               String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request,
+               
"Action=DescribeInstanceAttribute&Attribute=disableApiTermination&InstanceId=1",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, BooleanValueHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testGetKernelForInstanceInRegion() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"getKernelForInstanceInRegion", String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
"Action=DescribeInstanceAttribute&Attribute=kernel&InstanceId=1",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, StringValueHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testGetInstanceTypeForInstanceInRegion() throws 
SecurityException, NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"getInstanceTypeForInstanceInRegion", String.class,
+               String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request,
+               
"Action=DescribeInstanceAttribute&Attribute=instanceType&InstanceId=1",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, InstanceTypeHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testGetInstanceInitiatedShutdownBehaviorForInstanceInRegion() 
throws SecurityException,
+            NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"getInstanceInitiatedShutdownBehaviorForInstanceInRegion",
+               String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(
+               request,
+               
"Action=DescribeInstanceAttribute&Attribute=instanceInitiatedShutdownBehavior&InstanceId=1",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
InstanceInitiatedShutdownBehaviorHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   public void testGetBlockDeviceMappingForInstanceInRegion() throws 
SecurityException, NoSuchMethodException,
+            IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"getBlockDeviceMappingForInstanceInRegion", String.class,
+               String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request,
+               
"Action=DescribeInstanceAttribute&Attribute=blockDeviceMapping&InstanceId=1",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
BlockDeviceMappingHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest setUserDataForInstance = HttpRequest.builder().method("POST")
+                                                   
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                                   .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                                   .addFormParam("Action", 
"ModifyInstanceAttribute")
+                                                   .addFormParam("Attribute", 
"userData")
+                                                   .addFormParam("InstanceId", 
"1")
+                                                   .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-08-31")
+                                                   
.addFormParam("AWSAccessKeyId", "identity").build();
+
+   public void testSetUserDataForInstanceInRegion() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"setUserDataForInstanceInRegion", String.class, String.class,
+               byte[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", "test".getBytes()));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
setUserDataForInstance.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest setRamdiskForInstance = HttpRequest.builder().method("POST")
+                                                  
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                                  .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                                  .addFormParam("Action", 
"ModifyInstanceAttribute")
+                                                  .addFormParam("Attribute", 
"ramdisk")
+                                                  .addFormParam("InstanceId", 
"1")
+                                                  .addFormParam("Signature", 
"aMQzFsknmQt1OA8Rb8aIzZoFXGK23UvrMIy8imNVUeQ%3D")
+                                                  
.addFormParam("SignatureMethod", "HmacSHA256")
+                                                  
.addFormParam("SignatureVersion", "2")
+                                                  .addFormParam("Timestamp", 
"2009-11-08T15%3A54%3A08.897Z")
+                                                  .addFormParam("Value", 
"test")
+                                                  .addFormParam("Version", 
"2010-08-31")
+                                                  
.addFormParam("AWSAccessKeyId", "identity").build();
+
+   public void testSetRamdiskForInstanceInRegion() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"setRamdiskForInstanceInRegion", String.class, String.class,
+               String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", "test"));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
setRamdiskForInstance.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest setKernelForInstance = HttpRequest.builder().method("POST")
+                                                 
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                                 .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                                 .addFormParam("Action", 
"ModifyInstanceAttribute")
+                                                 .addFormParam("Attribute", 
"kernel")
+                                                 .addFormParam("InstanceId", 
"1")
+                                                 .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-08-31")
+                                                 
.addFormParam("AWSAccessKeyId", "identity").build();
+
+   public void testSetKernelForInstanceInRegion() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"setKernelForInstanceInRegion", String.class, String.class,
+               String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", "test"));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
setKernelForInstance.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest setApiTerminationDisabled = HttpRequest.builder().method("POST")
+                                                      
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                                      .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                                      .addFormParam("Action", 
"ModifyInstanceAttribute")
+                                                      
.addFormParam("Attribute", "disableApiTermination")
+                                                      
.addFormParam("InstanceId", "1")
+                                                      
.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-08-31")
+                                                      
.addFormParam("AWSAccessKeyId", "identity").build();
+
+   public void testSetApiTerminationDisabledForInstanceInRegion() throws 
SecurityException, NoSuchMethodException,
+            IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"setApiTerminationDisabledForInstanceInRegion", String.class,
+               String.class, boolean.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", true));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
setApiTerminationDisabled.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest instanceTypeForInstance = HttpRequest.builder().method("POST")
+                                                    
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                                    .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                                    .addFormParam("Action", 
"ModifyInstanceAttribute")
+                                                    .addFormParam("Attribute", 
"instanceType")
+                                                    
.addFormParam("InstanceId", "1")
+                                                    .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-08-31")
+                                                    
.addFormParam("AWSAccessKeyId", "identity").build();
+
+   public void testSetInstanceTypeForInstanceInRegion() throws 
SecurityException, NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"setInstanceTypeForInstanceInRegion", String.class,
+               String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", InstanceType.C1_MEDIUM));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
instanceTypeForInstance.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest setInstanceInitiatedShutdownBehavior = 
HttpRequest.builder().method("POST")
+                                                                 
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                                                 
.addHeader("Host", "ec2.us-east-1.amazonaws.com")
+                                                                 
.addFormParam("Action", "ModifyInstanceAttribute")
+                                                                 
.addFormParam("Attribute", "instanceInitiatedShutdownBehavior")
+                                                                 
.addFormParam("InstanceId", "1")
+                                                                 
.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-08-31")
+                                                                 
.addFormParam("AWSAccessKeyId", "identity").build();
+
+   public void testSetInstanceInitiatedShutdownBehaviorForInstanceInRegion() 
throws SecurityException,
+            NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"setInstanceInitiatedShutdownBehaviorForInstanceInRegion",
+               String.class, String.class, 
InstanceInitiatedShutdownBehavior.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", 
InstanceInitiatedShutdownBehavior.TERMINATE));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
setInstanceInitiatedShutdownBehavior.getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   HttpRequest setBlockDeviceMapping = HttpRequest.builder().method("POST")
+                                                           
.endpoint("https://ec2.us-east-1.amazonaws.com/";)
+                                                           .addHeader("Host", 
"ec2.us-east-1.amazonaws.com")
+                                                           
.addFormParam("Action", "ModifyInstanceAttribute")
+                                                           
.addFormParam("BlockDeviceMapping.1.DeviceName", "/dev/sda1")
+                                                           
.addFormParam("BlockDeviceMapping.1.Ebs.DeleteOnTermination", "true")
+                                                           
.addFormParam("BlockDeviceMapping.1.Ebs.VolumeId", "vol-test1")
+                                                           
.addFormParam("InstanceId", "1").build();
+
+   public void testSetBlockDeviceMappingForInstanceInRegion() throws 
SecurityException, NoSuchMethodException,
+            IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"setBlockDeviceMappingForInstanceInRegion", String.class,
+               String.class, Map.class);
+
+      Map<String, BlockDevice> mapping = Maps.newLinkedHashMap();
+      mapping.put("/dev/sda1", new BlockDevice("vol-test1", true));
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1", mapping));
+
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request, 
filter.filter(setBlockDeviceMapping).getPayload().getRawContent().toString(),
+            "application/x-www-form-urlencoded", false);
+
+
+      checkFilters(request);
+   }
+
+   public void testGetConsoleOutputForInstanceInRegion() throws 
SecurityException, NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(InstanceApi.class, 
"getConsoleOutputForInstanceInRegion", String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList(null, "1"));
+
+      assertRequestLineEquals(request, "POST 
https://ec2.us-east-1.amazonaws.com/ HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
ec2.us-east-1.amazonaws.com\n");
+      assertPayloadEquals(request,
+               "Action=GetConsoleOutput&InstanceId=1",
+               "application/x-www-form-urlencoded", false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
GetConsoleOutputResponseHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+}

Reply via email to