Repository: jclouds
Updated Branches:
  refs/heads/use-agentproxy-008 54fdff0ad -> 5ee084af1 (forced update)


http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
index 56b0a13..bb25f2f 100644
--- 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
+++ 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
@@ -36,10 +36,8 @@ import javax.annotation.Resource;
 import javax.inject.Named;
 
 import org.jclouds.Constants;
-import org.jclouds.aws.s3.AWSS3ApiMetadata;
-import org.jclouds.aws.s3.AWSS3AsyncClient;
 import org.jclouds.aws.s3.AWSS3Client;
-import org.jclouds.aws.s3.blobstore.AWSS3AsyncBlobStore;
+import org.jclouds.aws.s3.blobstore.AWSS3BlobStore;
 import org.jclouds.aws.s3.blobstore.strategy.AsyncMultipartUploadStrategy;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.internal.BlobRuntimeException;
@@ -93,13 +91,13 @@ public class ParallelMultipartUploadStrategy implements 
AsyncMultipartUploadStra
    @Named(Constants.PROPERTY_REQUEST_TIMEOUT)
    protected Long maxTime;
 
-   protected final AWSS3AsyncBlobStore ablobstore;
+   protected final AWSS3BlobStore blobstore;
    protected final PayloadSlicer slicer;
 
    @Inject
-   public ParallelMultipartUploadStrategy(AWSS3AsyncBlobStore ablobstore, 
PayloadSlicer slicer,
+   public ParallelMultipartUploadStrategy(AWSS3BlobStore blobstore, 
PayloadSlicer slicer,
          @Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService 
ioExecutor) {
-      this.ablobstore = checkNotNull(ablobstore, "ablobstore");
+      this.blobstore = checkNotNull(blobstore, "blobstore");
       this.slicer = checkNotNull(slicer, "slicer");
       this.ioExecutor = checkNotNull(ioExecutor, "ioExecutor");
    }
@@ -116,11 +114,15 @@ public class ParallelMultipartUploadStrategy implements 
AsyncMultipartUploadStra
          latch.countDown();
          return;
       }
