diff --git a/apis/s3/src/test/java/org/jclouds/s3/S3ClientExpectTest.java b/apis/s3/src/test/java/org/jclouds/s3/S3ClientExpectTest.java index 4fb0c87186..ce237532dc 100644 --- a/apis/s3/src/test/java/org/jclouds/s3/S3ClientExpectTest.java +++ b/apis/s3/src/test/java/org/jclouds/s3/S3ClientExpectTest.java @@ -34,7 +34,8 @@ import com.google.common.collect.ImmutableMultimap; @Test(groups = "unit", testName = "S3ClientExpectTest") public class S3ClientExpectTest extends BaseS3ClientExpectTest { - public void bucketExistsReturnsTrueOn200AndFalseOn404() { + @Test + public void testBucketExistsReturnsTrueOn200AndFalseOn404() { HttpRequest bucketFooExists = HttpRequest.builder().method("HEAD").endpoint( URI.create("https://foo.s3.amazonaws.com/?max-keys=0")).headers( 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 index 138c3013f2..ccaf4b097b 100644 --- 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 @@ -33,6 +33,7 @@ import org.jclouds.aws.s3.binders.AssignCorrectHostnameAndBindAsHostPrefixIfConf import org.jclouds.http.RequiresHttp; import org.jclouds.location.Region; import org.jclouds.rest.ConfiguresRestClient; +import org.jclouds.rest.RestContext; import org.jclouds.s3.Bucket; import org.jclouds.s3.S3AsyncClient; import org.jclouds.s3.S3Client; @@ -43,7 +44,7 @@ import com.google.inject.Provides; /** * Configures the S3 connection. - * + * * @author Adrian Cole */ @RequiresHttp @@ -84,4 +85,15 @@ public class AWSS3RestClientModule extends S3RestClientModule + */ + @SuppressWarnings("unchecked") + @Singleton + @Provides + RestContext + provideBaseContext(RestContext in) { + return (RestContext) in; + } + } diff --git a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java new file mode 100644 index 0000000000..63055cb45f --- /dev/null +++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java @@ -0,0 +1,77 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds 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 com.google.common.collect.ImmutableMultimap; +import org.jclouds.aws.s3.internal.BaseAWSS3ClientExpectTest; +import org.jclouds.blobstore.domain.Blob; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.HttpResponse; +import org.jclouds.io.payloads.StringPayload; +import org.jclouds.s3.blobstore.functions.BlobToObject; +import org.testng.annotations.Test; + +import java.net.URI; + +import static org.jclouds.aws.s3.blobstore.options.AWSS3PutObjectOptions.Builder.storageClass; +import static org.jclouds.s3.domain.ObjectMetadata.StorageClass; + +/** + * @author Andrei Savu + */ +@Test +public class AWSS3ClientExpectTest extends BaseAWSS3ClientExpectTest { + + @Test + public void testPutWithReducedRedundancy() { + AWSS3Client client = requestSendsResponse( + HttpRequest.builder() + .method("PUT") + .endpoint(URI.create("https://test.s3.amazonaws.com/test")) + .headers(ImmutableMultimap.of( + "x-amz-storage-class", "REDUCED_REDUNDANCY", + "Host", "test.s3.amazonaws.com", + "Date", CONSTANT_DATE, + "Authorization", "AWS identity:1mJrW85/mqZpYTFIK5Ebtt2MM6E=" + )) + .payload(new StringPayload("content")) + .build(), + HttpResponse.builder() + .statusCode(200) + .headers(ImmutableMultimap.of( + "x-amz-id-2", "w0rL+9fALQiCOToesVQefs8WalIgn+ZhMD7hHMKYud/xv7MyKkAWQOtFNEfK97Ri", + "x-amz-request-id", "7A84C3CD4437A4C0", + "Date", CONSTANT_DATE, + "ETag", "437b930db84b8079c2dd804a71936b5f", + "Server", "AmazonS3" + )) + .build() + ); + + Blob blob = blobStore.blobBuilder("test").payload("content").build(); + BlobToObject blobToObject = getInstance(BlobToObject.class); + + client.putObject("test", blobToObject.apply(blob), + storageClass(StorageClass.REDUCED_REDUNDANCY)); + } + + public T getInstance(Class klass) { + return blobStoreContext.utils().injector().getInstance(klass); + } +} 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 new file mode 100644 index 0000000000..169b5d5962 --- /dev/null +++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/internal/BaseAWSS3ClientExpectTest.java @@ -0,0 +1,83 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds 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.internal; + +import com.google.common.base.Function; +import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableSet; +import com.google.inject.Module; +import org.jclouds.aws.s3.AWSS3Client; +import org.jclouds.aws.s3.config.AWSS3RestClientModule; +import org.jclouds.blobstore.BlobStore; +import org.jclouds.blobstore.BlobStoreContext; +import org.jclouds.blobstore.BlobStoreContextFactory; +import org.jclouds.date.TimeStamp; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.HttpResponse; +import org.jclouds.http.RequiresHttp; +import org.jclouds.logging.config.NullLoggingModule; +import org.jclouds.rest.BaseRestClientExpectTest; +import org.jclouds.rest.ConfiguresRestClient; + +import java.util.Properties; + +/** + * Base class for writing Expect tests for AWS-S3 + * + * @author Andrei Savu + */ +public class BaseAWSS3ClientExpectTest extends BaseRestClientExpectTest { + + protected static final String CONSTANT_DATE = "2009-11-08T15:54:08.897Z"; + + protected BlobStoreContext blobStoreContext; + protected BlobStore blobStore; + + public BaseAWSS3ClientExpectTest() { + provider = "aws-s3"; + } + + @RequiresHttp + @ConfiguresRestClient + private static final class TestAWSS3RestClientModule extends AWSS3RestClientModule { + @Override + protected String provideTimeStamp(@TimeStamp Supplier cache) { + return CONSTANT_DATE; + } + } + + @Override + protected Module createModule() { + return new TestAWSS3RestClientModule(); + } + + @Override + public AWSS3Client createClient(Function fn, Module module, Properties props) { + return clientFrom(BlobStoreContext.class.cast(new BlobStoreContextFactory(setupRestProperties()) + .createContext(provider, "identity", "credential", ImmutableSet.of(new ExpectModule(fn), + new NullLoggingModule(), module), props))); + } + + protected AWSS3Client clientFrom(BlobStoreContext context) { + blobStoreContext = context; + blobStore = context.getBlobStore(); + return AWSS3Client.class.cast(context.getProviderSpecificContext().getApi()); + } + +}