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")
