From f27bed524c51266da868266e55268a57156a073e Mon Sep 17 00:00:00 2001 From: andreisavu Date: Sat, 14 Jan 2012 00:32:35 +0200 Subject: [PATCH 1/2] Putting basic blocks in place for writing Expect tests for aws-s3 --- .../org/jclouds/s3/S3ClientExpectTest.java | 3 +- .../jclouds/aws/s3/AWSS3ClientExpectTest.java | 50 ++++++++++++++++ .../internal/BaseAWSS3ClientExpectTest.java | 57 +++++++++++++++++++ 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java create mode 100644 providers/aws-s3/src/test/java/org/jclouds/aws/s3/internal/BaseAWSS3ClientExpectTest.java 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/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..c5708087ec --- /dev/null +++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/AWSS3ClientExpectTest.java @@ -0,0 +1,50 @@ +/** + * 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 org.jclouds.aws.s3.internal.BaseAWSS3ClientExpectTest; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.HttpResponse; +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 + */ +public class AWSS3ClientExpectTest extends BaseAWSS3ClientExpectTest { + + @Test + public void testPutWithReducedRedundancy() { + AWSS3Client client = requestSendsResponse( + HttpRequest.builder() + .method("PUT") + .endpoint(URI.create("http://test.s3.amazon.com/")) + .build(), + HttpResponse.builder() + .statusCode(200) + .build() + ); + + client.putObject("test", null, storageClass(StorageClass.REDUCED_REDUNDANCY)); + } +} 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..511060586e --- /dev/null +++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/internal/BaseAWSS3ClientExpectTest.java @@ -0,0 +1,57 @@ +/** + * 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.Supplier; +import com.google.inject.Module; +import org.jclouds.aws.s3.AWSS3Client; +import org.jclouds.aws.s3.config.AWSS3RestClientModule; +import org.jclouds.date.TimeStamp; +import org.jclouds.http.RequiresHttp; +import org.jclouds.rest.BaseRestClientExpectTest; +import org.jclouds.rest.ConfiguresRestClient; + +/** + * 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"; + + 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(); + } + +} From 20f5205727cbe1893a751cf20426a8b1b793cfc1 Mon Sep 17 00:00:00 2001 From: andreisavu Date: Sat, 14 Jan 2012 14:05:17 +0200 Subject: [PATCH 2/2] Added expect test for putBlob with reduced redundancy --- .../aws/s3/config/AWSS3RestClientModule.java | 14 ++++++++- .../jclouds/aws/s3/AWSS3ClientExpectTest.java | 31 +++++++++++++++++-- .../internal/BaseAWSS3ClientExpectTest.java | 26 ++++++++++++++++ 3 files changed, 68 insertions(+), 3 deletions(-) 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 index c5708087ec..63055cb45f 100644 --- 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 @@ -18,9 +18,13 @@ */ 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; @@ -31,6 +35,7 @@ import static org.jclouds.s3.domain.ObjectMetadata.StorageClass; /** * @author Andrei Savu */ +@Test public class AWSS3ClientExpectTest extends BaseAWSS3ClientExpectTest { @Test @@ -38,13 +43,35 @@ public class AWSS3ClientExpectTest extends BaseAWSS3ClientExpectTest { AWSS3Client client = requestSendsResponse( HttpRequest.builder() .method("PUT") - .endpoint(URI.create("http://test.s3.amazon.com/")) + .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() ); - client.putObject("test", null, storageClass(StorageClass.REDUCED_REDUNDANCY)); + 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 index 511060586e..169b5d5962 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,15 +18,25 @@ */ 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 * @@ -36,6 +46,9 @@ public class BaseAWSS3ClientExpectTest extends BaseRestClientExpectTest 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()); + } + }