You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2018/07/11 16:36:12 UTC

[1/4] jclouds git commit: Pinning down JCLOUDS-1401 fix behavior with a unit test which is able to distinguish URI.query from URI.rawQuery.

Repository: jclouds
Updated Branches:
  refs/heads/master c34935dcd -> 019ccb743


Pinning down JCLOUDS-1401 fix behavior with a unit test which is able to distinguish URI.query from URI.rawQuery.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/019ccb74
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/019ccb74
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/019ccb74

Branch: refs/heads/master
Commit: 019ccb74316374498f9fdac0339621b2a3b6ad76
Parents: 9a65be7
Author: Jesse Glick <jg...@cloudbees.com>
Authored: Wed Jul 11 10:41:50 2018 -0400
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Jul 11 09:35:34 2018 -0700

----------------------------------------------------------------------
 .../RequestAuthorizeSignatureV4Test.java        | 25 ++++++++++++++++++++
 1 file changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/019ccb74/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV4Test.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV4Test.java b/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV4Test.java
index 9494a86..b59a26b 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV4Test.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureV4Test.java
@@ -41,6 +41,7 @@ import org.jclouds.s3.S3ApiMetadata;
 import org.jclouds.s3.S3Client;
 import org.jclouds.s3.config.S3HttpApiModule;
 import org.jclouds.s3.domain.S3Object;
+import org.jclouds.s3.options.ListBucketOptions;
 import org.jclouds.s3.options.PutObjectOptions;
 import org.testng.annotations.Test;
 
@@ -83,6 +84,11 @@ public class RequestAuthorizeSignatureV4Test {
          + "SignedHeaders=content-length;content-type;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class, "
          + "Signature=090f1bb1db984221ae1a20c5d12a82820a0d74b4be85f20daa1431604f41df08";
 
+   private static final String LIST_BUCKET_RESULT = "AWS4-HMAC-SHA256 "
+         + "Credential=AKIAPAEBI3QI4EXAMPLE/20150203/cn-north-1/s3/aws4_request, "
+         + "SignedHeaders=host;x-amz-content-sha256;x-amz-date, "
+         + "Signature=6cc5d0758e2599be7cb172fd57cefab2828201a2b4d372972a83dc304de93958";
+
    private static final String BUCKET_NAME = "test-bucket";
    private static final String OBJECT_NAME = "ExampleObject.txt";
 
@@ -190,4 +196,23 @@ public class RequestAuthorizeSignatureV4Test {
       assertEquals(filtered.getFirstHeaderOrNull("Authorization"), PUT_OBJECT_RESULT);
 
    }
+
+   // JCLOUDS-1401
+   @Test
+   void testListBucketFunnyCharactersSignature() {
+      Invocation invocation = Invocation.create(method(S3Client.class, "listBucket", String.class,
+                  ListBucketOptions[].class),
+            // Simulating ListBucketOptions.Builder.withPrefix("foo%2Fbar") with manual endpoint:
+            ImmutableList.<Object>of(BUCKET_NAME, new ListBucketOptions[0]));
+
+      HttpRequest getObject = GeneratedHttpRequest.builder().method("GET")
+            .invocation(invocation)
+            .endpoint("https://" + BUCKET_NAME + ".s3.cn-north-1.amazonaws.com.cn/?delimiter=/&prefix=foo%252Fbar")
+            .addHeader(HttpHeaders.HOST, BUCKET_NAME + ".s3.cn-north-1.amazonaws.com.cn")
+            .build();
+
+      HttpRequest filtered = filter(temporaryCredentials).filter(getObject);
+      assertEquals(filtered.getFirstHeaderOrNull("Authorization"), LIST_BUCKET_RESULT);
+   }
+
 }


[2/4] jclouds git commit: Allow S3ClientLiveTest (and AWSS3ClientLiveTest) to use a session token.

Posted by na...@apache.org.
Allow S3ClientLiveTest (and AWSS3ClientLiveTest) to use a session token.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/34d272ac
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/34d272ac
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/34d272ac

Branch: refs/heads/master
Commit: 34d272ac801971ef6115b01ab9c3984b5d523f7e
Parents: f770455
Author: Jesse Glick <jg...@cloudbees.com>
Authored: Tue Jul 10 17:59:25 2018 -0400
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Jul 11 09:35:34 2018 -0700

----------------------------------------------------------------------
 apis/s3/pom.xml                                 |  2 ++
 .../java/org/jclouds/s3/S3ClientLiveTest.java   | 28 ++++++++++++++++++++
 providers/aws-s3/README.md                      | 21 +++++++++++++++
 providers/aws-s3/README.txt                     |  8 ------
 providers/aws-s3/pom.xml                        |  2 ++
 5 files changed, 53 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/34d272ac/apis/s3/pom.xml
----------------------------------------------------------------------
diff --git a/apis/s3/pom.xml b/apis/s3/pom.xml
index 07fcec7..e1a336c 100644
--- a/apis/s3/pom.xml
+++ b/apis/s3/pom.xml
@@ -37,6 +37,7 @@
     <test.s3.build-version />
     <test.s3.identity>${test.aws.identity}</test.s3.identity>
     <test.s3.credential>${test.aws.credential}</test.s3.credential>