-      final AWSS3AsyncClient client = 
ablobstore.getContext().unwrap(AWSS3ApiMetadata.CONTEXT_TOKEN).getAsyncApi();
-      Payload chunkedPart = slicer.slice(payload, offset, size);
+      final AWSS3Client client = 
blobstore.getContext().unwrapApi(AWSS3Client.class);
+      final Payload chunkedPart = slicer.slice(payload, offset, size);
       logger.debug(String.format("async uploading part %s of %s to container 
%s with uploadId %s", part, key, container, uploadId));
       final long start = System.currentTimeMillis();
-      final ListenableFuture<String> futureETag = client.uploadPart(container, 
key, part, uploadId, chunkedPart);
+      final ListenableFuture<String> futureETag = ioExecutor.submit(new 
Callable<String>() {
+         @Override public String call() throws Exception {
+            return client.uploadPart(container, key, part, uploadId, 
chunkedPart);
+         }
+      });
       futureETag.addListener(new Runnable() {
          @Override
          public void run() {
@@ -164,8 +166,7 @@ public class ParallelMultipartUploadStrategy implements 
AsyncMultipartUploadStra
                   long chunkSize = algorithm.getChunkSize();
                   long remaining = algorithm.getRemaining();
                   if (parts > 0) {
-                     AWSS3Client client = ablobstore
-                           
.getContext().unwrap(AWSS3ApiMetadata.CONTEXT_TOKEN).getApi();
+                     final AWSS3Client client = 
blobstore.getContext().unwrapApi(AWSS3Client.class);
                      String uploadId = null;
                      final Map<Integer, ListenableFuture<String>> futureParts =
                         new ConcurrentHashMap<Integer, 
ListenableFuture<String>>();
@@ -240,8 +241,12 @@ public class ParallelMultipartUploadStrategy implements 
AsyncMultipartUploadStra
                      // Issue 936: don't just call putBlob, as that will see 
options=multiPart and
                      // recursively call this execute method again; instead 
mark as not multipart
                      // because it can all fit in one go.
-                     PutOptions nonMultipartOptions = 
PutOptions.Builder.multipart(false);
-                     ListenableFuture<String> futureETag = 
ablobstore.putBlob(container, blob, nonMultipartOptions);
+                     final PutOptions nonMultipartOptions = 
PutOptions.Builder.multipart(false);
+                     ListenableFuture<String> futureETag = 
ioExecutor.submit(new Callable<String>() {
+                        @Override public String call() throws Exception {
+                           return blobstore.putBlob(container, blob, 
nonMultipartOptions);
+                        }
+                     });
                      return maxTime != null ?
                            futureETag.get(maxTime, TimeUnit.SECONDS) : 
futureETag.get();
                   }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3HttpApiModule.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3HttpApiModule.java
 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3HttpApiModule.java
new file mode 100644
index 0000000..dea5438
--- /dev/null
+++ 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3HttpApiModule.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.s3.config;
+
+import static org.jclouds.aws.domain.Region.US_STANDARD;
+
+import javax.inject.Singleton;
+
+import org.jclouds.aws.s3.AWSS3Client;
+import org.jclouds.aws.s3.filters.AWSRequestAuthorizeSignature;
+import org.jclouds.aws.s3.predicates.validators.AWSS3BucketNameValidator;
+import org.jclouds.location.Region;
+import org.jclouds.rest.ConfiguresHttpApi;
+import org.jclouds.s3.S3Client;
+import org.jclouds.s3.config.S3HttpApiModule;
+import org.jclouds.s3.filters.RequestAuthorizeSignature;
+import org.jclouds.s3.predicates.validators.BucketNameValidator;
+
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.inject.Provides;
+import com.google.inject.Scopes;
+
+/**
+ * Configures the S3 connection.
+ */
+@ConfiguresHttpApi
+public class AWSS3HttpApiModule extends S3HttpApiModule<AWSS3Client> {
+   
+   public AWSS3HttpApiModule() {
+      super(AWSS3Client.class);
+   }
+   
+   @Override
+   protected Supplier<String> defaultRegionForBucket(@Region Supplier<String> 
defaultRegion) {
+      return Suppliers.ofInstance(US_STANDARD);
+   }
+   
+   @Override
+   protected void configure() {
+      bind(BucketNameValidator.class).to(AWSS3BucketNameValidator.class);
+      super.configure();
+   }
+
+   @Override
+   protected void bindRequestSigner() {
+      
bind(RequestAuthorizeSignature.class).to(AWSRequestAuthorizeSignature.class).in(Scopes.SINGLETON);
+   }
+
+   @Singleton
+   @Provides
+   S3Client provide(AWSS3Client in) {
+      return in;
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java
 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java
deleted file mode 100644
index d7cce11..0000000
--- 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.aws.s3.config;
-
-import static org.jclouds.aws.domain.Region.US_STANDARD;
-import static org.jclouds.reflect.Reflection2.typeToken;
-
-import javax.inject.Singleton;
-
-import org.jclouds.aws.s3.AWSS3AsyncClient;
-import org.jclouds.aws.s3.AWSS3Client;
-import org.jclouds.aws.s3.filters.AWSRequestAuthorizeSignature;
-import org.jclouds.aws.s3.predicates.validators.AWSS3BucketNameValidator;
-import org.jclouds.location.Region;
-import org.jclouds.rest.ConfiguresRestClient;
-import org.jclouds.s3.S3AsyncClient;
-import org.jclouds.s3.S3Client;
-import org.jclouds.s3.config.S3RestClientModule;
-import org.jclouds.s3.filters.RequestAuthorizeSignature;
-import org.jclouds.s3.predicates.validators.BucketNameValidator;
-
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.inject.Provides;
-import com.google.inject.Scopes;
-
-/**
- * Configures the S3 connection.
- */
-@ConfiguresRestClient
-public class AWSS3RestClientModule extends S3RestClientModule<AWSS3Client, 
AWSS3AsyncClient> {
-   
-   public AWSS3RestClientModule() {
-      super(typeToken(AWSS3Client.class), typeToken(AWSS3AsyncClient.class));
-   }
-   
-   @Override
-   protected Supplier<String> defaultRegionForBucket(@Region Supplier<String> 
defaultRegion) {
-      return Suppliers.ofInstance(US_STANDARD);
-   }
-   
-   @Override
-   protected void configure() {
-      bind(BucketNameValidator.class).to(AWSS3BucketNameValidator.class);
-      super.configure();
-   }
-
-   @Override
-   protected void bindRequestSigner() {
-      
bind(RequestAuthorizeSignature.class).to(AWSRequestAuthorizeSignature.class).in(Scopes.SINGLETON);
-   }
-
-   @Singleton
-   @Provides
-   S3Client provide(AWSS3Client in) {
-      return in;
-   }
-
-   @Singleton
-   @Provides
-   S3AsyncClient provide(AWSS3AsyncClient in) {
-      return in;
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/domain/DeleteResult.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/domain/DeleteResult.java 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/domain/DeleteResult.java
index 13b0d38..bc76c65 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/domain/DeleteResult.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/domain/DeleteResult.java
@@ -16,23 +16,21 @@
  */
 package org.jclouds.aws.s3.domain;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Map;
+import java.util.Set;
+
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.collect.ForwardingSet;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
-import java.util.Map;
-import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
 /**
  * Multi-object delete API response
  * <p/>
  * Contains a list of the keys that were deleted
- *
- * @see <a 
href="http://docs.amazonwebservices.com/AmazonS3/latest/API/multiobjectdeleteapi.html";
 />
  */
 public class DeleteResult extends ForwardingSet<String> {
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignature.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignature.java
 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignature.java
index 6bd4ca0..86c1bb9 100644
--- 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignature.java
+++ 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/AWSRequestAuthorizeSignature.java
@@ -38,13 +38,7 @@ import org.jclouds.s3.filters.RequestAuthorizeSignature;
 
 import com.google.common.base.Supplier;
 
-/**
- * Signs the AWS S3 request, supporting temporary signatures.
- * 
- * @see <a href=
- *      
"http://docs.amazonwebservices.com/AmazonS3/2006-03-01/dev/index.html?RESTAuthentication.html";
- *      />
- */
+/** Signs the AWS S3 request, supporting temporary signatures. */
 @Singleton
 public class AWSRequestAuthorizeSignature extends RequestAuthorizeSignature {
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/package-info.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/package-info.java 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/package-info.java
index b9a9542..c7b006f 100644
--- 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/package-info.java
+++ 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/filters/package-info.java
@@ -14,8 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/**
- * This package contains HttpRequestFilters needed to operate the REST api.
- * @see <a 
href="http://docs.amazonwebservices.com/AmazonS3/latest/RESTAuthentication.html";
 />
- */
+/** This package contains HttpRequestFilters needed to operate the REST api. */
 package org.jclouds.aws.s3.filters;

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/functions/ETagFromHttpResponseViaRegex.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/functions/ETagFromHttpResponseViaRegex.java
 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/functions/ETagFromHttpResponseViaRegex.java
index a0cae98..46f5837 100644
--- 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/functions/ETagFromHttpResponseViaRegex.java
+++ 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/functions/ETagFromHttpResponseViaRegex.java
@@ -27,9 +27,6 @@ import org.jclouds.http.functions.ReturnStringIf2xx;
 
 import com.google.common.base.Function;
 
-/**
- * @see <a 
href="http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadComplete.html";
 />
- */
 @Singleton
 public class ETagFromHttpResponseViaRegex implements Function<HttpResponse, 
String> {
    private static Pattern pattern = 
Pattern.compile("<ETag>([\\S&&[^<]]+)</ETag>");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/functions/UploadIdFromHttpResponseViaRegex.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/functions/UploadIdFromHttpResponseViaRegex.java
 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/functions/UploadIdFromHttpResponseViaRegex.java
index f537692..9b42714 100644
--- 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/functions/UploadIdFromHttpResponseViaRegex.java
+++ 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/functions/UploadIdFromHttpResponseViaRegex.java
@@ -27,11 +27,6 @@ import org.jclouds.http.functions.ReturnStringIf2xx;
 
 import com.google.common.base.Function;
 
-/**
- * @see <a
- *      
href="http://docs.amazonwebservices.com/AmazonS3/latest/API/index.html?mpUploadInitiate.html";
- *      />
- */
 @Singleton
 public class UploadIdFromHttpResponseViaRegex implements 
Function<HttpResponse, String> {
    Pattern pattern = Pattern.compile("<UploadId>([\\S&&[^<]]+)</UploadId>");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/xml/DeleteResultHandler.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/xml/DeleteResultHandler.java
 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/xml/DeleteResultHandler.java
index 5cc796c..96ac8d4 100644
--- 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/xml/DeleteResultHandler.java
+++ 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/xml/DeleteResultHandler.java
@@ -16,14 +16,15 @@
  */
 package org.jclouds.aws.s3.xml;
 
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
+import static org.jclouds.util.SaxUtils.equalsOrSuffix;
+
 import org.jclouds.aws.s3.domain.DeleteResult;
 import org.jclouds.http.functions.ParseSax;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
-import static org.jclouds.util.SaxUtils.equalsOrSuffix;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
 
 public class DeleteResultHandler extends 
ParseSax.HandlerForGeneratedRequestWithResult<DeleteResult> {
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/xml/ErrorEntryHandler.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/xml/ErrorEntryHandler.java 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/xml/ErrorEntryHandler.java
index 1674a89..95305a3 100644
--- 
a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/xml/ErrorEntryHandler.java
+++ 
b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/xml/ErrorEntryHandler.java
@@ -16,14 +16,15 @@
  */
 package org.jclouds.aws.s3.xml;
 
-import com.google.common.collect.Maps;
+import static org.jclouds.util.SaxUtils.equalsOrSuffix;
+
+import java.util.Map;
+
 import org.jclouds.aws.s3.domain.DeleteResult;
 import org.jclouds.http.functions.ParseSax;
 import org.xml.sax.SAXException;
 
-import java.util.Map;
-
-import static org.jclouds.util.SaxUtils.equalsOrSuffix;
+import com.google.common.collect.Maps;
 
 public class ErrorEntryHandler extends 
ParseSax.HandlerForGeneratedRequestWithResult<Map.Entry<String, 
DeleteResult.Error>> {
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3AsyncClientTest.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3AsyncClientTest.java 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3AsyncClientTest.java
deleted file mode 100644
index 8b436d3..0000000
--- 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3AsyncClientTest.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.aws.s3;
-
-import static org.jclouds.reflect.Reflection2.method;
-import static org.testng.Assert.assertEquals;
-
-import java.io.IOException;
-import java.util.Map;
-import java.util.Set;
-
-import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
-import org.jclouds.aws.s3.config.AWSS3RestClientModule;
-import org.jclouds.aws.s3.filters.AWSRequestAuthorizeSignature;
-import org.jclouds.aws.s3.functions.ETagFromHttpResponseViaRegex;
-import org.jclouds.aws.s3.functions.UploadIdFromHttpResponseViaRegex;
-import org.jclouds.blobstore.binders.BindBlobToMultipartFormTest;
-import org.jclouds.date.TimeStamp;
-import org.jclouds.fallbacks.MapHttp4xxCodesToExceptions;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.http.functions.ParseETagHeader;
-import org.jclouds.http.functions.ParseSax;
-import org.jclouds.http.functions.ReleasePayloadAndReturn;
-import org.jclouds.http.functions.ReturnTrueIf2xx;
-import org.jclouds.io.Payload;
-import org.jclouds.io.Payloads;
-import org.jclouds.location.Region;
-import org.jclouds.rest.ConfiguresRestClient;
-import org.jclouds.rest.internal.GeneratedHttpRequest;
-import org.jclouds.s3.S3AsyncClient;
-import org.jclouds.s3.S3AsyncClientTest;
-import org.jclouds.s3.S3Client;
-import org.jclouds.s3.domain.ObjectMetadata;
-import org.jclouds.s3.domain.ObjectMetadataBuilder;
-import org.jclouds.s3.domain.S3Object;
-import 
org.jclouds.s3.fallbacks.FalseIfBucketAlreadyOwnedByYouOrOperationAbortedWhenBucketExists;
-import org.jclouds.s3.options.CopyObjectOptions;
-import org.jclouds.s3.options.PutBucketOptions;
-import org.jclouds.s3.options.PutObjectOptions;
-import org.jclouds.s3.xml.LocationConstraintHandler;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Functions;
-import com.google.common.base.Optional;
-import com.google.common.base.Supplier;
-import com.google.common.cache.CacheLoader;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.Invokable;
-import com.google.inject.Module;
-
-// NOTE:without testName, this will not call @Before* and fail w/NPE during
-// surefire
-@Test(groups = "unit", testName = "AWSS3AsyncClientTest")
-public class AWSS3AsyncClientTest extends S3AsyncClientTest<AWSS3AsyncClient> {
-
-   @Override
-   protected void checkFilters(HttpRequest request) {
-      assertEquals(request.getFilters().size(), 1);
-      assertEquals(request.getFilters().get(0).getClass(), 
AWSRequestAuthorizeSignature.class);
-   }
-
-   @Override
-   public void testCopyObjectInvalidName() throws 
ArrayIndexOutOfBoundsException, SecurityException,
-                                                  IllegalArgumentException, 
NoSuchMethodException, IOException {
-      // For AWS S3, S3AsyncClientTest#testCopyObjectInvalidName() will not 
throw an exception
-      Invokable<?, ?> method = method(S3AsyncClient.class, "copyObject", 
String.class, String.class, String.class,
-                                                    String.class,
-                                                    CopyObjectOptions[].class);
-      processor.createRequest(method, ImmutableList.<Object> 
of("sourceBucket", "sourceObject", "destinationbucket", "destinationObject"));
-   }
-
-   public void testGetBucketLocationEUIsStillDefault() throws 
SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(AWSS3AsyncClient.class, 
"getBucketLocation", String.class);
-      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket-eu-west-1"));
-
-      assertRequestLineEquals(request, "GET 
https://bucket-eu-west-1.s3.amazonaws.com/?location HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Host: 
bucket-eu-west-1.s3.amazonaws.com\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseSax.class);
-      assertSaxResponseParserClassEquals(method, 
LocationConstraintHandler.class);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   @Override
-   public void testPutObject() throws ArrayIndexOutOfBoundsException, 
SecurityException, IllegalArgumentException,
-         NoSuchMethodException, IOException {
-
-      Invokable<?, ?> method = method(AWSS3AsyncClient.class, "putObject", 
String.class, S3Object.class,
-            PutObjectOptions[].class);
-      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket",
-            blobToS3Object.apply(BindBlobToMultipartFormTest.TEST_BLOB)));
-
-      assertRequestLineEquals(request, "PUT https://bucket."; + url + "/hello 
HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Expect: 100-continue\nHost: 
bucket." + url + "\n");
-      assertPayloadEquals(request, "hello", "text/plain", false);
-
-      assertResponseParserClassEquals(method, request, ParseETagHeader.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   @Override
-   public void testGetBucketLocation() throws SecurityException, 
NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(AWSS3AsyncClient.class, 
"getBucketLocation", String.class);
-      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket"));
-
-      assertRequestLineEquals(request, "GET 
https://bucket.s3.amazonaws.com/?location HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Host: bucket.s3.amazonaws.com\n");
-      assertPayloadEquals(request, null, null, false);
-
-      request = (GeneratedHttpRequest) filter.filter(request);
-
-      assertRequestLineEquals(request, "GET 
https://bucket.s3.amazonaws.com/?location HTTP/1.1");
-      assertNonPayloadHeadersEqual(
-            request,
-            "Authorization: AWS identity:2fFTeYJTDwiJmaAkKj732RjNbOg=\nDate: 
2009-11-08T15:54:08.897Z\nHost: bucket.s3.amazonaws.com\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseSax.class);
-      assertSaxResponseParserClassEquals(method, 
LocationConstraintHandler.class);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   @Override
-   public void testPutBucketDefault() throws ArrayIndexOutOfBoundsException, 
SecurityException,
-         IllegalArgumentException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(AWSS3AsyncClient.class, 
"putBucketInRegion", String.class, String.class,
-            PutBucketOptions[].class);
-      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList((String) null, "bucket"));
-
-      assertRequestLineEquals(request, "PUT https://bucket.s3.amazonaws.com/ 
HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Host: bucket.s3.amazonaws.com\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, 
FalseIfBucketAlreadyOwnedByYouOrOperationAbortedWhenBucketExists.class);
-
-      checkFilters(request);
-   }
-
-   public void testInitiateMultipartUpload() throws SecurityException, 
NegativeArraySizeException,
-         NoSuchMethodException {
-      Invokable<?, ?> method = method(AWSS3AsyncClient.class, 
"initiateMultipartUpload", String.class, ObjectMetadata.class,
-            PutObjectOptions[].class);
-      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket", ObjectMetadataBuilder.create().key("foo")
-            .contentMD5(new byte[16]).build()));
-
-      assertRequestLineEquals(request, "POST https://bucket."; + url + 
"/foo?uploads HTTP/1.1");
-      assertNonPayloadHeadersEqual(request,
-            "Content-MD5: AAAAAAAAAAAAAAAAAAAAAA==\n" +
-            "Content-Type: binary/octet-stream\n" +
-            "Host: bucket." + url + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      // as this is a payload-related command, but with no payload, be careful
-      // that we check
-      // filtering and do not ignore if this fails later.
-      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
-
-      assertRequestLineEquals(request, "POST https://bucket."; + url + 
"/foo?uploads HTTP/1.1");
-      assertNonPayloadHeadersEqual(request,
-            "Authorization: AWS identity:972m/Bqn2L5FIaB+wWDeY83mGvU=\n" +
-            "Content-MD5: AAAAAAAAAAAAAAAAAAAAAA==\n" +
-            "Content-Type: binary/octet-stream\n" +
-            "Date: 2009-11-08T15:54:08.897Z\n" +
-            "Host: bucket." + url + "\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, 
UploadIdFromHttpResponseViaRegex.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
-
-      checkFilters(request);
-   }
-
-   public void testAbortMultipartUpload() throws SecurityException, 
NegativeArraySizeException, NoSuchMethodException {
-      Invokable<?, ?> method = method(AWSS3AsyncClient.class, 
"abortMultipartUpload", String.class, String.class, String.class);
-      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket", "foo", "asdsadasdas", 1,
-            Payloads.newStringPayload("")));
-
-      assertRequestLineEquals(request, "DELETE https://bucket."; + url + 
"/foo?uploadId=asdsadasdas HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Host: bucket." + url + "\n");
-      assertPayloadEquals(request, "", "application/unknown", false);
-
-      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, VoidOnNotFoundOr404.class);
-
-      checkFilters(request);
-   }
-
-   public void testUploadPart() throws SecurityException, 
NegativeArraySizeException, NoSuchMethodException {
-      Invokable<?, ?> method = method(AWSS3AsyncClient.class, "uploadPart", 
String.class, String.class, int.class,
-            String.class, Payload.class);
-      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket", "foo", 1, "asdsadasdas",
-            Payloads.newStringPayload("")));
-
-      assertRequestLineEquals(request, "PUT https://bucket."; + url + 
"/foo?partNumber=1&uploadId=asdsadasdas HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Host: bucket." + url + "\n");
-      assertPayloadEquals(request, "", "application/unknown", false);
-
-      assertResponseParserClassEquals(method, request, ParseETagHeader.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
-
-      checkFilters(request);
-   }
-
-   public void testCompleteMultipartUpload() throws SecurityException, 
NegativeArraySizeException,
-         NoSuchMethodException {
-      Invokable<?, ?> method = method(AWSS3AsyncClient.class, 
"completeMultipartUpload", String.class, String.class,
-            String.class, Map.class);
-      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket", "foo", "asdsadasdas",
-            ImmutableMap.<Integer, String> of(1, 
"\"a54357aff0632cce46d942af68356b38\"")));
-
-      assertRequestLineEquals(request, "POST https://bucket."; + url + 
"/foo?uploadId=asdsadasdas HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Host: bucket." + url + "\n");
-      assertPayloadEquals(
-            request,
-            
"<CompleteMultipartUpload><Part><PartNumber>1</PartNumber><ETag>\"a54357aff0632cce46d942af68356b38\"</ETag></Part></CompleteMultipartUpload>",
-            "text/xml", false);
-
-      assertResponseParserClassEquals(method, request, 
ETagFromHttpResponseViaRegex.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
-
-      checkFilters(request);
-   }
-
-   public void testPutBucketEu() throws ArrayIndexOutOfBoundsException, 
SecurityException, IllegalArgumentException,
-         NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(AWSS3AsyncClient.class, 
"putBucketInRegion", String.class, String.class,
-            PutBucketOptions[].class);
-      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("EU", "bucket"));
-
-      assertRequestLineEquals(request, "PUT https://bucket.s3.amazonaws.com/ 
HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, "Host: bucket.s3.amazonaws.com\n");
-      assertPayloadEquals(request,
-            
"<CreateBucketConfiguration><LocationConstraint>EU</LocationConstraint></CreateBucketConfiguration>",
-            "text/xml", false);
-
-      assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, 
FalseIfBucketAlreadyOwnedByYouOrOperationAbortedWhenBucketExists.class);
-
-      checkFilters(request);
-   }
-
-   @ConfiguresRestClient
-   private static final class TestAWSS3RestClientModule extends 
AWSS3RestClientModule {
-
-      @Override
-      protected CacheLoader<String, Optional<String>> bucketToRegion(@Region 
Supplier<Set<String>> regionSupplier,
-               final S3Client client) {
-         return CacheLoader.<String, Optional<String>> 
from(Functions.forMap(ImmutableMap
-                           .<String, Optional<String>> builder()
-                           .put("bucket", Optional.<String> absent())
-                           .put("destinationbucket", Optional.<String> 
absent())
-                           .put("bucket-us-standard", 
Optional.of("us-standard"))
-                           .put("bucket-us-west-1", Optional.of("us-west-1"))
-                           .put("bucket-us-west-2", Optional.of("us-west-2"))
-                           .put("bucket-eu-west-1", Optional.of("eu-west-1"))
-                           .put("bucket-sa-east-1", Optional.of("sa-east-1"))
-                           .put("bucket-ap-southeast-1", 
Optional.of("ap-southeast-1"))
-                           .put("bucket-ap-northeast-1", 
Optional.of("ap-northeast-1"))
-                           .build()));
-      }
-
-      @Override
-      protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
-         return "2009-11-08T15:54:08.897Z";
-      }
-   }
-
-   @Override
-   protected Module createModule() {
-      return new TestAWSS3RestClientModule();
-   }
-   
-   @Override
-   public AWSS3ProviderMetadata createProviderMetadata() {
-      return new AWSS3ProviderMetadata();
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientLiveTest.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientLiveTest.java 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientLiveTest.java
index 14e0c74..865f42c 100644
--- a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientLiveTest.java
+++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientLiveTest.java
@@ -73,7 +73,7 @@ public class AWSS3ClientLiveTest extends S3ClientLiveTest {
 
    @Override
    public AWSS3Client getApi() {
-      return view.unwrap(AWSS3ApiMetadata.CONTEXT_TOKEN).getApi();
+      return view.unwrapApi(AWSS3Client.class);
    }
 
    @BeforeClass(groups = { "integration", "live" })
@@ -171,7 +171,7 @@ public class AWSS3ClientLiveTest extends S3ClientLiveTest {
          blobStore.putBlob(containerName, blob,
             storageClass(StorageClass.REDUCED_REDUNDANCY));
 
-         S3Client s3Client = 
S3Client.class.cast(view.unwrap(AWSS3ApiMetadata.CONTEXT_TOKEN).getApi());
+         S3Client s3Client = view.unwrapApi(S3Client.class);
          ListBucketResponse response = s3Client.listBucket(containerName, 
withPrefix(blobName));
 
          ObjectMetadata metadata = response.iterator().next();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientTest.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientTest.java 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientTest.java
new file mode 100644
index 0000000..783cc43
--- /dev/null
+++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientTest.java
@@ -0,0 +1,307 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.aws.s3;
+
+import static org.jclouds.reflect.Reflection2.method;
+import static org.testng.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Set;
+
+import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
+import org.jclouds.aws.s3.config.AWSS3HttpApiModule;
+import org.jclouds.aws.s3.filters.AWSRequestAuthorizeSignature;
+import org.jclouds.aws.s3.functions.ETagFromHttpResponseViaRegex;
+import org.jclouds.aws.s3.functions.UploadIdFromHttpResponseViaRegex;
+import org.jclouds.blobstore.binders.BindBlobToMultipartFormTest;
+import org.jclouds.date.TimeStamp;
+import org.jclouds.fallbacks.MapHttp4xxCodesToExceptions;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.functions.ParseETagHeader;
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.http.functions.ReleasePayloadAndReturn;
+import org.jclouds.http.functions.ReturnTrueIf2xx;
+import org.jclouds.io.Payload;
+import org.jclouds.io.Payloads;
+import org.jclouds.location.Region;
+import org.jclouds.rest.ConfiguresHttpApi;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.jclouds.s3.S3Client;
+import org.jclouds.s3.S3ClientTest;
+import org.jclouds.s3.domain.ObjectMetadata;
+import org.jclouds.s3.domain.ObjectMetadataBuilder;
+import org.jclouds.s3.domain.S3Object;
+import 
org.jclouds.s3.fallbacks.FalseIfBucketAlreadyOwnedByYouOrOperationAbortedWhenBucketExists;
+import org.jclouds.s3.options.CopyObjectOptions;
+import org.jclouds.s3.options.PutBucketOptions;
+import org.jclouds.s3.options.PutObjectOptions;
+import org.jclouds.s3.xml.LocationConstraintHandler;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Functions;
+import com.google.common.base.Optional;
+import com.google.common.base.Supplier;
+import com.google.common.cache.CacheLoader;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.Invokable;
+import com.google.inject.Module;
+
+// NOTE:without testName, this will not call @Before* and fail w/NPE during
+// surefire
+@Test(groups = "unit", testName = "AWSS3ClientTest")
+public class AWSS3ClientTest extends S3ClientTest<AWSS3Client> {
+
+   @Override
+   protected void checkFilters(HttpRequest request) {
+      assertEquals(request.getFilters().size(), 1);
+      assertEquals(request.getFilters().get(0).getClass(), 
AWSRequestAuthorizeSignature.class);
+   }
+
+   @Override
+   public void testCopyObjectInvalidName() throws 
ArrayIndexOutOfBoundsException, SecurityException,
+                                                  IllegalArgumentException, 
NoSuchMethodException, IOException {
+      // For AWS S3, S3AsyncClientTest#testCopyObjectInvalidName() will not 
throw an exception
+      Invokable<?, ?> method = method(AWSS3Client.class, "copyObject", 
String.class, String.class, String.class,
+                                                    String.class,
+                                                    CopyObjectOptions[].class);
+      processor.createRequest(method, ImmutableList.<Object> 
of("sourceBucket", "sourceObject", "destinationbucket", "destinationObject"));
+   }
+
+   public void testGetBucketLocationEUIsStillDefault() throws 
SecurityException, NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(AWSS3Client.class, "getBucketLocation", 
String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket-eu-west-1"));
+
+      assertRequestLineEquals(request, "GET 
https://bucket-eu-west-1.s3.amazonaws.com/?location HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: 
bucket-eu-west-1.s3.amazonaws.com\n");
+      assertPayloadEquals(request, null, null, false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
LocationConstraintHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   @Override
+   public void testPutObject() throws ArrayIndexOutOfBoundsException, 
SecurityException, IllegalArgumentException,
+         NoSuchMethodException, IOException {
+
+      Invokable<?, ?> method = method(AWSS3Client.class, "putObject", 
String.class, S3Object.class,
+            PutObjectOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket",
+            blobToS3Object.apply(BindBlobToMultipartFormTest.TEST_BLOB)));
+
+      assertRequestLineEquals(request, "PUT https://bucket."; + url + "/hello 
HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Expect: 100-continue\nHost: 
bucket." + url + "\n");
+      assertPayloadEquals(request, "hello", "text/plain", false);
+
+      assertResponseParserClassEquals(method, request, ParseETagHeader.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   @Override
+   public void testGetBucketLocation() throws SecurityException, 
NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(AWSS3Client.class, "getBucketLocation", 
String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket"));
+
+      assertRequestLineEquals(request, "GET 
https://bucket.s3.amazonaws.com/?location HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: bucket.s3.amazonaws.com\n");
+      assertPayloadEquals(request, null, null, false);
+
+      request = (GeneratedHttpRequest) filter.filter(request);
+
+      assertRequestLineEquals(request, "GET 
https://bucket.s3.amazonaws.com/?location HTTP/1.1");
+      assertNonPayloadHeadersEqual(
+            request,
+            "Authorization: AWS identity:2fFTeYJTDwiJmaAkKj732RjNbOg=\nDate: 
2009-11-08T15:54:08.897Z\nHost: bucket.s3.amazonaws.com\n");
+      assertPayloadEquals(request, null, null, false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, 
LocationConstraintHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   @Override
+   public void testPutBucketDefault() throws ArrayIndexOutOfBoundsException, 
SecurityException,
+         IllegalArgumentException, NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(AWSS3Client.class, "putBucketInRegion", 
String.class, String.class,
+            PutBucketOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
Lists.<Object> newArrayList((String) null, "bucket"));
+
+      assertRequestLineEquals(request, "PUT https://bucket.s3.amazonaws.com/ 
HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: bucket.s3.amazonaws.com\n");
+      assertPayloadEquals(request, null, null, false);
+
+      assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, 
FalseIfBucketAlreadyOwnedByYouOrOperationAbortedWhenBucketExists.class);
+
+      checkFilters(request);
+   }
+
+   public void testInitiateMultipartUpload() throws SecurityException, 
NegativeArraySizeException,
+         NoSuchMethodException {
+      Invokable<?, ?> method = method(AWSS3Client.class, 
"initiateMultipartUpload", String.class, ObjectMetadata.class,
+            PutObjectOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket", ObjectMetadataBuilder.create().key("foo")
+            .contentMD5(new byte[16]).build()));
+
+      assertRequestLineEquals(request, "POST https://bucket."; + url + 
"/foo?uploads HTTP/1.1");
+      assertNonPayloadHeadersEqual(request,
+            "Content-MD5: AAAAAAAAAAAAAAAAAAAAAA==\n" +
+            "Content-Type: binary/octet-stream\n" +
+            "Host: bucket." + url + "\n");
+      assertPayloadEquals(request, null, null, false);
+
+      // as this is a payload-related command, but with no payload, be careful
+      // that we check
+      // filtering and do not ignore if this fails later.
+      request = (GeneratedHttpRequest) 
request.getFilters().get(0).filter(request);
+
+      assertRequestLineEquals(request, "POST https://bucket."; + url + 
"/foo?uploads HTTP/1.1");
+      assertNonPayloadHeadersEqual(request,
+            "Authorization: AWS identity:972m/Bqn2L5FIaB+wWDeY83mGvU=\n" +
+            "Content-MD5: AAAAAAAAAAAAAAAAAAAAAA==\n" +
+            "Content-Type: binary/octet-stream\n" +
+            "Date: 2009-11-08T15:54:08.897Z\n" +
+            "Host: bucket." + url + "\n");
+      assertPayloadEquals(request, null, null, false);
+
+      assertResponseParserClassEquals(method, request, 
UploadIdFromHttpResponseViaRegex.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+      checkFilters(request);
+   }
+
+   public void testAbortMultipartUpload() throws SecurityException, 
NegativeArraySizeException, NoSuchMethodException {
+      Invokable<?, ?> method = method(AWSS3Client.class, 
"abortMultipartUpload", String.class, String.class, String.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket", "foo", "asdsadasdas", 1,
+            Payloads.newStringPayload("")));
+
+      assertRequestLineEquals(request, "DELETE https://bucket."; + url + 
"/foo?uploadId=asdsadasdas HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: bucket." + url + "\n");
+      assertPayloadEquals(request, "", "application/unknown", false);
+
+      assertResponseParserClassEquals(method, request, 
ReleasePayloadAndReturn.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, VoidOnNotFoundOr404.class);
+
+      checkFilters(request);
+   }
+
+   public void testUploadPart() throws SecurityException, 
NegativeArraySizeException, NoSuchMethodException {
+      Invokable<?, ?> method = method(AWSS3Client.class, "uploadPart", 
String.class, String.class, int.class,
+            String.class, Payload.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket", "foo", 1, "asdsadasdas",
+            Payloads.newStringPayload("")));
+
+      assertRequestLineEquals(request, "PUT https://bucket."; + url + 
"/foo?partNumber=1&uploadId=asdsadasdas HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: bucket." + url + "\n");
+      assertPayloadEquals(request, "", "application/unknown", false);
+
+      assertResponseParserClassEquals(method, request, ParseETagHeader.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+      checkFilters(request);
+   }
+
+   public void testCompleteMultipartUpload() throws SecurityException, 
NegativeArraySizeException,
+         NoSuchMethodException {
+      Invokable<?, ?> method = method(AWSS3Client.class, 
"completeMultipartUpload", String.class, String.class,
+            String.class, Map.class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("bucket", "foo", "asdsadasdas",
+            ImmutableMap.<Integer, String> of(1, 
"\"a54357aff0632cce46d942af68356b38\"")));
+
+      assertRequestLineEquals(request, "POST https://bucket."; + url + 
"/foo?uploadId=asdsadasdas HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: bucket." + url + "\n");
+      assertPayloadEquals(
+            request,
+            
"<CompleteMultipartUpload><Part><PartNumber>1</PartNumber><ETag>\"a54357aff0632cce46d942af68356b38\"</ETag></Part></CompleteMultipartUpload>",
+            "text/xml", false);
+
+      assertResponseParserClassEquals(method, request, 
ETagFromHttpResponseViaRegex.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+      checkFilters(request);
+   }
+
+   public void testPutBucketEu() throws ArrayIndexOutOfBoundsException, 
SecurityException, IllegalArgumentException,
+         NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(AWSS3Client.class, "putBucketInRegion", 
String.class, String.class,
+            PutBucketOptions[].class);
+      GeneratedHttpRequest request = processor.createRequest(method, 
ImmutableList.<Object> of("EU", "bucket"));
+
+      assertRequestLineEquals(request, "PUT https://bucket.s3.amazonaws.com/ 
HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "Host: bucket.s3.amazonaws.com\n");
+      assertPayloadEquals(request,
+            
"<CreateBucketConfiguration><LocationConstraint>EU</LocationConstraint></CreateBucketConfiguration>",
+            "text/xml", false);
+
+      assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, 
FalseIfBucketAlreadyOwnedByYouOrOperationAbortedWhenBucketExists.class);
+
+      checkFilters(request);
+   }
+
+   @ConfiguresHttpApi
+   private static final class TestAWSS3HttpApiModule extends 
AWSS3HttpApiModule {
+
+      @Override
+      protected CacheLoader<String, Optional<String>> bucketToRegion(@Region 
Supplier<Set<String>> regionSupplier,
+               final S3Client client) {
+         return CacheLoader.<String, Optional<String>> 
from(Functions.forMap(ImmutableMap
+                           .<String, Optional<String>> builder()
+                           .put("bucket", Optional.<String> absent())
+                           .put("destinationbucket", Optional.<String> 
absent())
+                           .put("bucket-us-standard", 
Optional.of("us-standard"))
+                           .put("bucket-us-west-1", Optional.of("us-west-1"))
+                           .put("bucket-us-west-2", Optional.of("us-west-2"))
+                           .put("bucket-eu-west-1", Optional.of("eu-west-1"))
+                           .put("bucket-sa-east-1", Optional.of("sa-east-1"))
+                           .put("bucket-ap-southeast-1", 
Optional.of("ap-southeast-1"))
+                           .put("bucket-ap-northeast-1", 
Optional.of("ap-northeast-1"))
+                           .build()));
+      }
+
+      @Override
+      protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
+         return "2009-11-08T15:54:08.897Z";
+      }
+   }
+
+   @Override
+   protected Module createModule() {
+      return new TestAWSS3HttpApiModule();
+   }
+   
+   @Override
+   public AWSS3ProviderMetadata createProviderMetadata() {
+      return new AWSS3ProviderMetadata();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/test/java/org/jclouds/aws/s3/binders/BindIterableAsPayloadToDeleteRequestTest.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/binders/BindIterableAsPayloadToDeleteRequestTest.java
 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/binders/BindIterableAsPayloadToDeleteRequestTest.java
index aa43888..0560ce5 100644
--- 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/binders/BindIterableAsPayloadToDeleteRequestTest.java
+++ 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/binders/BindIterableAsPayloadToDeleteRequestTest.java
@@ -16,16 +16,17 @@
  */
 package org.jclouds.aws.s3.binders;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
+import static org.testng.Assert.assertEquals;
+
+import javax.ws.rs.core.MediaType;
+
 import org.jclouds.http.HttpRequest;
 import org.jclouds.io.Payload;
 import org.jclouds.io.Payloads;
 import org.testng.annotations.Test;
 
-import javax.ws.rs.core.MediaType;
-
-import static org.testng.Assert.assertEquals;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 
 public class BindIterableAsPayloadToDeleteRequestTest {
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/test/java/org/jclouds/aws/s3/binders/BindObjectMetadataToRequestTest.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/binders/BindObjectMetadataToRequestTest.java
 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/binders/BindObjectMetadataToRequestTest.java
index 3802c7e..ff60120 100644
--- 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/binders/BindObjectMetadataToRequestTest.java
+++ 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/binders/BindObjectMetadataToRequestTest.java
@@ -22,10 +22,10 @@ import java.io.File;
 
 import org.jclouds.blobstore.binders.BindMapToHeadersWithPrefix;
 import org.jclouds.http.HttpRequest;
-import org.jclouds.s3.S3AsyncClient;
+import org.jclouds.s3.S3Client;
 import org.jclouds.s3.domain.ObjectMetadata;
 import org.jclouds.s3.domain.ObjectMetadataBuilder;
-import org.jclouds.s3.internal.BaseS3AsyncClientTest;
+import org.jclouds.s3.internal.BaseS3ClientTest;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableMap;
@@ -36,7 +36,7 @@ import com.google.common.collect.ImmutableMultimap;
  */
 // NOTE:without testName, this will not call @Before* and fail w/NPE during 
surefire
 @Test(groups = "unit", testName = "BindObjectMetadataToRequestTest")
-public class BindObjectMetadataToRequestTest extends 
BaseS3AsyncClientTest<S3AsyncClient> {
+public class BindObjectMetadataToRequestTest extends 
BaseS3ClientTest<S3Client> {
 
    @Test
    public void testPassWithMinimumDetailsAndPayload5GB() {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/AWSS3BlobSignerExpectTest.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/AWSS3BlobSignerExpectTest.java
 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/AWSS3BlobSignerExpectTest.java
index 60649a2..aed33d6 100644
--- 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/AWSS3BlobSignerExpectTest.java
+++ 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/AWSS3BlobSignerExpectTest.java
@@ -18,12 +18,12 @@ package org.jclouds.aws.s3.blobstore;
 
 import static org.testng.Assert.assertEquals;
 
-import org.jclouds.aws.s3.config.AWSS3RestClientModule;
+import org.jclouds.aws.s3.config.AWSS3HttpApiModule;
 import org.jclouds.blobstore.BlobStore;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.date.TimeStamp;
 import org.jclouds.http.HttpRequest;
-import org.jclouds.rest.ConfiguresRestClient;
+import org.jclouds.rest.ConfiguresHttpApi;
 import org.jclouds.s3.blobstore.S3BlobSignerExpectTest;
 import org.testng.annotations.Test;
 
@@ -116,11 +116,11 @@ public class AWSS3BlobSignerExpectTest extends 
S3BlobSignerExpectTest {
 
    @Override
    protected Module createModule() {
-      return new TestAWSS3RestClientModule();
+      return new TestAWSS3HttpApiModule();
    }
 
-   @ConfiguresRestClient
-   private static final class TestAWSS3RestClientModule extends 
AWSS3RestClientModule {
+   @ConfiguresHttpApi
+   private static final class TestAWSS3HttpApiModule extends 
AWSS3HttpApiModule {
       @Override
       @TimeStamp
       protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/test/java/org/jclouds/aws/s3/internal/BaseAWSS3ClientExpectTest.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/internal/BaseAWSS3ClientExpectTest.java
 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/internal/BaseAWSS3ClientExpectTest.java
index 124aab3..9613b86 100644
--- 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/internal/BaseAWSS3ClientExpectTest.java
+++ 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/internal/BaseAWSS3ClientExpectTest.java
@@ -18,10 +18,10 @@ package org.jclouds.aws.s3.internal;
 
 import org.jclouds.aws.s3.AWSS3Client;
 import org.jclouds.aws.s3.AWSS3ProviderMetadata;
-import org.jclouds.aws.s3.config.AWSS3RestClientModule;
+import org.jclouds.aws.s3.config.AWSS3HttpApiModule;
 import org.jclouds.date.TimeStamp;
 import org.jclouds.providers.ProviderMetadata;
-import org.jclouds.rest.ConfiguresRestClient;
+import org.jclouds.rest.ConfiguresHttpApi;
 import org.jclouds.rest.internal.BaseRestClientExpectTest;
 
 import com.google.common.base.Supplier;
@@ -44,8 +44,8 @@ public class BaseAWSS3ClientExpectTest extends 
BaseRestClientExpectTest<AWSS3Cli
       return new AWSS3ProviderMetadata();
    }
 
-      @ConfiguresRestClient
-   private static final class TestAWSS3RestClientModule extends 
AWSS3RestClientModule {
+      @ConfiguresHttpApi
+   private static final class TestAWSS3HttpApiModule extends 
AWSS3HttpApiModule {
       @Override
       protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
          return CONSTANT_DATE;
@@ -54,7 +54,7 @@ public class BaseAWSS3ClientExpectTest extends 
BaseRestClientExpectTest<AWSS3Cli
 
    @Override
    protected Module createModule() {
-      return new TestAWSS3RestClientModule();
+      return new TestAWSS3HttpApiModule();
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/test/java/org/jclouds/aws/s3/xml/DeleteResultHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/xml/DeleteResultHandlerTest.java
 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/xml/DeleteResultHandlerTest.java
index fd3ba94..85ce10a 100644
--- 
a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/xml/DeleteResultHandlerTest.java
+++ 
b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/xml/DeleteResultHandlerTest.java
@@ -16,13 +16,13 @@
  */
 package org.jclouds.aws.s3.xml;
 
-import org.jclouds.aws.s3.domain.DeleteResult;
-import org.jclouds.http.functions.BaseHandlerTest;
-import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
 
 import java.io.InputStream;
 
-import static org.testng.Assert.assertEquals;
+import org.jclouds.aws.s3.domain.DeleteResult;
+import org.jclouds.http.functions.BaseHandlerTest;
+import org.testng.annotations.Test;
 
 // NOTE:without testName, this will not call @Before* and fail w/NPE during 
surefire
 @Test(groups = "unit", testName = "DeleteResultHandlerTest")

Reply via email to