+    <test.s3.sessionToken>${test.aws.sessionToken}</test.s3.sessionToken>
 
     <jclouds.osgi.export>org.jclouds.s3*;version="${project.version}"</jclouds.osgi.export>
     <jclouds.osgi.import>org.jclouds*;version="${project.version}",*</jclouds.osgi.import>
@@ -131,6 +132,7 @@
                     <test.s3.build-version>${test.s3.build-version}</test.s3.build-version>
                     <test.s3.identity>${test.s3.identity}</test.s3.identity>
                     <test.s3.credential>${test.s3.credential}</test.s3.credential>
+                    <test.s3.sessionToken>${test.s3.sessionToken}</test.s3.sessionToken>
                   </systemPropertyVariables>
                 </configuration>
               </execution>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/34d272ac/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java b/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
index ede5551..b6b53e0 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
@@ -37,15 +37,19 @@ import java.net.URI;
 import java.net.URL;
 import java.util.Date;
 import java.util.Map;
+import java.util.Properties;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.TimeUnit;
 
+import org.jclouds.ContextBuilder;
+import org.jclouds.aws.domain.SessionCredentials;
 import org.jclouds.blobstore.KeyNotFoundException;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest;
+import org.jclouds.domain.Credentials;
 import org.jclouds.http.HttpResponseException;
 import org.jclouds.io.ByteStreams2;
 import org.jclouds.io.Payload;
@@ -66,6 +70,7 @@ import org.jclouds.util.Strings2;
 import org.jclouds.utils.TestUtils;
 import org.testng.annotations.Test;
 
+import com.google.common.base.Supplier;
 import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -80,10 +85,33 @@ public class S3ClientLiveTest extends BaseBlobStoreIntegrationTest {
    public static final String DEFAULT_OWNER_ID = "abc123";
    private static final ByteSource oneHundredOneConstitutions = TestUtils.randomByteSource().slice(0, 5 * 1024 * 1024 + 1);
 
+   protected String sessionToken;
+
    public S3ClientLiveTest() {
       this.provider = "s3";
    }
    
+   @Override
+   protected Properties setupProperties() {
+      Properties overrides = super.setupProperties();
+      sessionToken = setIfTestSystemPropertyPresent(overrides, provider + ".sessionToken");
+      return overrides;
+   }
+
+   @Override
+   protected ContextBuilder newBuilder() {
+      ContextBuilder builder = super.newBuilder();
+      if (sessionToken != null) {
+         builder.credentialsSupplier(new Supplier<Credentials>() {
+            @Override
+            public Credentials get() {
+               return SessionCredentials.builder().identity(identity).credential(credential).sessionToken(sessionToken).build();
+            }
+         });
+      }
+      return builder;
+   }
+
    public S3Client getApi() {
       return view.unwrapApi(S3Client.class);
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/34d272ac/providers/aws-s3/README.md
----------------------------------------------------------------------
diff --git a/providers/aws-s3/README.md b/providers/aws-s3/README.md
new file mode 100644
index 0000000..84e9968
--- /dev/null
+++ b/providers/aws-s3/README.md
@@ -0,0 +1,21 @@
+# The jclouds provider for Amazon's S3 (http://aws.amazon.com/s3/)
+
+Expects the jclouds s3 API to be present on your application's classpath.
+
+* **TODO**: Implementation status.
+* **TODO**: Supported features.
+* **TODO**: Usage example.
+
+## Running live tests
+
+Try
+
+```sh
+mvn clean install -Plive -pl :aws-s3 -Dtest=AWSS3ClientLiveTest -Dtest.aws-s3.identity=<aws_access_key_id> -Dtest.aws-s3.credential=<aws_secret_access_key>
+```
+
+optionally adding
+
+```sh
+-Dtest.aws-s3.sessionToken=<aws_session_token>
+```

http://git-wip-us.apache.org/repos/asf/jclouds/blob/34d272ac/providers/aws-s3/README.txt
----------------------------------------------------------------------
diff --git a/providers/aws-s3/README.txt b/providers/aws-s3/README.txt
deleted file mode 100644
index edcab1d..0000000
--- a/providers/aws-s3/README.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-#
-# The jclouds provider for Amazon's S3 (http://aws.amazon.com/s3/).
-#
-# Expects the jclouds s3 API to be present on your application's classpath.
-#
-# TODO: Implementation status.
-# TODO: Supported features.
-# TODO: Usage example.

http://git-wip-us.apache.org/repos/asf/jclouds/blob/34d272ac/providers/aws-s3/pom.xml
----------------------------------------------------------------------
diff --git a/providers/aws-s3/pom.xml b/providers/aws-s3/pom.xml
index 8f555bc..e0e9f08 100644
--- a/providers/aws-s3/pom.xml
+++ b/providers/aws-s3/pom.xml
@@ -40,6 +40,7 @@
     <test.aws-s3.build-version />
     <test.aws-s3.identity>${test.aws.identity}</test.aws-s3.identity>
     <test.aws-s3.credential>${test.aws.credential}</test.aws-s3.credential>
+    <test.aws-s3.sessionToken>${test.aws.sessionToken}</test.aws-s3.sessionToken>
     <test.blobstore.container-count>25</test.blobstore.container-count>
 
     <jclouds.osgi.export>org.jclouds.aws.s3*;version="${project.version}"</jclouds.osgi.export>
@@ -137,6 +138,7 @@
                     <test.aws-s3.build-version>${test.aws-s3.build-version}</test.aws-s3.build-version>
                     <test.aws-s3.identity>${test.aws-s3.identity}</test.aws-s3.identity>
                     <test.aws-s3.credential>${test.aws-s3.credential}</test.aws-s3.credential>
+                    <test.aws-s3.sessionToken>${test.aws-s3.sessionToken}</test.aws-s3.sessionToken>
                     <test.initializer>${test.initializer}</test.initializer>
                     <jclouds.blobstore.httpstream.url>${jclouds.blobstore.httpstream.url}</jclouds.blobstore.httpstream.url>
                     <jclouds.blobstore.httpstream.md5>${jclouds.blobstore.httpstream.md5}</jclouds.blobstore.httpstream.md5>


[4/4] jclouds git commit: [JCLOUDS-1401] Properly URL-encode the CanonicalQueryString when it contains funny characters.

Posted by na...@apache.org.
[JCLOUDS-1401] Properly URL-encode the CanonicalQueryString when it contains funny characters.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/f770455f
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/f770455f
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/f770455f

Branch: refs/heads/master
Commit: f770455ff9f53a9413353cc0d4d534a3e1f6fb83
Parents: c34935d
Author: Jesse Glick <jg...@cloudbees.com>
Authored: Mon Jul 9 23:45:52 2018 -0400
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Jul 11 09:35:34 2018 -0700

----------------------------------------------------------------------
 apis/s3/src/main/java/org/jclouds/s3/filters/Aws4SignerBase.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/f770455f/apis/s3/src/main/java/org/jclouds/s3/filters/Aws4SignerBase.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/filters/Aws4SignerBase.java b/apis/s3/src/main/java/org/jclouds/s3/filters/Aws4SignerBase.java
index 5aa88da..66d5231 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/filters/Aws4SignerBase.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/filters/Aws4SignerBase.java
@@ -398,7 +398,7 @@ public abstract class Aws4SignerBase {
 
       // CanonicalQueryString + '\n' +
       if (endpoint.getQuery() != null) {
-         canonicalRequest.append(getCanonicalizedQueryString(endpoint.getQuery()));
+         canonicalRequest.append(getCanonicalizedQueryString(endpoint.getRawQuery()));
       }
       canonicalRequest.append("\n");
 


[3/4] jclouds git commit: Live test demonstrating effectiveness of JCLOUDS-1401 fix.

Posted by na...@apache.org.
Live test demonstrating effectiveness of JCLOUDS-1401 fix.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/9a65be78
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/9a65be78
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/9a65be78

Branch: refs/heads/master
Commit: 9a65be789e760cf279b6df525d6bfc7bd94732dd
Parents: 34d272a
Author: Jesse Glick <jg...@cloudbees.com>
Authored: Wed Jul 11 10:19:05 2018 -0400
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Jul 11 09:35:34 2018 -0700

----------------------------------------------------------------------
 .../java/org/jclouds/s3/S3ClientLiveTest.java   | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/9a65be78/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java b/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
index b6b53e0..425f37a 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/S3ClientLiveTest.java
@@ -48,7 +48,10 @@ import org.jclouds.ContextBuilder;
 import org.jclouds.aws.domain.SessionCredentials;
 import org.jclouds.blobstore.KeyNotFoundException;
 import org.jclouds.blobstore.domain.Blob;
+import org.jclouds.blobstore.domain.PageSet;
+import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest;
+import org.jclouds.blobstore.options.ListContainerOptions;
 import org.jclouds.domain.Credentials;
 import org.jclouds.http.HttpResponseException;
 import org.jclouds.io.ByteStreams2;
@@ -535,6 +538,23 @@ public class S3ClientLiveTest extends BaseBlobStoreIntegrationTest {
       }
    }
 
+   // JCLOUDS-1401
+   public void testUnusualKeyCharacters() throws InterruptedException, ExecutionException, TimeoutException, IOException {
+      String containerName = getContainerName();
+      try {
+         String dirName = "a%2Fb&xxx#?:$'\\\"<>čॐ";
+         String fileName = "foo%3Abar.xml";
+         addToContainerAndValidate(containerName, dirName + '/' + fileName);
+         PageSet<? extends StorageMetadata> list = view.getBlobStore().list(containerName,
+                  ListContainerOptions.Builder.prefix(dirName + "/"));
+         assertEquals(list.size(), 1);
+         StorageMetadata md = list.iterator().next();
+         assertEquals(md.getName(), dirName + '/' + fileName);
+      } finally {
+         returnContainer(containerName);
+      }
+   }
+
    public void testMultipartSynchronously() throws InterruptedException, IOException {
       HashCode oneHundredOneConstitutionsMD5 = oneHundredOneConstitutions.hash(md5());
       String containerName = getContainerName();