You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2017/05/08 18:10:03 UTC

[01/50] jclouds git commit: JCLOUDS-651: GCS copy object content metadata

Repository: jclouds
Updated Branches:
  refs/heads/master 1c6c36b81 -> 9ea76ebe4


JCLOUDS-651: GCS copy object content metadata


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

Branch: refs/heads/master
Commit: 84316704c63c9246834f786546dcb73f1c41b8b1
Parents: d51bc04
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Apr 9 21:25:21 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Apr 9 21:27:05 2015 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java  | 57 +++++++++++++++-----
 1 file changed, 44 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/84316704/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 7ef2daf..dcc1d5a 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -23,7 +23,6 @@ import static org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Obj
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.Set;
-import java.util.Map;
 
 import javax.inject.Inject;
 
@@ -66,6 +65,7 @@ import org.jclouds.googlecloudstorage.domain.templates.ObjectAccessControlsTempl
 import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate;
 import org.jclouds.googlecloudstorage.options.ListObjectOptions;
 import org.jclouds.http.HttpResponseException;
+import org.jclouds.io.ContentMetadata;
 import org.jclouds.io.Payload;
 
 import com.google.common.base.Charsets;
@@ -305,16 +305,47 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
       return false;
    }
 
-    @Override
-    public String copyBlob(String fromContainer, String fromName, String toContainer, String toName, CopyOptions options) {
-
-        if (options == CopyOptions.NONE) {
-           return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName).etag();
-        } else {
-            Map<String, String> map = options.getUserMetadata().get();
-            String contentType = api.getObjectApi().getObject(fromContainer, fromName).contentType();
-            ObjectTemplate template = new ObjectTemplate().customMetadata(map).contentType(contentType);
-            return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName, template).etag();
-        }
-    }
+   @Override
+   public String copyBlob(String fromContainer, String fromName, String toContainer, String toName,
+         CopyOptions options) {
+      if (!options.getContentMetadata().isPresent() && !options.getUserMetadata().isPresent()) {
+         return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName).etag();
+      }
+
+      ObjectTemplate template = new ObjectTemplate();
+
+      if (options.getContentMetadata().isPresent()) {
+         ContentMetadata contentMetadata = options.getContentMetadata().get();
+
+         String contentDisposition = contentMetadata.getContentDisposition();
+         if (contentDisposition != null) {
+            template.contentDisposition(contentDisposition);
+         }
+
+         // TODO: causes failures with subsequent GET operations:
+         // HTTP/1.1 failed with response: HTTP/1.1 503 Service Unavailable; content: [Service Unavailable]
+/*
+         String contentEncoding = contentMetadata.getContentEncoding();
+         if (contentEncoding != null) {
+            template.contentEncoding(contentEncoding);
+         }
+*/
+
+         String contentLanguage = contentMetadata.getContentLanguage();
+         if (contentLanguage != null) {
+            template.contentLanguage(contentLanguage);
+         }
+
+         String contentType = contentMetadata.getContentType();
+         if (contentType != null) {
+            template.contentType(contentType);
+         }
+      }
+
+      if (options.getUserMetadata().isPresent()) {
+         template.customMetadata(options.getUserMetadata().get());
+      }
+
+      return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName, template).etag();
+   }
 }


[49/50] jclouds git commit: Merge remote-tracking branch 'jclouds-labs-google-local/promote-google-cloud-storage-moved' into promoted-google-cloud-storage

Posted by ga...@apache.org.
Merge remote-tracking branch 'jclouds-labs-google-local/promote-google-cloud-storage-moved' into promoted-google-cloud-storage


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

Branch: refs/heads/master
Commit: 6efc894e3fe9d6cc4958360ba0811aec6c279b30
Parents: 1c6c36b b671d2c
Author: Andrew Gaul <an...@gaul.org>
Authored: Sat May 6 19:28:48 2017 -0700
Committer: Andrew Gaul <an...@gaul.org>
Committed: Sat May 6 19:28:48 2017 -0700

----------------------------------------------------------------------
 providers/google-cloud-storage/README.md        |  51 ++
 providers/google-cloud-storage/pom.xml          | 172 ++++++
 .../GoogleCloudStorageApi.java                  |  77 +++
 .../GoogleCloudStorageApiMetadata.java          |  96 ++++
 .../GoogleCloudStorageFallbacks.java            |  34 ++
 .../GoogleCloudStorageProviderMetadata.java     |  72 +++
 .../binders/MultipartUploadBinder.java          |  69 +++
 .../binders/UploadBinder.java                   |  38 ++
 .../GoogleCloudStorageBlobRequestSigner.java    | 153 ++++++
 .../blobstore/GoogleCloudStorageBlobStore.java  | 468 ++++++++++++++++
 ...oogleCloudStorageBlobStoreContextModule.java |  44 ++
 .../functions/BlobMetadataToObjectTemplate.java |  56 ++
 ...ListContainerOptionsToListObjectOptions.java |  58 ++
 .../functions/BucketToStorageMetadata.java      |  45 ++
 .../functions/ObjectListToStorageMetadata.java  |  58 ++
 .../functions/ObjectToBlobMetadata.java         |  59 ++
 .../config/GoogleCloudStorageHttpApiModule.java |  63 +++
 .../config/GoogleCloudStorageOAuthScopes.java   |  56 ++
 .../config/GoogleCloudStorageParserModule.java  |  90 ++++
 .../googlecloudstorage/domain/Bucket.java       | 181 +++++++
 .../domain/BucketAccessControls.java            | 122 +++++
 .../domain/DomainResourceReferences.java        | 105 ++++
 .../domain/GoogleCloudStorageObject.java        |  79 +++
 .../domain/ListPageWithPrefixes.java            |  58 ++
 .../domain/ObjectAccessControls.java            | 133 +++++
 .../googlecloudstorage/domain/Owner.java        |  34 ++
 .../googlecloudstorage/domain/ProjectTeam.java  |  55 ++
 .../domain/ResumableUpload.java                 |  43 ++
 .../domain/RewriteResponse.java                 |  41 ++
 .../templates/BucketAccessControlsTemplate.java |  33 ++
 .../domain/templates/BucketTemplate.java        | 172 ++++++
 .../domain/templates/ComposeObjectTemplate.java | 123 +++++
 .../templates/ObjectAccessControlsTemplate.java |  33 ++
 .../domain/templates/ObjectTemplate.java        | 178 +++++++
 .../features/BucketAccessControlsApi.java       | 172 ++++++
 .../googlecloudstorage/features/BucketApi.java  | 281 ++++++++++
 .../DefaultObjectAccessControlsApi.java         | 180 +++++++
 .../features/ObjectAccessControlsApi.java       | 317 +++++++++++
 .../googlecloudstorage/features/ObjectApi.java  | 532 +++++++++++++++++++
 .../features/ResumableUploadApi.java            | 185 +++++++
 .../GoogleCloudStorageErrorHandler.java         |  75 +++
 .../GoogleCloudStorageRedirectRetryHandler.java |  48 ++
 .../options/ComposeObjectOptions.java           |  63 +++
 .../options/CopyObjectOptions.java              | 153 ++++++
 .../options/DeleteBucketOptions.java            |  51 ++
 .../options/DeleteObjectOptions.java            |  88 +++
 .../options/GetBucketOptions.java               |  61 +++
 .../options/GetObjectOptions.java               |  88 +++
 .../options/InsertBucketOptions.java            |  53 ++
 .../options/InsertObjectOptions.java            | 115 ++++
 .../options/ListObjectOptions.java              |  82 +++
 .../googlecloudstorage/options/ListOptions.java |  53 ++
 .../options/RewriteObjectOptions.java           | 155 ++++++
 .../options/UpdateBucketOptions.java            |  71 +++
 .../options/UpdateObjectOptions.java            | 100 ++++
 .../parser/ParseToPayloadEnclosing.java         |  33 ++
 .../parser/ParseToResumableUpload.java          |  72 +++
 .../reference/GoogleCloudStorageConstants.java  |  37 ++
 .../GoogleCloudStorageProviderMetadataTest.java |  34 ++
 ...ogleCloudStorageBlobIntegrationLiveTest.java | 324 +++++++++++
 .../GoogleCloudStorageBlobLiveTest.java         | 115 ++++
 .../GoogleCloudStorageBlobSignerLiveTest.java   |  36 ++
 ...loudStorageContainerIntegrationLiveTest.java | 106 ++++
 .../GoogleCloudStorageContainerLiveTest.java    |  36 ++
 .../BucketAccessControlsApiExpectTest.java      | 188 +++++++
 .../BucketAccessControlsApiLiveTest.java        | 107 ++++
 .../features/BucketApiExpectTest.java           | 258 +++++++++
 .../features/BucketApiLiveTest.java             | 301 +++++++++++
 ...efaultObjectAccessControlsApiExpectTest.java | 219 ++++++++
 .../DefaultObjectAccessControlsApiLiveTest.java | 110 ++++
 .../ObjectAccessControlsApiExpectTest.java      | 276 ++++++++++
 .../features/ObjectApiLiveTest.java             | 478 +++++++++++++++++
 .../features/ObjectApiMockTest.java             | 303 +++++++++++
 .../features/ResumableUploadApiLiveTest.java    | 177 ++++++
 .../GoogleCloudStorageErrorHandlerTest.java     | 107 ++++
 .../BaseGoogleCloudStorageApiExpectTest.java    |  30 ++
 .../BaseGoogleCloudStorageApiLiveTest.java      |  54 ++
 .../BaseGoogleCloudStorageApiMockTest.java      | 138 +++++
 .../BaseGoogleCloudStorageExpectTest.java       | 178 +++++++
 .../BaseGoogleCloudStorageParseTest.java        |  38 ++
 .../parse/BucketAclGetTest.java                 |  39 ++
 .../parse/BucketAclInsertTest.java              |  42 ++
 .../parse/BucketAclListTest.java                |  55 ++
 .../parse/BucketAclUpdateTest.java              |  39 ++
 .../parse/BucketUpdateTest.java                 |  57 ++
 .../parse/DefaultObjectAclGetTest.java          |  42 ++
 .../parse/DefaultObjectAclInsertTest.java       |  38 ++
 .../parse/DefaultObjectAclListTest.java         |  50 ++
 .../parse/FullBucketGetTest.java                |  80 +++
 .../parse/NoAclBucketListTest.java              |  61 +++
 .../parse/NoAclBucketTest.java                  |  57 ++
 .../parse/ObjectAclGetTest.java                 |  49 ++
 .../parse/ObjectAclInsertTest.java              |  44 ++
 .../parse/ObjectAclListTest.java                |  51 ++
 .../parse/ObjectAclUpdateTest.java              |  40 ++
 .../parse/ParseGoogleCloudStorageObject.java    |  66 +++
 .../ParseGoogleCloudStorageObjectListTest.java  |  99 ++++
 .../parse/ParseObjectRewriteResponse.java       |  72 +++
 .../src/test/resources/bucket_acl_get.json      |   9 +
 .../resources/bucket_acl_insert_initial.json    |   4 +
 .../resources/bucket_acl_insert_response.json   |   9 +
 .../src/test/resources/bucket_acl_list.json     |  27 +
 .../resources/bucket_acl_update_initial.json    |   4 +
 .../resources/bucket_acl_update_response.json   |   9 +
 .../bucket_insert_request_payload.json          |   3 +
 .../bucket_update_request_payload.json          |  12 +
 .../test/resources/bucket_update_response.json  |  15 +
 .../test/resources/default_object_acl_get.json  |  10 +
 ...fault_object_acl_insert_request_payload.json |   4 +
 .../default_object_acl_insert_response.json     |   6 +
 .../test/resources/default_object_acl_list.json |  15 +
 .../default_object_acl_update_initial.json      |   6 +
 ...fault_object_acl_update_request_payload.json |   5 +
 .../src/test/resources/full_bucket_get.json     |  54 ++
 .../resources/list_bucket_with_options.json     |  21 +
 .../src/test/resources/logback.xml              |  83 +++
 .../src/test/resources/no_acl_bucket.json       |  15 +
 .../src/test/resources/no_acl_bucket_list.json  |  21 +
 .../src/test/resources/object_acl_get.json      |  15 +
 .../object_acl_insert_request_payload.json      |   4 +
 .../resources/object_acl_insert_response.json   |  10 +
 .../src/test/resources/object_acl_list.json     |  17 +
 .../resources/object_acl_request_payload.json   |   4 +
 .../resources/object_acl_update_initial.json    |   9 +
 .../resources/object_acl_update_response.json   |   9 +
 .../test/resources/object_compose_request.json  |  23 +
 .../src/test/resources/object_encoded_get.json  |  21 +
 .../src/test/resources/object_get.json          |  21 +
 .../src/test/resources/object_list.json         |  47 ++
 .../src/test/resources/object_rewrite.json      |  28 +
 130 files changed, 11348 insertions(+)
----------------------------------------------------------------------



[22/50] jclouds git commit: GCS delimiter test should not be special cased.

Posted by ga...@apache.org.
GCS delimiter test should not be special cased.

GCS delimiter implementation now works similarly to the other
providers (fixed in a prior commit) and we do not need to special case
the test.


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

Branch: refs/heads/master
Commit: 06125793d24a405c42a540af3be6523f9ffa6316
Parents: 2e1e109
Author: Timur Alperovich <ti...@gmail.com>
Authored: Tue Sep 29 21:27:35 2015 -0700
Committer: Timur Alperovich <ti...@gmail.com>
Committed: Tue Sep 29 21:29:08 2015 -0700

----------------------------------------------------------------------
 ...CloudStorageContainerIntegrationLiveTest.java | 19 -------------------
 1 file changed, 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/06125793/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
index 0850cd7..4caac24 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
@@ -19,7 +19,6 @@ package org.jclouds.googlecloudstorage.blobstore.integration;
 import static com.google.common.collect.Iterables.get;
 import static org.jclouds.blobstore.options.ListContainerOptions.Builder.maxResults;
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
 
 import java.io.IOException;
 import java.util.Properties;
@@ -30,7 +29,6 @@ import org.jclouds.blobstore.domain.BlobMetadata;
 import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.integration.internal.BaseContainerIntegrationTest;
-import org.jclouds.blobstore.options.ListContainerOptions;
 import org.jclouds.googlecloud.internal.TestProperties;
 import org.testng.SkipException;
 import org.testng.annotations.Test;
@@ -78,23 +76,6 @@ public class GoogleCloudStorageContainerIntegrationLiveTest extends BaseContaine
       }
    }
 
-   /** Google Cloud Storage lists prefixes and objects in two different lists */
-   @Override
-   public void testListRootUsesDelimiter() throws InterruptedException {
-      String containerName = getContainerName();
-      try {
-         String prefix = "rootdelimiter";
-         addTenObjectsUnderPrefix(containerName, prefix);
-         add15UnderRoot(containerName);
-         PageSet<? extends StorageMetadata> container = view.getBlobStore().list(containerName,
-                  new ListContainerOptions());
-         assertNull(container.getNextMarker());
-         assertEquals(container.size(), 15);
-      } finally {
-         returnContainer(containerName);
-      }
-   }
-
    @Override
    public void testDirectory() throws InterruptedException {
       // TODO: testDirectory fails when querying blob with name "directory/directory"; querying "directory%2Fdirectory"


[12/50] jclouds git commit: add rewrite to ObjectApi

Posted by ga...@apache.org.
add rewrite to ObjectApi


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

Branch: refs/heads/master
Commit: 2abac7c11c0ae0995b089114b41aaaae6ee2aff3
Parents: 15a5dad
Author: Daniel Broudy <br...@google.com>
Authored: Tue Jun 23 11:10:13 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Jun 23 16:51:32 2015 -0700

----------------------------------------------------------------------
 .../domain/RewriteResponse.java                 |  41 +++++
 .../googlecloudstorage/features/ObjectApi.java  |  51 ++++++
 .../options/RewriteObjectOptions.java           | 155 +++++++++++++++++++
 .../features/ObjectApiLiveTest.java             |  17 ++
 .../features/ObjectApiMockTest.java             |  21 +++
 .../parse/ParseObjectRewriteResponse.java       |  72 +++++++++
 .../src/test/resources/object_rewrite.json      |  28 ++++
 7 files changed, 385 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/RewriteResponse.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/RewriteResponse.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/RewriteResponse.java
new file mode 100644
index 0000000..8f37193
--- /dev/null
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/RewriteResponse.java
@@ -0,0 +1,41 @@
+/*
+ * 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.googlecloudstorage.domain;
+
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class RewriteResponse {
+   // TODO(broudy): should these be UnsignedLong?
+   public abstract long totalBytesRewritten();
+   public abstract long objectSize();
+   public abstract boolean done();
+   @Nullable public abstract String rewriteToken();
+   public abstract GoogleCloudStorageObject resource();
+
+   @SerializedNames({"totalBytesRewritten", "objectSize", "done", "rewriteToken", "resource"})
+   public static RewriteResponse create(long totalBytesRewritten, long objectSize,
+         boolean done, String rewriteToken, GoogleCloudStorageObject resource) {
+      return new AutoValue_RewriteResponse(totalBytesRewritten, objectSize, done, rewriteToken, resource);
+   }
+
+   RewriteResponse() {
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
index f91a410..ff8dfde 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
@@ -35,6 +35,7 @@ import org.jclouds.googlecloudstorage.binders.MultipartUploadBinder;
 import org.jclouds.googlecloudstorage.binders.UploadBinder;
 import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
 import org.jclouds.googlecloudstorage.domain.ListPageWithPrefixes;
+import org.jclouds.googlecloudstorage.domain.RewriteResponse;
 import org.jclouds.googlecloudstorage.domain.templates.ComposeObjectTemplate;
 import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate;
 import org.jclouds.googlecloudstorage.options.ComposeObjectOptions;
@@ -43,6 +44,7 @@ import org.jclouds.googlecloudstorage.options.DeleteObjectOptions;
 import org.jclouds.googlecloudstorage.options.GetObjectOptions;
 import org.jclouds.googlecloudstorage.options.InsertObjectOptions;
 import org.jclouds.googlecloudstorage.options.ListObjectOptions;
+import org.jclouds.googlecloudstorage.options.RewriteObjectOptions;
 import org.jclouds.googlecloudstorage.options.UpdateObjectOptions;
 import org.jclouds.googlecloudstorage.parser.ParseToPayloadEnclosing;
 import org.jclouds.http.options.HttpRequestOptions;
@@ -473,4 +475,53 @@ public interface ObjectApi {
    GoogleCloudStorageObject multipartUpload(@PathParam("bucket") String bucketName,
             @PayloadParam("template") ObjectTemplate objectTemplate,
             @PayloadParam("payload") Payload payload);
+
+   /**
+    * Rewrites a source object to a destination object.
+    *
+    * @param destinationBucket
+    *           Name of the bucket in which the object to be stored
+    * @param destinationObject
+    *           Name of the new object.
+    * @param sourceBucket
+    *           Name of the bucket in which to find the source object.
+    * @param sourceObject
+    *           Name of the source object.
+    *
+    * @return a {@link RewriteResponse}
+    */
+   @Named("Object:rewrite")
+   @POST
+   @Consumes(APPLICATION_JSON)
+   @Path("/storage/v1/b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}")
+   RewriteResponse rewriteObjects(@PathParam("destinationBucket") String destinationBucket,
+            @PathParam("destinationObject") String destinationObject,
+            @PathParam("sourceBucket") String sourceBucket,
+            @PathParam("sourceObject") String sourceObject);
+
+   /**
+    * Rewrites a source object to a destination object.
+    *
+    * @param destinationBucket
+    *           Name of the bucket in which the object to be stored
+    * @param destinationObject
+    *           Name of the new object.
+    * @param sourceBucket
+    *           Name of the bucket in which to find the source object.
+    * @param sourceObject
+    *           Name of the source object.
+    * @param options
+    *           Supply an {@link RewriteObjectOptions}
+    *
+    * @return a {@link RewriteResponse}
+    */
+   @Named("Object:rewrite")
+   @POST
+   @Consumes(APPLICATION_JSON)
+   @Path("/storage/v1/b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}")
+   RewriteResponse rewriteObjects(@PathParam("destinationBucket") String destinationBucket,
+            @PathParam("destinationObject") String destinationObject,
+            @PathParam("sourceBucket") String sourceBucket,
+            @PathParam("sourceObject") String sourceObject,
+            RewriteObjectOptions options);
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/RewriteObjectOptions.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/RewriteObjectOptions.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/RewriteObjectOptions.java
new file mode 100644
index 0000000..0e93546
--- /dev/null
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/RewriteObjectOptions.java
@@ -0,0 +1,155 @@
+/*
+ * 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.googlecloudstorage.options;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.PredefinedAcl;
+import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Projection;
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Allows to optionally specify ifMetagenerationMatch,ifMetagenerationNotMatch and projection which used in Bucket
+ */
+public class RewriteObjectOptions extends BaseHttpRequestOptions {
+
+   // TODO(broudy): Refactor these redundant options out of every options class.
+
+   public RewriteObjectOptions ifGenerationMatch(Long ifGenerationMatch) {
+      this.queryParameters.put("ifGenerationMatch", checkNotNull(ifGenerationMatch, "ifGenerationMatch") + "");
+      return this;
+   }
+
+   public RewriteObjectOptions ifGenerationNotMatch(Long ifGenerationNotMatch) {
+      this.queryParameters.put("ifGenerationNotMatch", checkNotNull(ifGenerationNotMatch, "ifGenerationNotMatch") + "");
+      return this;
+   }
+
+   public RewriteObjectOptions ifMetagenerationMatch(Long ifMetagenerationMatch) {
+      this.queryParameters.put("ifMetagenerationMatch", checkNotNull(ifMetagenerationMatch, "ifMetagenerationMatch")
+               + "");
+      return this;
+   }
+
+   public RewriteObjectOptions ifMetagenerationNotMatch(Long ifMetagenerationNotMatch) {
+      this.queryParameters.put("ifMetagenerationNotMatch",
+               checkNotNull(ifMetagenerationNotMatch, "ifMetagenerationNotMatch") + "");
+      return this;
+   }
+   public RewriteObjectOptions ifSourceGenerationMatch(Long ifSourceGenerationMatch) {
+      this.queryParameters.put("ifSourceGenerationMatch", checkNotNull(ifSourceGenerationMatch, "ifSourceGenerationMatch") + "");
+      return this;
+   }
+
+   public RewriteObjectOptions ifSourceGenerationNotMatch(Long ifSourceGenerationNotMatch) {
+      this.queryParameters.put("ifSourceGenerationNotMatch", checkNotNull(ifSourceGenerationNotMatch, "ifSourceGenerationNotMatch") + "");
+      return this;
+   }
+
+   public RewriteObjectOptions ifSourceMetagenerationMatch(Long ifSourceMetagenerationMatch) {
+      this.queryParameters.put("ifSourceMetagenerationMatch", checkNotNull(ifSourceMetagenerationMatch, "ifSourceMetagenerationMatch")
+               + "");
+      return this;
+   }
+
+   public RewriteObjectOptions ifSourceMetagenerationNotMatch(Long ifSourceMetagenerationNotMatch) {
+      this.queryParameters.put("ifSourceMetagenerationNotMatch",
+               checkNotNull(ifSourceMetagenerationNotMatch, "ifSourceMetagenerationNotMatch") + "");
+      return this;
+   }
+
+   public RewriteObjectOptions sourceGeneration(Long sourceGeneration) {
+      this.queryParameters.put("sourceGeneration", checkNotNull(sourceGeneration, "sourceGeneration") + "");
+      return this;
+   }
+
+   public RewriteObjectOptions predefinedAcl(PredefinedAcl predefinedAcl) {
+      this.queryParameters.put("predefinedAcl", checkNotNull(predefinedAcl, "predefinedAcl").toString());
+      return this;
+   }
+
+   public RewriteObjectOptions projection(Projection projection) {
+      this.queryParameters.put("projection", checkNotNull(projection, "projection").toString());
+      return this;
+   }
+
+   public RewriteObjectOptions rewriteToken(String rewriteToken) {
+      this.queryParameters.put("rewriteToken", checkNotNull(rewriteToken, "rewriteToken").toString());
+      return this;
+   }
+
+   public RewriteObjectOptions maxBytesRewrittenPerCall(Long maxBytesRewrittenPerCall) {
+      this.queryParameters.put("maxBytesRewrittenPerCall",
+            checkNotNull(maxBytesRewrittenPerCall, "maxBytesRewrittenPerCall").toString());
+      return this;
+   }
+
+   public static class Builder {
+
+      public RewriteObjectOptions ifGenerationMatch(Long ifGenerationMatch) {
+         return new RewriteObjectOptions().ifGenerationMatch(ifGenerationMatch);
+      }
+
+      public RewriteObjectOptions ifGenerationNotMatch(Long ifGenerationNotMatch) {
+         return new RewriteObjectOptions().ifGenerationNotMatch(ifGenerationNotMatch);
+      }
+
+      public RewriteObjectOptions ifMetagenerationMatch(Long ifMetagenerationMatch) {
+         return new RewriteObjectOptions().ifMetagenerationMatch(ifMetagenerationMatch);
+      }
+
+      public RewriteObjectOptions ifMetagenerationNotMatch(Long ifMetagenerationNotMatch) {
+         return new RewriteObjectOptions().ifMetagenerationNotMatch(ifMetagenerationNotMatch);
+      }
+
+      public RewriteObjectOptions ifSourceGenerationMatch(Long ifSourceGenerationMatch) {
+         return new RewriteObjectOptions().ifSourceGenerationMatch(ifSourceGenerationMatch);
+      }
+
+      public RewriteObjectOptions ifSourceGenerationNotMatch(Long ifSourceGenerationNotMatch) {
+         return new RewriteObjectOptions().ifSourceGenerationNotMatch(ifSourceGenerationNotMatch);
+      }
+
+      public RewriteObjectOptions ifSourceMetagenerationMatch(Long ifSourceMetagenerationMatch) {
+         return new RewriteObjectOptions().ifSourceMetagenerationMatch(ifSourceMetagenerationMatch);
+      }
+
+      public RewriteObjectOptions ifSourceMetagenerationNotMatch(Long ifSourceMetagenerationNotMatch) {
+         return new RewriteObjectOptions().ifSourceMetagenerationNotMatch(ifSourceMetagenerationNotMatch);
+      }
+
+      public RewriteObjectOptions sourceGeneration(Long sourceGeneration) {
+         return new RewriteObjectOptions().sourceGeneration(sourceGeneration);
+      }
+
+      public RewriteObjectOptions predefinedAcl(PredefinedAcl predefinedAcl) {
+         return new RewriteObjectOptions().predefinedAcl(predefinedAcl);
+      }
+
+      public RewriteObjectOptions projection(Projection projection) {
+         return new RewriteObjectOptions().projection(projection);
+      }
+
+      public RewriteObjectOptions rewriteToken(String rewriteToken) {
+         return new RewriteObjectOptions().rewriteToken(rewriteToken);
+      }
+
+      public RewriteObjectOptions maxBytesRewrittenPerCall(Long maxBytesRewrittenPerCall) {
+         return new RewriteObjectOptions().maxBytesRewrittenPerCall(maxBytesRewrittenPerCall);
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
index 44232a1..4bf48cb 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
@@ -37,6 +37,7 @@ import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Projection
 import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
 import org.jclouds.googlecloudstorage.domain.ListPageWithPrefixes;
 import org.jclouds.googlecloudstorage.domain.ObjectAccessControls;
+import org.jclouds.googlecloudstorage.domain.RewriteResponse;
 import org.jclouds.googlecloudstorage.domain.templates.BucketTemplate;
 import org.jclouds.googlecloudstorage.domain.templates.ComposeObjectTemplate;
 import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate;
@@ -76,6 +77,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
    private static final String COMPOSED_OBJECT = "ComposedObject1.txt";
    private static final String COMPOSED_OBJECT2 = "ComposedObject2.json";
    private static final String NONEXISTENT_OBJECT_NAME = "noSuchObject.txt";
+   private static final String REWRITE_OBJECT_NAME = "rewriteObject.txt";
 
    private PayloadEnclosing testPayload;
    private Long RANDOM_LONG = 100L;
@@ -124,6 +126,20 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
    }
 
    @Test(groups = "live", dependsOnMethods = "testSimpleUpload")
+   public void testRewrite() throws IOException {
+      GoogleCloudStorageObject gcsObject = api().getObject(BUCKET_NAME, UPLOAD_OBJECT_NAME);
+      System.out.println(gcsObject);
+
+      RewriteResponse response = api().rewriteObjects(BUCKET_NAME, REWRITE_OBJECT_NAME, BUCKET_NAME, UPLOAD_OBJECT_NAME);
+      assertNotNull(response);
+      assertTrue(response.done());
+      assertEquals(response.objectSize(), 512);
+      assertEquals(response.totalBytesRewritten(), 512);
+      assertEquals(response.rewriteToken(), null);
+      assertNotNull(response.resource());
+   }
+
+   @Test(groups = "live", dependsOnMethods = "testRewrite")
    public void testDownload() throws IOException {
       PayloadEnclosing impl = api().download(BUCKET_NAME, UPLOAD_OBJECT_NAME);
       ContentMetadata meta = impl.getPayload().getContentMetadata();
@@ -443,6 +459,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
       assertFalse(api().deleteObject(BUCKET_NAME, UPLOAD_OBJECT_NAME));
       assertTrue(api().deleteObject(BUCKET_NAME, UPLOAD_OBJECT_NAME2));
       assertTrue(api().deleteObject(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT));
+      assertTrue(api().deleteObject(BUCKET_NAME, REWRITE_OBJECT_NAME));
       assertFalse(api().deleteObject(BUCKET_NAME, NONEXISTENT_OBJECT_NAME));
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
index d30deac..9906a90 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
@@ -34,8 +34,10 @@ import org.jclouds.googlecloudstorage.options.CopyObjectOptions;
 import org.jclouds.googlecloudstorage.options.GetObjectOptions;
 import org.jclouds.googlecloudstorage.options.InsertObjectOptions;
 import org.jclouds.googlecloudstorage.options.ListObjectOptions;
+import org.jclouds.googlecloudstorage.options.RewriteObjectOptions;
 import org.jclouds.googlecloudstorage.parse.ParseGoogleCloudStorageObject;
 import org.jclouds.googlecloudstorage.parse.ParseGoogleCloudStorageObjectListTest;
+import org.jclouds.googlecloudstorage.parse.ParseObjectRewriteResponse;
 import org.jclouds.http.internal.PayloadEnclosingImpl;
 import org.jclouds.io.PayloadEnclosing;
 import org.testng.annotations.Test;
@@ -259,6 +261,25 @@ public class ObjectApiMockTest extends BaseGoogleCloudStorageApiMockTest {
       //TODO: this should be a more robust assertion about the formatting of the payload
    }
 
+   public void rewrite() throws Exception {
+      server.enqueue(jsonResponse("/object_rewrite.json"));
+
+      assertEquals(objectApi().rewriteObjects("destinationBucket", "destinationObject", "sourceBucket", "sourceObject"),
+            new ParseObjectRewriteResponse().expected());
+
+      assertSent(server, "POST", "/storage/v1/b/sourceBucket/o/sourceObject/rewriteTo/b/destinationBucket/o/destinationObject");
+   }
+
+   public void rewriteWithOptions() throws Exception {
+      server.enqueue(jsonResponse("/object_rewrite.json"));
+
+      RewriteObjectOptions options = new RewriteObjectOptions.Builder().rewriteToken("rewriteToken");
+      assertEquals(objectApi().rewriteObjects("destinationBucket", "destinationObject", "sourceBucket", "sourceObject", options),
+            new ParseObjectRewriteResponse().expected());
+
+      assertSent(server, "POST",
+            "/storage/v1/b/sourceBucket/o/sourceObject/rewriteTo/b/destinationBucket/o/destinationObject?rewriteToken=rewriteToken");
+   }
 
    public ObjectApi objectApi(){
       return api().getObjectApi();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ParseObjectRewriteResponse.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ParseObjectRewriteResponse.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ParseObjectRewriteResponse.java
new file mode 100644
index 0000000..2b4a2e3
--- /dev/null
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ParseObjectRewriteResponse.java
@@ -0,0 +1,72 @@
+/*
+ * 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.googlecloudstorage.parse;
+
+import java.net.URI;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.StorageClass;
+import org.jclouds.googlecloudstorage.domain.Owner;
+import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
+import org.jclouds.googlecloudstorage.domain.RewriteResponse;
+import org.jclouds.googlecloudstorage.internal.BaseGoogleCloudStorageParseTest;
+import org.testng.annotations.Test;
+
+@Test(groups = "unit", testName = "ParseObjectRewriteResponse")
+public class ParseObjectRewriteResponse extends BaseGoogleCloudStorageParseTest<RewriteResponse> {
+
+   @Override
+   public String resource() {
+      return "/object_rewrite.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public RewriteResponse expected() {
+      return RewriteResponse.create(16, // totalBytesRewritten
+            16, // objectSize
+            true, // done
+            "rewriteToken", // rewriteToken
+            GoogleCloudStorageObject.create(
+               "test/file_name/1000", //id
+               URI.create("https://www.googleapis.com/storage/v1/b/test/o/file_name"), //selfLink
+               "etag", // etag
+               "file_name", // name
+               "test", // bucket
+               (long) 1000, //generation
+               (long) 8, // metageneration
+               "application/x-tar", // contentType
+               parse("2014-09-27T00:01:44.819"), // updated
+               null, // timeDeleted
+               StorageClass.STANDARD, // storageClass
+               (long) 1000, //size,
+               "md5Hash", // md5Hash
+               URI.create("https://www.googleapis.com/download/storage/v1/b/test/o/file_name?generation=1000&alt=media"), // mediaLink
+               null, // metadata
+               null, // contentEncoding
+               null, // contentDisposition,
+               null, // contentLanguage
+               null, // cacheControl
+               null, // acl
+               Owner.create("entity", "entityId"), // owner,
+               "crc32c", // crc32c,
+               null) //componentCount
+      );
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/test/resources/object_rewrite.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/object_rewrite.json b/providers/google-cloud-storage/src/test/resources/object_rewrite.json
new file mode 100644
index 0000000..189b9b8
--- /dev/null
+++ b/providers/google-cloud-storage/src/test/resources/object_rewrite.json
@@ -0,0 +1,28 @@
+{
+  "kind": "storage#rewriteResponse",
+  "totalBytesRewritten": "16",
+  "objectSize": "16",
+  "rewriteToken": "rewriteToken",
+  "done": true,
+  "resource": {
+    "kind": "storage#object",
+    "id": "test/file_name/1000",
+    "selfLink": "https://www.googleapis.com/storage/v1/b/test/o/file_name",
+    "name": "file_name",
+    "bucket": "test",
+    "generation": "1000",
+    "metageneration": "8",
+    "contentType": "application/x-tar",
+    "updated": "2014-09-27T00:01:44.819",
+    "storageClass": "STANDARD",
+    "size": "1000",
+    "md5Hash": "md5Hash",
+    "mediaLink": "https://www.googleapis.com/download/storage/v1/b/test/o/file_name?generation=1000&alt=media",
+    "owner": {
+      "entity": "entity",
+      "entityId": "entityId"
+    },
+    "crc32c": "crc32c",
+    "etag": "etag"
+  }
+}
\ No newline at end of file


[08/50] jclouds git commit: JCLOUDS-894: Fake portable multipart upload for GCS

Posted by ga...@apache.org.
JCLOUDS-894: Fake portable multipart upload for GCS


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

Branch: refs/heads/master
Commit: bb62abfaa594fff42f2f9ed3087c3b0afc69d47b
Parents: fb4c651
Author: Andrew Gaul <ga...@apache.org>
Authored: Sun Jun 7 22:30:59 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Sun Jun 7 22:32:52 2015 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java                  | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/bb62abfa/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 80a3c83..4ccc8f2 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -70,6 +70,7 @@ import org.jclouds.googlecloudstorage.options.ListObjectOptions;
 import org.jclouds.http.HttpResponseException;
 import org.jclouds.io.ContentMetadata;
 import org.jclouds.io.Payload;
+import org.jclouds.io.PayloadSlicer;
 
 import com.google.common.base.Charsets;
 import com.google.common.base.Function;
@@ -92,14 +93,14 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    private final Supplier<String> projectId;
 
    @Inject GoogleCloudStorageBlobStore(BlobStoreContext context, BlobUtils blobUtils, Supplier<Location> defaultLocation,
-            @Memoized Supplier<Set<? extends Location>> locations, GoogleCloudStorageApi api,
+            @Memoized Supplier<Set<? extends Location>> locations, PayloadSlicer slicer, GoogleCloudStorageApi api,
             BucketToStorageMetadata bucketToStorageMetadata, ObjectToBlobMetadata objectToBlobMetadata,
             ObjectListToStorageMetadata objectListToStorageMetadata,
             Provider<FetchBlobMetadata> fetchBlobMetadataProvider,
             BlobMetadataToObjectTemplate blobMetadataToObjectTemplate,
             BlobStoreListContainerOptionsToListObjectOptions listContainerOptionsToListObjectOptions,
             Provider<MultipartUploadStrategy> multipartUploadStrategy, @CurrentProject Supplier<String> projectId) {
-      super(context, blobUtils, defaultLocation, locations);
+      super(context, blobUtils, defaultLocation, locations, slicer);
       this.api = api;
       this.bucketToStorageMetadata = bucketToStorageMetadata;
       this.objectToBlobMetadata = objectToBlobMetadata;


[39/50] jclouds git commit: JCLOUDS-1028: Configure idempotent methods

Posted by ga...@apache.org.
JCLOUDS-1028: Configure idempotent methods

Enable for GCS.


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

Branch: refs/heads/master
Commit: 230448a454f1be583f70af48846b7a9c1c6b58c0
Parents: 5baa49d
Author: Andrew Gaul <ga...@apache.org>
Authored: Wed Jun 15 16:38:53 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Wed Jun 15 16:38:53 2016 -0700

----------------------------------------------------------------------
 .../jclouds/googlecloudstorage/GoogleCloudStorageApiMetadata.java  | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/230448a4/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/GoogleCloudStorageApiMetadata.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/GoogleCloudStorageApiMetadata.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/GoogleCloudStorageApiMetadata.java
index 401b617..884edd2 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/GoogleCloudStorageApiMetadata.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/GoogleCloudStorageApiMetadata.java
@@ -16,6 +16,7 @@
  */
 package org.jclouds.googlecloudstorage;
 
+import static org.jclouds.Constants.PROPERTY_IDEMPOTENT_METHODS;
 import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
 import static org.jclouds.googlecloudstorage.reference.GoogleCloudStorageConstants.OPERATION_COMPLETE_INTERVAL;
 import static org.jclouds.googlecloudstorage.reference.GoogleCloudStorageConstants.OPERATION_COMPLETE_TIMEOUT;
@@ -60,6 +61,7 @@ public class GoogleCloudStorageApiMetadata extends BaseHttpApiMetadata<GoogleClo
       properties.put(PROPERTY_SESSION_INTERVAL, 3600);
       properties.put(OPERATION_COMPLETE_INTERVAL, 2000);
       properties.put(OPERATION_COMPLETE_TIMEOUT, 600000);
+      properties.setProperty(PROPERTY_IDEMPOTENT_METHODS, "DELETE,GET,HEAD,OPTIONS,POST,PUT");
       return properties;
    }
 


[16/50] jclouds git commit: Move the skipped tests.

Posted by ga...@apache.org.
Move the skipped tests.

Since the delimiter and prefix tests were moved to
BaseContainerIntegrationTest (from BaseContainerLiveTest), need to do
the same for google.


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

Branch: refs/heads/master
Commit: 428d909562af035206fc4ce168bafb4b2835903e
Parents: e492ba6
Author: Timur Alperovich <ti...@gmail.com>
Authored: Tue Jul 14 15:06:16 2015 -0700
Committer: Timur Alperovich <ti...@gmail.com>
Committed: Tue Jul 14 15:06:16 2015 -0700

----------------------------------------------------------------------
 .../GoogleCloudStorageContainerIntegrationLiveTest.java  | 10 ++++++++++
 .../integration/GoogleCloudStorageContainerLiveTest.java | 11 -----------
 2 files changed, 10 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/428d9095/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
index c129ae8..d4f5fb8 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
@@ -105,4 +105,14 @@ public class GoogleCloudStorageContainerIntegrationLiveTest extends BaseContaine
    public void testListMarkerAfterLastKey() throws Exception {
       throw new SkipException("cannot specify arbitrary markers");
    }
+
+   @Override
+   public void testContainerListWithPrefix() {
+      throw new SkipException("Prefix option has not been plumbed down to GCS");
+   }
+
+   @Override
+   public void testDelimiterList() {
+      throw new SkipException("Prefix option has not been plumbed down to GCS");
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/428d9095/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
index 490ee35..559713b 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
@@ -20,7 +20,6 @@ import java.util.Properties;
 
 import org.jclouds.blobstore.integration.internal.BaseContainerLiveTest;
 import org.jclouds.googlecloud.internal.TestProperties;
-import org.testng.SkipException;
 import org.testng.annotations.Test;
 
 @Test(groups = { "live" })
@@ -34,14 +33,4 @@ public class GoogleCloudStorageContainerLiveTest extends BaseContainerLiveTest {
       TestProperties.setGoogleCredentialsFromJson(provider);
       return TestProperties.apply(provider, super.setupProperties());
    }
-
-   @Override
-   public void testContainerListWithPrefix() {
-      throw new SkipException("Prefix option has not been plumbed down to GCS");
-   }
-
-   @Override
-   public void testDelimiterList() {
-      throw new SkipException("Prefix option has not been plumbed down to GCS");
-   }
 }


[06/50] jclouds git commit: Fix DefaultObjectAccessControlsApiLiveTest, ResumableUploadApiLiveTest, ObjectApiLiveTest

Posted by ga...@apache.org.
Fix DefaultObjectAccessControlsApiLiveTest, ResumableUploadApiLiveTest, ObjectApiLiveTest


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

Branch: refs/heads/master
Commit: 3d9258f75adf8f0b8258c14c88c1a73316f7dad3
Parents: 2585624
Author: Daniel Broudy <br...@google.com>
Authored: Mon Jun 1 17:18:33 2015 -0700
Committer: Daniel Broudy <br...@google.com>
Committed: Mon Jun 1 17:31:45 2015 -0700

----------------------------------------------------------------------
 .../features/DefaultObjectAccessControlsApiLiveTest.java     | 2 +-
 .../googlecloudstorage/features/ObjectApiLiveTest.java       | 8 +-------
 .../features/ResumableUploadApiLiveTest.java                 | 2 +-
 3 files changed, 3 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/3d9258f7/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiLiveTest.java
index 55c45bf..d2697d4 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiLiveTest.java
@@ -32,7 +32,7 @@ import org.testng.annotations.Test;
 
 public class DefaultObjectAccessControlsApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
 
-   protected static final String BUCKET_NAME = "jcloudstestbucketdefaultoacl" + UUID.randomUUID();
+   protected static final String BUCKET_NAME = "jcloudsdefaultoacltest" + UUID.randomUUID();
 
    private DefaultObjectAccessControlsApi api() {
       return api.getDefaultObjectAccessControlsApi();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/3d9258f7/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
index a5728f8..3cef893 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
@@ -63,7 +63,6 @@ import com.beust.jcommander.internal.Lists;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.hash.Hashing;
 import com.google.common.io.ByteSource;
-import com.google.common.primitives.Bytes;
 
 public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
 
@@ -435,6 +434,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
       assertTrue(api().deleteObject(BUCKET_NAME2, COMPOSED_OBJECT2));
       assertTrue(api().deleteObject(BUCKET_NAME2, COMPOSED_OBJECT));
       assertTrue(api().deleteObject(BUCKET_NAME2, COPIED_OBJECT_NAME));
+      assertTrue(api().deleteObject(BUCKET_NAME2, COPIED_OBJECT_NAME2));
       assertFalse(api().deleteObject(BUCKET_NAME, UPLOAD_OBJECT_NAME));
       assertTrue(api().deleteObject(BUCKET_NAME, UPLOAD_OBJECT_NAME2));
       assertTrue(api().deleteObject(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT));
@@ -453,10 +453,4 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
       api.getBucketApi().deleteBucket(BUCKET_NAME);
       api.getBucketApi().deleteBucket(BUCKET_NAME2);
    }
-
-   private static byte[] reverse(byte[] b) {
-      List<Byte> hashByte = Bytes.asList(b);
-      List<Byte> reversedList = com.google.common.collect.Lists.reverse(hashByte);
-      return Bytes.toArray(reversedList);
-   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/3d9258f7/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ResumableUploadApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ResumableUploadApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ResumableUploadApiLiveTest.java
index 7718281..441c255 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ResumableUploadApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ResumableUploadApiLiveTest.java
@@ -136,7 +136,7 @@ public class ResumableUploadApiLiveTest extends BaseGoogleCloudStorageApiLiveTes
       // Uploading First chunk
       ByteSourcePayload payload = Payloads.newByteSourcePayload(byteSource.slice(offset, chunkSize));
       long length = byteSource.slice(offset, chunkSize).size();
-      String Content_Range = generateContentRange(0L, length, totalSize);
+      String Content_Range = generateContentRange(0L, length - 1, totalSize);
       ResumableUpload uploadResponse = api().chunkUpload(BUCKET_NAME, uploadId, "application/pdf", length,
                Content_Range, payload);
 


[47/50] jclouds git commit: Use a random UUID for fake upload ID

Posted by ga...@apache.org.
Use a random UUID for fake upload ID

This matches the Azure provider.


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

Branch: refs/heads/master
Commit: a1af4f7fec88d7f28ee25c94f72b9c59cdd62c6f
Parents: ca75641
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Apr 13 12:57:09 2017 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Apr 13 13:00:50 2017 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java                  | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/a1af4f7f/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 25d27f2..c86dcc8 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -22,6 +22,7 @@ import static org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Obj
 
 import java.util.List;
 import java.util.Set;
+import java.util.UUID;
 
 import javax.inject.Inject;
 
@@ -368,7 +369,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
 
    @Override
    public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions options) {
-      String uploadId = blobMetadata.getName();
+      String uploadId = UUID.randomUUID().toString();
       return MultipartUpload.create(container, blobMetadata.getName(), uploadId, blobMetadata, options);
    }
 
@@ -430,7 +431,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    public List<MultipartPart> listMultipartUpload(MultipartUpload mpu) {
       ImmutableList.Builder<MultipartPart> parts = ImmutableList.builder();
       PageSet<? extends StorageMetadata> pageSet = list(mpu.containerName(),
-            new ListContainerOptions().prefix(mpu.blobName() + "_"));
+            new ListContainerOptions().prefix(mpu.id() + "_"));
       // TODO: pagination
       for (StorageMetadata sm : pageSet) {
          int lastUnderscore = sm.getName().lastIndexOf('_');


[34/50] jclouds git commit: JCLOUDS-912: Remove GCS simpleUpload UploadBinder

Posted by ga...@apache.org.
JCLOUDS-912: Remove GCS simpleUpload UploadBinder

This is not necessary; jclouds binds the Payload automatically;
jclouds binds the Payload automatically.


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

Branch: refs/heads/master
Commit: 5d437312bfe20e654b4400fe24e5d91db6b3e5e8
Parents: 2b02db4
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Jun 2 22:33:54 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Jun 2 22:35:54 2016 -0700

----------------------------------------------------------------------
 .../java/org/jclouds/googlecloudstorage/features/ObjectApi.java  | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/5d437312/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
index ab8cab6..b750406 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
@@ -33,7 +33,6 @@ import javax.ws.rs.Produces;
 import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
 import org.jclouds.Fallbacks.NullOnNotFoundOr404;
 import org.jclouds.googlecloudstorage.binders.MultipartUploadBinder;
-import org.jclouds.googlecloudstorage.binders.UploadBinder;
 import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
 import org.jclouds.googlecloudstorage.domain.ListPageWithPrefixes;
 import org.jclouds.googlecloudstorage.domain.RewriteResponse;
@@ -187,10 +186,9 @@ public interface ObjectApi {
    @QueryParams(keys = "uploadType", values = "media")
    @Consumes(APPLICATION_JSON)
    @Path("/upload/storage/v1/b/{bucket}/o")
-   @MapBinder(UploadBinder.class)
    GoogleCloudStorageObject simpleUpload(@PathParam("bucket") String bucketName, @HeaderParam("Content-Type") String contentType,
             @HeaderParam("Content-Length") Long contentLength, @PayloadParam("payload") Payload payload,
-            InsertObjectOptions Options);
+            InsertObjectOptions options);
 
    /**
     * Deletes an object and its metadata. Deletions are permanent if versioning is not enabled.


[19/50] jclouds git commit: Update comment for the failing test.

Posted by ga...@apache.org.
Update comment for the failing test.


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

Branch: refs/heads/master
Commit: e22256782123590686f2358677b9fd8f49812dab
Parents: 25cb06c
Author: Timur Alperovich <ti...@gmail.com>
Authored: Thu Aug 20 17:31:28 2015 -0700
Committer: Timur Alperovich <ti...@gmail.com>
Committed: Thu Aug 20 17:55:55 2015 -0700

----------------------------------------------------------------------
 .../GoogleCloudStorageContainerIntegrationLiveTest.java           | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/e2225678/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
index c129ae8..0850cd7 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
@@ -97,7 +97,8 @@ public class GoogleCloudStorageContainerIntegrationLiveTest extends BaseContaine
 
    @Override
    public void testDirectory() throws InterruptedException {
-      // GoogleCloudStorage does not support directories, rather it supports prefixes which look like directories.
+      // TODO: testDirectory fails when querying blob with name "directory/directory"; querying "directory%2Fdirectory"
+      // succeeds, however. I believe this is an escaping issue that should be addressed.
       throw new SkipException("directories are not supported in GoogleCloudStorage");
    }
 


[11/50] jclouds git commit: Update ComposeObjectTemplate and update MockTests

Posted by ga...@apache.org.
Update ComposeObjectTemplate and update MockTests


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

Branch: refs/heads/master
Commit: 15a5dadc1af4c52430e653a4dc115ec3e2a1f692
Parents: 7213acb
Author: Daniel Broudy <br...@google.com>
Authored: Mon Jun 8 17:29:21 2015 -0700
Committer: Daniel Broudy <br...@google.com>
Committed: Mon Jun 22 09:37:42 2015 -0700

----------------------------------------------------------------------
 .../SequentialMultipartUploadStrategy.java      |  4 +-
 .../domain/templates/ComposeObjectTemplate.java | 93 +++++++++++++++++++-
 .../features/ObjectApiLiveTest.java             | 11 ++-
 .../features/ObjectApiMockTest.java             | 10 ++-
 .../test/resources/object_compose_request.json  | 45 ++--------
 5 files changed, 113 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/15a5dadc/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
index 065f002..83b3823 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
@@ -87,7 +87,9 @@ public final class SequentialMultipartUploadStrategy extends MultipartUploadStra
 
             sourceList.add(object);
          }
-         ComposeObjectTemplate template = ComposeObjectTemplate.create(sourceList, destination);
+         ComposeObjectTemplate template = ComposeObjectTemplate.builder().fromGoogleCloudStorageObject(sourceList)
+               .destination(destination).build();
+
          return api.getObjectApi().composeObjects(container, key, template).etag();
       } else {
          return api.getObjectApi()

http://git-wip-us.apache.org/repos/asf/jclouds/blob/15a5dadc/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java
index 669a8f1..4ad8d5e 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java
@@ -14,25 +14,110 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.jclouds.googlecloudstorage.domain.templates;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
 
 import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
 
 @AutoValue
 public abstract class ComposeObjectTemplate {
 
-   private final String kind = "storage/composeRequest";
+   @AutoValue
+   public abstract static class SourceObject {
+
+      @AutoValue
+      public abstract static class ObjectPreconditions {
+         @Nullable public abstract long ifGenerationMatch();
+
+         @SerializedNames({"ifGenerationMatch"})
+         public static ObjectPreconditions create(long ifGenerationMatch){
+            return new AutoValue_ComposeObjectTemplate_SourceObject_ObjectPreconditions(ifGenerationMatch);
+         }
+
+         ObjectPreconditions(){
+         }
+      }
+
+      public abstract String name();
+      @Nullable public abstract Long generation();
+      @Nullable public abstract ObjectPreconditions objectPreconditions();
 
-   public abstract List<GoogleCloudStorageObject> sourceObjects();
+      public static SourceObject nameOnly(String name){
+         return create(name, null, null);
+      }
 
+      public static SourceObject createWithPrecondition(String name, Long generation, Long objectPreconditions){
+         return create(name, generation, ObjectPreconditions.create(objectPreconditions));
+      }
+
+      @SerializedNames({ "name", "generation", "objectPreconditions"})
+      public static SourceObject create(String name, @Nullable Long generation,
+            @Nullable ObjectPreconditions objectPreconditions) {
+         return new AutoValue_ComposeObjectTemplate_SourceObject(name, generation, objectPreconditions);
+      }
+
+      SourceObject(){
+      }
+   }
+
+   public abstract List<SourceObject> sourceObjects();
    public abstract ObjectTemplate destination();
 
-   public static ComposeObjectTemplate create(List<GoogleCloudStorageObject> sourceObjects, ObjectTemplate destination) {
+   @SerializedNames({"sourceObjects", "destination"})
+   public static ComposeObjectTemplate create(List<SourceObject> sourceObjects, ObjectTemplate destination) {
       return new AutoValue_ComposeObjectTemplate(sourceObjects, destination);
    }
+
+   public static Builder builder(){
+      return new Builder();
+   }
+
+   ComposeObjectTemplate() {
+   }
+
+   public static class Builder {
+      private ImmutableList<SourceObject> sourceObjects;
+      private ObjectTemplate destination;
+
+      Builder() {
+      }
+
+      public Builder fromGoogleCloudStorageObject(Collection<GoogleCloudStorageObject> objects) {
+         ImmutableList.Builder<SourceObject> sourceObjects = new ImmutableList.Builder<ComposeObjectTemplate.SourceObject>();
+         for (GoogleCloudStorageObject obj : objects) {
+            sourceObjects.add(SourceObject.createWithPrecondition(obj.name(), obj.generation(), obj.generation()));
+         }
+         this.sourceObjects = sourceObjects.build();
+         return this;
+      }
+
+      public Builder fromNames(List<String> SourceObjectNames) {
+         ArrayList<SourceObject> sourceObjects = new ArrayList<SourceObject>();
+         for (String name : SourceObjectNames) {
+            sourceObjects.add(SourceObject.nameOnly(name));
+         }
+         this.sourceObjects = ImmutableList.copyOf(sourceObjects);
+         return this;
+      }
+
+      public Builder destination(ObjectTemplate destination) {
+         checkNotNull(destination, "destination");
+         this.destination = destination;
+         return this;
+      }
+
+      public ComposeObjectTemplate build() {
+         return ComposeObjectTemplate.create(sourceObjects, destination);
+      }
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/15a5dadc/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
index 3cef893..44232a1 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
@@ -255,7 +255,10 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
       sourceList.add(api().getObject(BUCKET_NAME2, UPLOAD_OBJECT_NAME));
       sourceList.add(api().getObject(BUCKET_NAME2, COPIED_OBJECT_NAME));
 
-      ComposeObjectTemplate requestTemplate = ComposeObjectTemplate.create(sourceList, destination);
+      ComposeObjectTemplate requestTemplate = ComposeObjectTemplate.builder()
+         .fromGoogleCloudStorageObject(sourceList)
+         .destination(destination)
+         .build();
 
       GoogleCloudStorageObject gcsObject = api().composeObjects(BUCKET_NAME2, COMPOSED_OBJECT, requestTemplate);
 
@@ -273,8 +276,10 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
       sourceList.add(api().getObject(BUCKET_NAME2, UPLOAD_OBJECT_NAME));
       sourceList.add(api().getObject(BUCKET_NAME2, COPIED_OBJECT_NAME));
 
-      ComposeObjectTemplate requestTemplate = ComposeObjectTemplate.create(sourceList, destination);
-
+      ComposeObjectTemplate requestTemplate =  ComposeObjectTemplate.builder()
+         .fromGoogleCloudStorageObject(sourceList)
+         .destination(destination)
+         .build();
       ComposeObjectOptions options = new ComposeObjectOptions().destinationPredefinedAcl(
                DestinationPredefinedAcl.BUCKET_OWNER_READ).ifMetagenerationNotMatch(RANDOM_LONG);
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/15a5dadc/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
index af224d4..d30deac 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
@@ -176,8 +176,9 @@ public class ObjectApiMockTest extends BaseGoogleCloudStorageApiMockTest {
 
       ObjectTemplate template = new ObjectTemplate().name("file_name").size((long) 1000).crc32c("crc32c");
 
-      ComposeObjectTemplate composeTemplate = ComposeObjectTemplate.create(
-            new ParseGoogleCloudStorageObjectListTest().expected(), template);
+      ComposeObjectTemplate composeTemplate = ComposeObjectTemplate.builder()
+      .fromGoogleCloudStorageObject(new ParseGoogleCloudStorageObjectListTest().expected())
+      .destination(template).build();
 
       assertEquals(objectApi().composeObjects("destination_bucket", "destination_object", composeTemplate),
             new ParseGoogleCloudStorageObject().expected());
@@ -189,8 +190,9 @@ public class ObjectApiMockTest extends BaseGoogleCloudStorageApiMockTest {
       server.enqueue(jsonResponse("/object_get.json"));
 
       ObjectTemplate template = new ObjectTemplate().name("file_name").size((long) 1000).crc32c("crc32c");
-      ComposeObjectTemplate composeTemplate = ComposeObjectTemplate.create(
-            new ParseGoogleCloudStorageObjectListTest().expected(), template);
+      ComposeObjectTemplate composeTemplate = ComposeObjectTemplate.builder()
+      .fromGoogleCloudStorageObject(new ParseGoogleCloudStorageObjectListTest().expected())
+      .destination(template).build();
 
       ComposeObjectOptions options = new ComposeObjectOptions()
          .destinationPredefinedAcl(DestinationPredefinedAcl.BUCKET_OWNER_FULLCONTROL)

http://git-wip-us.apache.org/repos/asf/jclouds/blob/15a5dadc/providers/google-cloud-storage/src/test/resources/object_compose_request.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/object_compose_request.json b/providers/google-cloud-storage/src/test/resources/object_compose_request.json
index 93cbfc7..0ac4803 100644
--- a/providers/google-cloud-storage/src/test/resources/object_compose_request.json
+++ b/providers/google-cloud-storage/src/test/resources/object_compose_request.json
@@ -1,54 +1,23 @@
 {
   "sourceObjects": [
     {
-      "id": "test/file_name/1000",
-      "selfLink": "https://www.googleapis.com/storage/v1/b/test/o/file_name",
-      "etag": "etag",
       "name": "file_name",
-      "bucket": "test",
       "generation": 1000,
-      "metageneration": 8,
-      "contentType": "application/x-tar",
-      "updated": "2014-09-27T00:01:44.819Z",
-      "storageClass": "STANDARD",
-      "size": 1000,
-      "md5Hash": "md5Hash",
-      "mediaLink": "https://www.googleapis.com/download/storage/v1/b/test/o/file_name?generation=1000&alt=media",
-      "metadata": {},
-      "acl": [],
-      "owner": {
-        "entity": "entity",
-        "entityId": "entityId"
-      },
-      "crc32c": "crc32c"
+      "objectPreconditions": {
+        "ifGenerationMatch": 1000
+      }
     },
     {
-      "id": "test/file_name2/1000",
-      "selfLink": "https://www.googleapis.com/storage/v1/b/test/o/file_name2",
-      "etag": "etag",
       "name": "file_name2",
-      "bucket": "test",
       "generation": 1001,
-      "metageneration": 9,
-      "contentType": "image/png",
-      "updated": "2014-09-27T00:01:44.819Z",
-      "storageClass": "STANDARD",
-      "size": 10,
-      "md5Hash": "md5Hash",
-      "mediaLink": "https://www.googleapis.com/download/storage/v1/b/test/o/file_name2?generation=1001&alt=media",
-      "metadata": {},
-      "acl": [],
-      "owner": {
-        "entity": "entity",
-        "entityId": "entityId"
-      },
-      "crc32c": "crc32c"
+      "objectPreconditions": {
+        "ifGenerationMatch": 1001
+      }
     }
   ],
   "destination": {
     "name": "file_name",
     "size": 1000,
     "crc32c": "crc32c"
-  },
-  "kind": "storage/composeRequest"
+  }
 }
\ No newline at end of file


[33/50] jclouds git commit: Add ObjectTemplate.toString

Posted by ga...@apache.org.
Add ObjectTemplate.toString


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

Branch: refs/heads/master
Commit: 2b02db4f2285f15551ea64f6125e2446a7049721
Parents: f6210d5
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Jun 2 16:24:13 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Jun 2 16:24:13 2016 -0700

----------------------------------------------------------------------
 .../domain/templates/ObjectTemplate.java          | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/2b02db4f/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ObjectTemplate.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ObjectTemplate.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ObjectTemplate.java
index b23b7c1..1cd5aaf 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ObjectTemplate.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ObjectTemplate.java
@@ -22,6 +22,7 @@ import java.util.Map;
 
 import org.jclouds.googlecloudstorage.domain.ObjectAccessControls;
 
+import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.net.MediaType;
@@ -157,4 +158,21 @@ public class ObjectTemplate {
    public List<ObjectAccessControls> acl() {
       return acl;
    }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+         .add("name", name)
+         .add("size", size)
+         .add("cacheControl", cacheControl)
+         .add("contentDisposition", contentDisposition)
+         .add("contentEncoding", contentEncoding)
+         .add("contentLanguage", contentLanguage)
+         .add("contentType", contentType)
+         .add("crc32c", crc32c)
+         .add("md5Hash", md5Hash)
+         .add("metadata", metadata)
+         .add("acl", acl)
+         .toString();
+   }
 }


[24/50] jclouds git commit: Remove @Nullable from methods returning primitives

Posted by ga...@apache.org.
Remove @Nullable from methods returning primitives

Found via error-prone.


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

Branch: refs/heads/master
Commit: 639e96d5e7abb7d030dbcff0f10b281ee978143d
Parents: 2385ba9
Author: Andrew Gaul <ga...@apache.org>
Authored: Sat Dec 12 08:21:32 2015 +0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Sat Dec 12 08:22:27 2015 +0800

----------------------------------------------------------------------
 .../googlecloudstorage/domain/templates/ComposeObjectTemplate.java | 2 +-
 .../java/org/jclouds/googlecloudstorage/features/ObjectApi.java    | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/639e96d5/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java
index 4ad8d5e..3f333d8 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java
@@ -37,7 +37,7 @@ public abstract class ComposeObjectTemplate {
 
       @AutoValue
       public abstract static class ObjectPreconditions {
-         @Nullable public abstract long ifGenerationMatch();
+         public abstract long ifGenerationMatch();
 
          @SerializedNames({"ifGenerationMatch"})
          public static ObjectPreconditions create(long ifGenerationMatch){

http://git-wip-us.apache.org/repos/asf/jclouds/blob/639e96d5/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
index 4e4f5b9..ab8cab6 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
@@ -85,7 +85,6 @@ public interface ObjectApi {
    @GET
    @Path("storage/v1/b/{bucket}/o/{object}")
    @Fallback(FalseOnNotFoundOr404.class)
-   @Nullable
    boolean objectExists(@PathParam("bucket") String bucketName, @PathParam("object") @Encoded String objectName);
 
    /**


[45/50] jclouds git commit: Return more metadata from listMultipartUpload

Posted by ga...@apache.org.
Return more metadata from listMultipartUpload

Include Content-Length and Last-Modified.


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

Branch: refs/heads/master
Commit: 8e50fe69adeec17d84fe0fd32ebf31c6fb4f3bb9
Parents: f4a2be0
Author: Andrew Gaul <ga...@apache.org>
Authored: Wed Mar 8 22:15:14 2017 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Wed Mar 8 22:15:41 2017 -0800

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java                   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/8e50fe69/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 63406d9..25d27f2 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -423,7 +423,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
       InsertObjectOptions insertOptions = new InsertObjectOptions().name(partName);
       GoogleCloudStorageObject object = api.getObjectApi().simpleUpload(mpu.containerName(),
             mpu.blobMetadata().getContentMetadata().getContentType(), partSize, payload, insertOptions);
-      return MultipartPart.create(partNumber, partSize, object.etag());
+      return MultipartPart.create(partNumber, partSize, object.etag(), object.updated());
    }
 
    @Override
@@ -435,7 +435,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
       for (StorageMetadata sm : pageSet) {
          int lastUnderscore = sm.getName().lastIndexOf('_');
          int partNumber = Integer.parseInt(sm.getName().substring(lastUnderscore + 1));
-         parts.add(MultipartPart.create(partNumber, sm.getSize(), sm.getETag()));
+         parts.add(MultipartPart.create(partNumber, sm.getSize(), sm.getETag(), sm.getLastModified()));
       }
       return parts.build();
    }


[46/50] jclouds git commit: JCLOUDS-1259: Add GCS multi-regional and coldline

Posted by ga...@apache.org.
JCLOUDS-1259: Add GCS multi-regional and coldline


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

Branch: refs/heads/master
Commit: ca75641fc0c990aa4592d0ee195ae34593dead2b
Parents: 8e50fe6
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Mar 20 18:04:03 2017 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Mon Mar 20 18:42:32 2017 -0700

----------------------------------------------------------------------
 .../domain/DomainResourceReferences.java        |  6 +++-
 .../features/BucketApiLiveTest.java             | 38 ++++++++++++++++++++
 2 files changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/ca75641f/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
index 36ab418..cc3b9dc 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
@@ -45,7 +45,11 @@ public final class DomainResourceReferences {
    }
 
    public enum StorageClass {
-      STANDARD, DURABLE_REDUCED_AVAILABILITY, NEARLINE;
+      COLDLINE,
+      DURABLE_REDUCED_AVAILABILITY,
+      MULTI_REGIONAL,
+      NEARLINE,
+      STANDARD;
    }
 
    public enum Projection {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ca75641f/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
index 12226dc..c59a82f 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
@@ -58,6 +58,10 @@ public class BucketApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
 
    private static final String BUCKET_NAME_STANDARD = "jcloudstestbucketstandard" + (int) (Math.random() * 10000);
 
+   private static final String BUCKET_NAME_COLDLINE = "jcloudstestbucketcoldline" + (int) (Math.random() * 10000);
+
+   private static final String BUCKET_NAME_MULTI_REGIONAL = "jcloudstestbucketmultiregional" + (int) (Math.random() * 10000);
+
    private static final String BUCKET_NAME_NEARLINE = "jcloudstestbucketnearline" + (int) (Math.random() * 10000);
 
    private static final String BUCKET_NAME_WITHOPTIONS = "jcloudstestbucketoptions" + (int) (Math.random() * 10000);
@@ -121,6 +125,40 @@ public class BucketApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
    }
 
    @Test(groups = "live")
+   public void testCreateBucketColdline() {
+      BucketTemplate template = new BucketTemplate()
+               .name(BUCKET_NAME_COLDLINE)
+               .location(Location.US)
+               .storageClass(StorageClass.COLDLINE);
+
+      Bucket response = api().createBucket(PROJECT_NUMBER, template);
+
+      assertNotNull(response);
+      assertEquals(response.name(), BUCKET_NAME_COLDLINE);
+      assertEquals(response.location(), Location.US);
+      assertThat(response.storageClass()).isEqualTo(StorageClass.COLDLINE);
+
+      api().deleteBucket(BUCKET_NAME_COLDLINE);
+   }
+
+   @Test(groups = "live")
+   public void testCreateBucketMultiregional() {
+      BucketTemplate template = new BucketTemplate()
+               .name(BUCKET_NAME_MULTI_REGIONAL)
+               .location(Location.US)
+               .storageClass(StorageClass.MULTI_REGIONAL);
+
+      Bucket response = api().createBucket(PROJECT_NUMBER, template);
+
+      assertNotNull(response);
+      assertEquals(response.name(), BUCKET_NAME_MULTI_REGIONAL);
+      assertEquals(response.location(), Location.US);
+      assertThat(response.storageClass()).isEqualTo(StorageClass.MULTI_REGIONAL);
+
+      api().deleteBucket(BUCKET_NAME_NEARLINE);
+   }
+
+   @Test(groups = "live")
    public void testCreateBucketNearline() {
       BucketTemplate template = new BucketTemplate()
                .name(BUCKET_NAME_NEARLINE)


[26/50] jclouds git commit: JCLOUDS-943: JCLOUDS-1056: Configure OSGi packaging

Posted by ga...@apache.org.
JCLOUDS-943: JCLOUDS-1056: Configure OSGi packaging


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

Branch: refs/heads/master
Commit: 10318ed7773b177987baa14c3274895a590c9752
Parents: 57d162c
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jan 22 16:10:57 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jan 22 16:10:57 2016 -0800

----------------------------------------------------------------------
 providers/google-cloud-storage/pom.xml | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/10318ed7/providers/google-cloud-storage/pom.xml
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/pom.xml b/providers/google-cloud-storage/pom.xml
index 1b08640..98b38ce 100644
--- a/providers/google-cloud-storage/pom.xml
+++ b/providers/google-cloud-storage/pom.xml
@@ -31,6 +31,7 @@
     <artifactId>google-cloud-storage</artifactId>
     <name>jclouds Google Cloud Storage provider</name>
     <description>jclouds components to access Google Cloud Storage</description>
+    <packaging>bundle</packaging>
 
     <properties>
         <test.google-cloud-storage.identity>client_email which usually looks like project_id@developer.gserviceaccount.com</test.google-cloud-storage.identity>
@@ -40,6 +41,8 @@
         <test.jclouds.oauth.credential-type>p12PrivateKeyCredentials</test.jclouds.oauth.credential-type>
         <test.google-cloud-storage.api-version>v1</test.google-cloud-storage.api-version>
         <test.google-cloud-storage.build-version/>
+        <jclouds.osgi.export>org.jclouds.googlecloudstorage*;version="${project.version}"</jclouds.osgi.export>
+        <jclouds.osgi.import>org.jclouds*;version="${project.version}",*</jclouds.osgi.import>
     </properties>
 
     <dependencies>


[23/50] jclouds git commit: JCLOUDS-1008: Use @Encoded with GCS.

Posted by ga...@apache.org.
JCLOUDS-1008: Use @Encoded with GCS.

Google cloud storage should use the @Encoded annotation with the
object names to make sure that the object is percent-encoded prior to
being submitted in the path of the request. This was previously broken
because the default path encoding ignores "/" and encodes the entire
string. The @Encoded annotation instructs jclouds annotation processor
to not encode the parameters to which it is attached and not to encode
the entire request path. Parameters that are not annotated with
@Encoded are URL encoded prior to being add to the path.


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

Branch: refs/heads/master
Commit: 2385ba901e98d89e6cabd2b32028e1b3cac3992e
Parents: 0612579
Author: Timur Alperovich <ti...@gmail.com>
Authored: Sat Sep 26 15:16:13 2015 -0700
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Oct 21 10:40:04 2015 +0200

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java  | 47 +++++--------
 .../features/ObjectAccessControlsApi.java       | 32 ++++-----
 .../googlecloudstorage/features/ObjectApi.java  | 74 +++++++++++---------
 ...ogleCloudStorageBlobIntegrationLiveTest.java |  1 +
 .../features/ObjectApiMockTest.java             | 16 +++++
 .../src/test/resources/object_encoded_get.json  | 21 ++++++
 6 files changed, 114 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/2385ba90/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index e852704..5dbb7cd 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -20,8 +20,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.io.BaseEncoding.base64;
 import static org.jclouds.googlecloudstorage.domain.DomainResourceReferences.ObjectRole.READER;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
 import java.util.List;
 import java.util.Set;
 
@@ -41,11 +39,11 @@ import org.jclouds.blobstore.domain.internal.BlobImpl;
 import org.jclouds.blobstore.domain.internal.PageSetImpl;
 import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
 import org.jclouds.blobstore.internal.BaseBlobStore;
+import org.jclouds.blobstore.options.CopyOptions;
 import org.jclouds.blobstore.options.CreateContainerOptions;
 import org.jclouds.blobstore.options.GetOptions;
 import org.jclouds.blobstore.options.ListContainerOptions;
 import org.jclouds.blobstore.options.PutOptions;
-import org.jclouds.blobstore.options.CopyOptions;
 import org.jclouds.blobstore.strategy.internal.FetchBlobMetadata;
 import org.jclouds.blobstore.util.BlobUtils;
 import org.jclouds.collect.Memoized;
@@ -73,11 +71,10 @@ import org.jclouds.http.HttpResponseException;
 import org.jclouds.io.ContentMetadata;
 import org.jclouds.io.Payload;
 import org.jclouds.io.PayloadSlicer;
+import org.jclouds.util.Strings2;
 
-import com.google.common.base.Charsets;
 import com.google.common.base.Function;
 import com.google.common.base.Supplier;
-import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.hash.HashCode;
@@ -204,12 +201,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
     */
    @Override
    public boolean blobExists(String container, String name) {
-      try {
-         String urlName = name.contains("/") ? URLEncoder.encode(name, Charsets.UTF_8.toString()) : name;
-         return api.getObjectApi().objectExists(container, urlName);
-      } catch (UnsupportedEncodingException e) {
-         throw Throwables.propagate(e);
-      }
+      return api.getObjectApi().objectExists(container, Strings2.urlEncode(name));
    }
 
    /**
@@ -239,12 +231,12 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
 
    @Override
    public BlobMetadata blobMetadata(String container, String name) {
-      return objectToBlobMetadata.apply(api.getObjectApi().getObject(container, name));
+      return objectToBlobMetadata.apply(api.getObjectApi().getObject(container, Strings2.urlEncode(name)));
    }
 
    @Override
    public Blob getBlob(String container, String name, GetOptions options) {
-      GoogleCloudStorageObject gcsObject = api.getObjectApi().getObject(container, name);
+      GoogleCloudStorageObject gcsObject = api.getObjectApi().getObject(container, Strings2.urlEncode(name));
       if (gcsObject == null) {
          return null;
       }
@@ -252,7 +244,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
       MutableBlobMetadata metadata = objectToBlobMetadata.apply(gcsObject);
       Blob blob = new BlobImpl(metadata);
       // TODO: Does getObject not get the payload?!
-      Payload payload = api.getObjectApi().download(container, name, httpOptions).getPayload();
+      Payload payload = api.getObjectApi().download(container, Strings2.urlEncode(name), httpOptions).getPayload();
       payload.setContentMetadata(metadata.getContentMetadata()); // Doing this first retains it on setPayload.
       blob.setPayload(payload);
       return blob;
@@ -260,18 +252,13 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
 
    @Override
    public void removeBlob(String container, String name) {
-      String urlName;
-      try {
-         urlName = name.contains("/") ? URLEncoder.encode(name, Charsets.UTF_8.toString()) : name;
-      } catch (UnsupportedEncodingException uee) {
-         throw Throwables.propagate(uee);
-      }
-      api.getObjectApi().deleteObject(container, urlName);
+      api.getObjectApi().deleteObject(container, Strings2.urlEncode(name));
    }
 
    @Override
    public BlobAccess getBlobAccess(String container, String name) {
-      ObjectAccessControls controls = api.getObjectAccessControlsApi().getObjectAccessControls(container, name, "allUsers");
+      ObjectAccessControls controls = api.getObjectAccessControlsApi().getObjectAccessControls(container,
+            Strings2.urlEncode(name), "allUsers");
       if (controls != null && controls.role() == DomainResourceReferences.ObjectRole.READER) {
          return BlobAccess.PUBLIC_READ;
       } else {
@@ -287,9 +274,9 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
                .bucket(container)
                .role(READER)
                .build();
-         api.getObjectApi().patchObject(container, name, new ObjectTemplate().addAcl(controls));
+         api.getObjectApi().patchObject(container, Strings2.urlEncode(name), new ObjectTemplate().addAcl(controls));
       } else {
-         api.getObjectAccessControlsApi().deleteObjectAccessControls(container, name, "allUsers");
+         api.getObjectAccessControlsApi().deleteObjectAccessControls(container, Strings2.urlEncode(name), "allUsers");
       }
    }
 
@@ -312,7 +299,8 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    public String copyBlob(String fromContainer, String fromName, String toContainer, String toName,
          CopyOptions options) {
       if (!options.getContentMetadata().isPresent() && !options.getUserMetadata().isPresent()) {
-         return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName).etag();
+         return api.getObjectApi().copyObject(toContainer, Strings2.urlEncode(toName), fromContainer,
+               Strings2.urlEncode(fromName)).etag();
       }
 
       ObjectTemplate template = new ObjectTemplate();
@@ -349,7 +337,8 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
          template.customMetadata(options.getUserMetadata().get());
       }
 
-      return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName, template).etag();
+      return api.getObjectApi().copyObject(toContainer, Strings2.urlEncode(toName), fromContainer,
+            Strings2.urlEncode(fromName), template).etag();
    }
 
    @Override
@@ -372,12 +361,14 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) {
       ImmutableList.Builder<GoogleCloudStorageObject> builder = ImmutableList.builder();
       for (MultipartPart part : parts) {
-         builder.add(api.getObjectApi().getObject(mpu.containerName(), getMPUPartName(mpu, part.partNumber())));
+         builder.add(api.getObjectApi().getObject(mpu.containerName(),
+               Strings2.urlEncode(getMPUPartName(mpu, part.partNumber()))));
       }
       ObjectTemplate destination = blobMetadataToObjectTemplate.apply(mpu.blobMetadata());
       ComposeObjectTemplate template = ComposeObjectTemplate.builder().fromGoogleCloudStorageObject(builder.build())
             .destination(destination).build();
-      return api.getObjectApi().composeObjects(mpu.containerName(), mpu.blobName(), template).etag();
+      return api.getObjectApi().composeObjects(mpu.containerName(), Strings2.urlEncode(mpu.blobName()), template)
+            .etag();
       // TODO: delete components?
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2385ba90/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectAccessControlsApi.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectAccessControlsApi.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectAccessControlsApi.java
index ce31029..32b5e7c 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectAccessControlsApi.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectAccessControlsApi.java
@@ -23,6 +23,7 @@ import java.util.List;
 import javax.inject.Named;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
+import javax.ws.rs.Encoded;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
@@ -41,7 +42,6 @@ import org.jclouds.rest.annotations.Fallback;
 import org.jclouds.rest.annotations.PATCH;
 import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.SkipEncoding;
 import org.jclouds.rest.binders.BindToJsonPayload;
 
 /**
@@ -49,7 +49,6 @@ import org.jclouds.rest.binders.BindToJsonPayload;
  *
  * @see <a href = " https://developers.google.com/storage/docs/json_api/v1/objectAccessControls "/>
  */
-@SkipEncoding({ '/', '=' })
 @RequestFilters(OAuthFilter.class)
 @Consumes(APPLICATION_JSON)
 public interface ObjectAccessControlsApi {
@@ -74,7 +73,7 @@ public interface ObjectAccessControlsApi {
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable
    ObjectAccessControls getObjectAccessControls(@PathParam("bucket") String bucketName,
-            @PathParam("object") String objectName, @PathParam("entity") String entity);
+            @PathParam("object") @Encoded String objectName, @PathParam("entity") String entity);
 
    /**
     * Returns the acl entry for the specified entity on the specified object.
@@ -97,7 +96,7 @@ public interface ObjectAccessControlsApi {
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable
    ObjectAccessControls getObjectAccessControls(@PathParam("bucket") String bucketName,
-            @PathParam("object") String objectName, @PathParam("entity") String entity,
+            @PathParam("object") @Encoded String objectName, @PathParam("entity") String entity,
             @QueryParam("generation") Long generation);
 
    /**
@@ -116,7 +115,7 @@ public interface ObjectAccessControlsApi {
    @Produces(APPLICATION_JSON)
    @Path("/b/{bucket}/o/{object}/acl")
    ObjectAccessControls createObjectAccessControls(@PathParam("bucket") String bucketName,
-            @PathParam("object") String objectName,
+            @PathParam("object") @Encoded String objectName,
             @BinderParam(BindToJsonPayload.class) ObjectAccessControlsTemplate template);
 
    /**
@@ -137,7 +136,7 @@ public interface ObjectAccessControlsApi {
    @Produces(APPLICATION_JSON)
    @Path("/b/{bucket}/o/{object}/acl")
    ObjectAccessControls createObjectAccessControls(@PathParam("bucket") String bucketName,
-            @PathParam("object") String objectName,
+            @PathParam("object") @Encoded String objectName,
             @BinderParam(BindToJsonPayload.class) ObjectAccessControlsTemplate template,
             @QueryParam("generation") Long generation);
 
@@ -155,8 +154,8 @@ public interface ObjectAccessControlsApi {
    @Named("ObjectAccessControls:delete")
    @DELETE
    @Path("/b/{bucket}/o/{object}/acl/{entity}")
-   void deleteObjectAccessControls(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
-            @PathParam("entity") String entity);
+   void deleteObjectAccessControls(@PathParam("bucket") String bucketName,
+         @PathParam("object") @Encoded String objectName, @PathParam("entity") String entity);
 
    /**
     * Permanently deletes the acl entry for the specified entity on the specified bucket.
@@ -174,8 +173,9 @@ public interface ObjectAccessControlsApi {
    @Named("ObjectAccessControls:delete")
    @DELETE
    @Path("/b/{bucket}/o/{object}/acl/{entity}")
-   void deleteObjectAccessControls(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
-            @PathParam("entity") String entity, @QueryParam("generation") Long generation);
+   void deleteObjectAccessControls(@PathParam("bucket") String bucketName,
+         @PathParam("object") @Encoded String objectName, @PathParam("entity") String entity,
+         @QueryParam("generation") Long generation);
 
    /**
     * Retrieves acl entries on a specified object
@@ -193,7 +193,7 @@ public interface ObjectAccessControlsApi {
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable
    List<ObjectAccessControls> listObjectAccessControls(@PathParam("bucket") String bucketName,
-            @PathParam("object") String objectName);
+            @PathParam("object") @Encoded String objectName);
 
    /**
     * Retrieves acl entries on a specified object
@@ -214,7 +214,7 @@ public interface ObjectAccessControlsApi {
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable
    List<ObjectAccessControls> listObjectAccessControls(@PathParam("bucket") String bucketName,
-            @PathParam("object") String objectName, @QueryParam("generation") Long generation);
+            @PathParam("object") @Encoded String objectName, @QueryParam("generation") Long generation);
 
    /**
     * Updates an acl entry on the specified object
@@ -237,7 +237,7 @@ public interface ObjectAccessControlsApi {
    @Produces(APPLICATION_JSON)
    @Path("/b/{bucket}/o/{object}/acl/{entity}")
    ObjectAccessControls updateObjectAccessControls(@PathParam("bucket") String bucketName,
-            @PathParam("object") String objectName, @PathParam("entity") String entity,
+            @PathParam("object") @Encoded String objectName, @PathParam("entity") String entity,
             @BinderParam(BindToJsonPayload.class) ObjectAccessControlsTemplate template);
 
    /**
@@ -262,7 +262,7 @@ public interface ObjectAccessControlsApi {
    @Produces(APPLICATION_JSON)
    @Path("/b/{bucket}/o/{object}/acl/{entity}")
    ObjectAccessControls updateObjectAccessControls(@PathParam("bucket") String bucketName,
-            @PathParam("object") String objectName, @PathParam("entity") String entity,
+            @PathParam("object") @Encoded String objectName, @PathParam("entity") String entity,
             @BinderParam(BindToJsonPayload.class) ObjectAccessControlsTemplate template,
             @QueryParam("generation") Long generation);
 
@@ -286,7 +286,7 @@ public interface ObjectAccessControlsApi {
    @Produces(APPLICATION_JSON)
    @Path("/b/{bucket}/o/{object}/acl/{entity}")
    ObjectAccessControls patchObjectAccessControls(@PathParam("bucket") String bucketName,
-            @PathParam("object") String objectName, @PathParam("entity") String entity,
+            @PathParam("object") @Encoded String objectName, @PathParam("entity") String entity,
             @BinderParam(BindToJsonPayload.class) ObjectAccessControlsTemplate template);
 
    /**
@@ -311,7 +311,7 @@ public interface ObjectAccessControlsApi {
    @Produces(APPLICATION_JSON)
    @Path("/b/{bucket}/o/{object}/acl/{entity}")
    ObjectAccessControls patchObjectAccessControls(@PathParam("bucket") String bucketName,
-            @PathParam("object") String objectName, @PathParam("entity") String entity,
+            @PathParam("object") @Encoded String objectName, @PathParam("entity") String entity,
             @BinderParam(BindToJsonPayload.class) ObjectAccessControlsTemplate template,
             @QueryParam("generation") Long generation);
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2385ba90/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
index ff8dfde..4e4f5b9 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
@@ -21,6 +21,7 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
 import javax.inject.Named;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
+import javax.ws.rs.Encoded;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
 import javax.ws.rs.POST;
@@ -60,7 +61,6 @@ import org.jclouds.rest.annotations.PayloadParam;
 import org.jclouds.rest.annotations.QueryParams;
 import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SkipEncoding;
 import org.jclouds.rest.binders.BindToJsonPayload;
 
 /**
@@ -68,7 +68,6 @@ import org.jclouds.rest.binders.BindToJsonPayload;
  *
  * @see <a href="https://developers.google.com/storage/docs/json_api/v1/objects"/>
  */
-@SkipEncoding({ '/', '=' })
 @RequestFilters(OAuthFilter.class)
 public interface ObjectApi {
 
@@ -87,7 +86,7 @@ public interface ObjectApi {
    @Path("storage/v1/b/{bucket}/o/{object}")
    @Fallback(FalseOnNotFoundOr404.class)
    @Nullable
-   boolean objectExists(@PathParam("bucket") String bucketName, @PathParam("object") String objectName);
+   boolean objectExists(@PathParam("bucket") String bucketName, @PathParam("object") @Encoded String objectName);
 
    /**
     * Retrieve an object metadata
@@ -105,7 +104,8 @@ public interface ObjectApi {
    @Consumes(APPLICATION_JSON)
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable
-   GoogleCloudStorageObject getObject(@PathParam("bucket") String bucketName, @PathParam("object") String objectName);
+   GoogleCloudStorageObject getObject(@PathParam("bucket") String bucketName,
+         @PathParam("object") @Encoded String objectName);
 
    /**
     * Retrieves objects metadata
@@ -126,8 +126,8 @@ public interface ObjectApi {
    @Consumes(APPLICATION_JSON)
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable
-   GoogleCloudStorageObject getObject(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
-         HttpRequestOptions options);
+   GoogleCloudStorageObject getObject(@PathParam("bucket") String bucketName,
+         @PathParam("object") @Encoded String objectName, HttpRequestOptions options);
 
    /**
     * Retrieve an object or their metadata
@@ -146,7 +146,7 @@ public interface ObjectApi {
    @ResponseParser(ParseToPayloadEnclosing.class)
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable
-   PayloadEnclosing download(@PathParam("bucket") String bucketName, @PathParam("object") String objectName);
+   PayloadEnclosing download(@PathParam("bucket") String bucketName, @PathParam("object") @Encoded String objectName);
 
    /**
     * Retrieves objects
@@ -167,7 +167,8 @@ public interface ObjectApi {
    @Path("storage/v1/b/{bucket}/o/{object}")
    @ResponseParser(ParseToPayloadEnclosing.class)
    @Fallback(NullOnNotFoundOr404.class)
-   @Nullable PayloadEnclosing download(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
+   @Nullable
+   PayloadEnclosing download(@PathParam("bucket") String bucketName, @PathParam("object") @Encoded String objectName,
          HttpRequestOptions options);
 
    /**
@@ -204,7 +205,7 @@ public interface ObjectApi {
    @DELETE
    @Path("storage/v1/b/{bucket}/o/{object}")
    @Fallback(FalseOnNotFoundOr404.class)
-   boolean deleteObject(@PathParam("bucket") String bucketName, @PathParam("object") String objectName);
+   boolean deleteObject(@PathParam("bucket") String bucketName, @PathParam("object") @Encoded String objectName);
 
    /**
     * Deletes an object and its metadata. Deletions are permanent if versioning is not enabled for the bucket, or if the
@@ -221,7 +222,7 @@ public interface ObjectApi {
    @DELETE
    @Path("storage/v1/b/{bucket}/o/{object}")
    @Fallback(FalseOnNotFoundOr404.class)
-   boolean deleteObject(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
+   boolean deleteObject(@PathParam("bucket") String bucketName, @PathParam("object") @Encoded String objectName,
             DeleteObjectOptions options);
 
    /**
@@ -271,8 +272,9 @@ public interface ObjectApi {
    @Produces(APPLICATION_JSON)
    @Path("storage/v1/b/{bucket}/o/{object}")
    @Fallback(NullOnNotFoundOr404.class)
-   GoogleCloudStorageObject updateObject(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
-            @BinderParam(BindToJsonPayload.class) ObjectTemplate objectTemplate);
+   GoogleCloudStorageObject updateObject(@PathParam("bucket") String bucketName,
+         @PathParam("object") @Encoded String objectName,
+         @BinderParam(BindToJsonPayload.class) ObjectTemplate objectTemplate);
 
    /**
     * Updates an object
@@ -294,8 +296,9 @@ public interface ObjectApi {
    @Produces(APPLICATION_JSON)
    @Path("storage/v1/b/{bucket}/o/{object}")
    @Fallback(NullOnNotFoundOr404.class)
-   GoogleCloudStorageObject updateObject(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
-            @BinderParam(BindToJsonPayload.class) ObjectTemplate objectTemplate, UpdateObjectOptions options);
+   GoogleCloudStorageObject updateObject(@PathParam("bucket") String bucketName,
+         @PathParam("object") @Encoded String objectName,
+         @BinderParam(BindToJsonPayload.class) ObjectTemplate objectTemplate, UpdateObjectOptions options);
 
    /**
     * Updates an object according to patch semantics
@@ -315,8 +318,9 @@ public interface ObjectApi {
    @Produces(APPLICATION_JSON)
    @Path("storage/v1/b/{bucket}/o/{object}")
    @Fallback(NullOnNotFoundOr404.class)
-   GoogleCloudStorageObject patchObject(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
-            @BinderParam(BindToJsonPayload.class) ObjectTemplate objectTemplate);
+   GoogleCloudStorageObject patchObject(@PathParam("bucket") String bucketName,
+         @PathParam("object") @Encoded String objectName,
+         @BinderParam(BindToJsonPayload.class) ObjectTemplate objectTemplate);
 
    /**
     * Updates an object according to patch semantics
@@ -338,8 +342,9 @@ public interface ObjectApi {
    @Produces(APPLICATION_JSON)
    @Path("storage/v1/b/{bucket}/o/{object}")
    @Fallback(NullOnNotFoundOr404.class)
-   GoogleCloudStorageObject patchObject(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
-            @BinderParam(BindToJsonPayload.class) ObjectTemplate objectTemplate, UpdateObjectOptions options);
+   GoogleCloudStorageObject patchObject(@PathParam("bucket") String bucketName,
+         @PathParam("object") @Encoded String objectName,
+         @BinderParam(BindToJsonPayload.class) ObjectTemplate objectTemplate, UpdateObjectOptions options);
 
    /**
     * Concatenates a list of existing objects into a new object in the same bucket.
@@ -358,7 +363,7 @@ public interface ObjectApi {
    @Consumes(APPLICATION_JSON)
    @Path("storage/v1/b/{destinationBucket}/o/{destinationObject}/compose")
    GoogleCloudStorageObject composeObjects(@PathParam("destinationBucket") String destinationBucket,
-            @PathParam("destinationObject") String destinationObject,
+            @PathParam("destinationObject") @Encoded String destinationObject,
             @BinderParam(BindToJsonPayload.class) ComposeObjectTemplate composeObjectTemplate);
 
    /**
@@ -380,7 +385,7 @@ public interface ObjectApi {
    @Consumes(APPLICATION_JSON)
    @Path("storage/v1/b/{destinationBucket}/o/{destinationObject}/compose")
    GoogleCloudStorageObject composeObjects(@PathParam("destinationBucket") String destinationBucket,
-            @PathParam("destinationObject") String destinationObject,
+            @PathParam("destinationObject") @Encoded String destinationObject,
             @BinderParam(BindToJsonPayload.class) ComposeObjectTemplate composeObjectTemplate,
             ComposeObjectOptions options);
 
@@ -403,8 +408,9 @@ public interface ObjectApi {
    @Consumes(APPLICATION_JSON)
    @Path("/storage/v1/b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}")
    GoogleCloudStorageObject copyObject(@PathParam("destinationBucket") String destinationBucket,
-            @PathParam("destinationObject") String destinationObject, @PathParam("sourceBucket") String sourceBucket,
-            @PathParam("sourceObject") String sourceObject);
+         @PathParam("destinationObject") @Encoded String destinationObject,
+         @PathParam("sourceBucket") String sourceBucket,
+         @PathParam("sourceObject") @Encoded String sourceObject);
 
     /**
      * Copies an object to a specified location with updated metadata.
@@ -427,8 +433,10 @@ public interface ObjectApi {
     @Consumes(APPLICATION_JSON)
     @Path("/storage/v1/b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}")
     GoogleCloudStorageObject copyObject(@PathParam("destinationBucket") String destinationBucket,
-                                        @PathParam("destinationObject") String destinationObject, @PathParam("sourceBucket") String sourceBucket,
-                                        @PathParam("sourceObject") String sourceObject, @BinderParam(BindToJsonPayload.class) ObjectTemplate template);
+          @PathParam("destinationObject") @Encoded String destinationObject,
+          @PathParam("sourceBucket") String sourceBucket,
+          @PathParam("sourceObject") @Encoded String sourceObject,
+          @BinderParam(BindToJsonPayload.class) ObjectTemplate template);
 
    /**
     * Copies an object to a specified location. Optionally overrides metadata.
@@ -451,8 +459,9 @@ public interface ObjectApi {
    @Consumes(APPLICATION_JSON)
    @Path("/storage/v1/b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}")
    GoogleCloudStorageObject copyObject(@PathParam("destinationBucket") String destinationBucket,
-            @PathParam("destinationObject") String destinationObject, @PathParam("sourceBucket") String sourceBucket,
-            @PathParam("sourceObject") String sourceObject, CopyObjectOptions options);
+         @PathParam("destinationObject") @Encoded String destinationObject,
+         @PathParam("sourceBucket") String sourceBucket,
+         @PathParam("sourceObject") @Encoded String sourceObject, CopyObjectOptions options);
 
    /**
     * Stores a new object with metadata.
@@ -495,9 +504,8 @@ public interface ObjectApi {
    @Consumes(APPLICATION_JSON)
    @Path("/storage/v1/b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}")
    RewriteResponse rewriteObjects(@PathParam("destinationBucket") String destinationBucket,
-            @PathParam("destinationObject") String destinationObject,
-            @PathParam("sourceBucket") String sourceBucket,
-            @PathParam("sourceObject") String sourceObject);
+         @PathParam("destinationObject") @Encoded String destinationObject,
+         @PathParam("sourceBucket") String sourceBucket, @PathParam("sourceObject") @Encoded String sourceObject);
 
    /**
     * Rewrites a source object to a destination object.
@@ -520,8 +528,8 @@ public interface ObjectApi {
    @Consumes(APPLICATION_JSON)
    @Path("/storage/v1/b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}")
    RewriteResponse rewriteObjects(@PathParam("destinationBucket") String destinationBucket,
-            @PathParam("destinationObject") String destinationObject,
-            @PathParam("sourceBucket") String sourceBucket,
-            @PathParam("sourceObject") String sourceObject,
-            RewriteObjectOptions options);
+         @PathParam("destinationObject") @Encoded String destinationObject,
+         @PathParam("sourceBucket") String sourceBucket,
+         @PathParam("sourceObject") @Encoded String sourceObject,
+         RewriteObjectOptions options);
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2385ba90/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
index 162c45a..db1bcd8 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
@@ -143,6 +143,7 @@ public class GoogleCloudStorageBlobIntegrationLiveTest extends BaseBlobIntegrati
 
       return new Object[][] { { "file.xml", "text/xml", file, realObject },
                { "string.xml", "text/xml", realObject, realObject },
+               { "stringwith/slash.xml", "text/xml", realObject, realObject },
                { "bytes.xml", "application/octet-stream", realObject.getBytes(), realObject } };
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2385ba90/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
index 9906a90..35e9827 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
@@ -40,6 +40,7 @@ import org.jclouds.googlecloudstorage.parse.ParseGoogleCloudStorageObjectListTes
 import org.jclouds.googlecloudstorage.parse.ParseObjectRewriteResponse;
 import org.jclouds.http.internal.PayloadEnclosingImpl;
 import org.jclouds.io.PayloadEnclosing;
+import org.jclouds.util.Strings2;
 import org.testng.annotations.Test;
 
 import com.google.common.net.MediaType;
@@ -57,6 +58,13 @@ public class ObjectApiMockTest extends BaseGoogleCloudStorageApiMockTest {
       assertSent(server, "GET", "/storage/v1/b/test/o/file_name", null);
    }
 
+   public void existsEncoded() throws Exception {
+      server.enqueue(jsonResponse("/object_encoded_get.json"));
+
+      assertTrue(objectApi().objectExists("test", Strings2.urlEncode("dir/file name")));
+      assertSent(server, "GET", "/storage/v1/b/test/o/dir%2Ffile%20name", null);
+   }
+
    public void exists_4xx() throws Exception {
       server.enqueue(response404());
 
@@ -120,6 +128,14 @@ public class ObjectApiMockTest extends BaseGoogleCloudStorageApiMockTest {
       assertSent(server, "DELETE", "/storage/v1/b/test/o/object_name", null);
    }
 
+   public void delete_encoded() throws Exception {
+      server.enqueue(new MockResponse());
+
+      // TODO: Should this be returning True on not found?
+      assertTrue(objectApi().deleteObject("test", Strings2.urlEncode("dir/object name")));
+      assertSent(server, "DELETE", "/storage/v1/b/test/o/dir%2Fobject%20name", null);
+   }
+
    public void list() throws Exception {
       server.enqueue(jsonResponse("/object_list.json"));
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2385ba90/providers/google-cloud-storage/src/test/resources/object_encoded_get.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/object_encoded_get.json b/providers/google-cloud-storage/src/test/resources/object_encoded_get.json
new file mode 100644
index 0000000..7fdb843
--- /dev/null
+++ b/providers/google-cloud-storage/src/test/resources/object_encoded_get.json
@@ -0,0 +1,21 @@
+{
+  "kind": "storage#object",
+  "id": "test/dir%2Ffile%20name/1000",
+  "selfLink": "https://www.googleapis.com/storage/v1/b/test/o/dir%2Ffile%20name",
+  "name": "dir%2Ffile%20name",
+  "bucket": "test",
+  "generation": "1000",
+  "metageneration": "8",
+  "contentType": "application/x-tar",
+  "updated": "2014-09-27T00:01:44.819",
+  "storageClass": "STANDARD",
+  "size": "1000",
+  "md5Hash": "md5Hash",
+  "mediaLink": "https://www.googleapis.com/download/storage/v1/b/test/o/dir%2Ffile%20name?generation=1000&alt=media",
+  "owner": {
+    "entity": "entity",
+    "entityId": "entityId"
+  },
+  "crc32c": "crc32c",
+  "etag": "etag"
+}


[20/50] jclouds git commit: Simplify list handling.

Posted by ga...@apache.org.
Simplify list handling.


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

Branch: refs/heads/master
Commit: 25cb06c9fe453496a84c4679d5c9a5bcf4f7d40c
Parents: 834b3d5
Author: Timur Alperovich <ti...@gmail.com>
Authored: Thu Aug 20 17:14:00 2015 -0700
Committer: Timur Alperovich <ti...@gmail.com>
Committed: Thu Aug 20 17:55:55 2015 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java      | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/25cb06c9/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 7fd3643..924fad3 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -187,21 +187,15 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    /** Returns list of of all the objects */
    @Override
    public PageSet<? extends StorageMetadata> list(String container) {
-      ListPageWithPrefixes<GoogleCloudStorageObject> gcsList = api.getObjectApi().listObjects(container);
-      PageSet<? extends StorageMetadata> list = objectListToStorageMetadata.apply(gcsList);
-      return list;
+      return list(container, ListContainerOptions.NONE);
    }
 
    @Override
    public PageSet<? extends StorageMetadata> list(String container, ListContainerOptions options) {
-      if (options != null && options != ListContainerOptions.NONE) {
-         ListObjectOptions listOptions = listContainerOptionsToListObjectOptions.apply(options);
-         ListPageWithPrefixes<GoogleCloudStorageObject> gcsList = api.getObjectApi().listObjects(container, listOptions);
-         PageSet<? extends StorageMetadata> list = objectListToStorageMetadata.apply(gcsList);
-         return options.isDetailed() ? fetchBlobMetadataProvider.get().setContainerName(container).apply(list) : list;
-      } else {
-         return list(container);
-      }
+      ListObjectOptions listOptions = listContainerOptionsToListObjectOptions.apply(options);
+      ListPageWithPrefixes<GoogleCloudStorageObject> gcsList = api.getObjectApi().listObjects(container, listOptions);
+      PageSet<? extends StorageMetadata> list = objectListToStorageMetadata.apply(gcsList);
+      return options.isDetailed() ? fetchBlobMetadataProvider.get().setContainerName(container).apply(list) : list;
    }
 
    /**


[21/50] jclouds git commit: JCLOUDS-894: Add portable multipart upload for GCS

Posted by ga...@apache.org.
JCLOUDS-894: Add portable multipart upload for GCS


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

Branch: refs/heads/master
Commit: 2e1e109a0c18b6b7375f0f8da2ee345518131902
Parents: e222567
Author: Andrew Gaul <ga...@apache.org>
Authored: Wed Aug 26 12:48:44 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Wed Aug 26 14:08:10 2015 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java  |  59 ++++++--
 .../internal/MultipartNamingStrategy.java       |  30 ----
 .../strategy/internal/MultipartUpload.java      |  36 -----
 .../MultipartUploadSlicingAlgorithm.java        | 139 -------------------
 .../internal/MultipartUploadStrategy.java       |  26 ----
 .../SequentialMultipartUploadStrategy.java      | 100 -------------
 ...ogleCloudStorageBlobIntegrationLiveTest.java |  24 +---
 7 files changed, 47 insertions(+), 367 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/2e1e109a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 924fad3..e852704 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -58,15 +58,16 @@ import org.jclouds.googlecloudstorage.blobstore.functions.BlobStoreListContainer
 import org.jclouds.googlecloudstorage.blobstore.functions.BucketToStorageMetadata;
 import org.jclouds.googlecloudstorage.blobstore.functions.ObjectListToStorageMetadata;
 import org.jclouds.googlecloudstorage.blobstore.functions.ObjectToBlobMetadata;
-import org.jclouds.googlecloudstorage.blobstore.strategy.internal.MultipartUploadStrategy;
 import org.jclouds.googlecloudstorage.domain.Bucket;
 import org.jclouds.googlecloudstorage.domain.DomainResourceReferences;
 import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
 import org.jclouds.googlecloudstorage.domain.ListPageWithPrefixes;
 import org.jclouds.googlecloudstorage.domain.ObjectAccessControls;
 import org.jclouds.googlecloudstorage.domain.templates.BucketTemplate;
+import org.jclouds.googlecloudstorage.domain.templates.ComposeObjectTemplate;
 import org.jclouds.googlecloudstorage.domain.templates.ObjectAccessControlsTemplate;
 import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate;
+import org.jclouds.googlecloudstorage.options.InsertObjectOptions;
 import org.jclouds.googlecloudstorage.options.ListObjectOptions;
 import org.jclouds.http.HttpResponseException;
 import org.jclouds.io.ContentMetadata;
@@ -77,6 +78,7 @@ import com.google.common.base.Charsets;
 import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 import com.google.common.base.Throwables;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.hash.HashCode;
 import com.google.inject.Provider;
@@ -90,7 +92,6 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    private final Provider<FetchBlobMetadata> fetchBlobMetadataProvider;
    private final BlobMetadataToObjectTemplate blobMetadataToObjectTemplate;
    private final BlobStoreListContainerOptionsToListObjectOptions listContainerOptionsToListObjectOptions;
-   private final Provider<MultipartUploadStrategy> multipartUploadStrategy;
    private final Supplier<String> projectId;
    private final BlobToHttpGetOptions blob2ObjectGetOptions;
 
@@ -101,7 +102,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
             Provider<FetchBlobMetadata> fetchBlobMetadataProvider,
             BlobMetadataToObjectTemplate blobMetadataToObjectTemplate,
             BlobStoreListContainerOptionsToListObjectOptions listContainerOptionsToListObjectOptions,
-            Provider<MultipartUploadStrategy> multipartUploadStrategy, @CurrentProject Supplier<String> projectId,
+            @CurrentProject Supplier<String> projectId,
             BlobToHttpGetOptions blob2ObjectGetOptions) {
       super(context, blobUtils, defaultLocation, locations, slicer);
       this.api = api;
@@ -112,7 +113,6 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
       this.blobMetadataToObjectTemplate = blobMetadataToObjectTemplate;
       this.listContainerOptionsToListObjectOptions = listContainerOptionsToListObjectOptions;
       this.projectId = projectId;
-      this.multipartUploadStrategy = multipartUploadStrategy;
       this.blob2ObjectGetOptions = checkNotNull(blob2ObjectGetOptions, "blob2ObjectGetOptions");
    }
 
@@ -231,7 +231,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    @Override
    public String putBlob(String container, Blob blob, PutOptions options) {
       if (options.isMultipart()) {
-         return multipartUploadStrategy.get().execute(container, blob);
+         return putMultipartBlob(container, blob, options);
       } else {
          return putBlob(container, blob);
       }
@@ -354,41 +354,74 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
 
    @Override
    public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) {
-      throw new UnsupportedOperationException("not yet implemented");
+      String uploadId = blobMetadata.getName();
+      return MultipartUpload.create(container, blobMetadata.getName(), uploadId, blobMetadata);
    }
 
    @Override
    public void abortMultipartUpload(MultipartUpload mpu) {
-      throw new UnsupportedOperationException("not yet implemented");
+      ImmutableList.Builder<String> builder = ImmutableList.builder();
+      List<MultipartPart> parts = listMultipartUpload(mpu);
+      for (MultipartPart part : parts) {
+         builder.add(getMPUPartName(mpu, part.partNumber()));
+      }
+      removeBlobs(mpu.containerName(), builder.build());
    }
 
    @Override
    public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) {
-      throw new UnsupportedOperationException("not yet implemented");
+      ImmutableList.Builder<GoogleCloudStorageObject> builder = ImmutableList.builder();
+      for (MultipartPart part : parts) {
+         builder.add(api.getObjectApi().getObject(mpu.containerName(), getMPUPartName(mpu, part.partNumber())));
+      }
+      ObjectTemplate destination = blobMetadataToObjectTemplate.apply(mpu.blobMetadata());
+      ComposeObjectTemplate template = ComposeObjectTemplate.builder().fromGoogleCloudStorageObject(builder.build())
+            .destination(destination).build();
+      return api.getObjectApi().composeObjects(mpu.containerName(), mpu.blobName(), template).etag();
+      // TODO: delete components?
    }
 
    @Override
    public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) {
-      throw new UnsupportedOperationException("not yet implemented");
+      String partName = getMPUPartName(mpu, partNumber);
+      long partSize = payload.getContentMetadata().getContentLength();
+      InsertObjectOptions insertOptions = new InsertObjectOptions().name(partName);
+      GoogleCloudStorageObject object = api.getObjectApi().simpleUpload(mpu.containerName(),
+            mpu.blobMetadata().getContentMetadata().getContentType(), partSize, payload, insertOptions);
+      return MultipartPart.create(partNumber, partSize, object.etag());
    }
 
    @Override
    public List<MultipartPart> listMultipartUpload(MultipartUpload mpu) {
-      throw new UnsupportedOperationException("not yet implemented");
+      ImmutableList.Builder<MultipartPart> parts = ImmutableList.builder();
+      PageSet<? extends StorageMetadata> pageSet = list(mpu.containerName(),
+            new ListContainerOptions().prefix(mpu.blobName() + "_"));
+      // TODO: pagination
+      for (StorageMetadata sm : pageSet) {
+         int lastUnderscore = sm.getName().lastIndexOf('_');
+         int partNumber = Integer.parseInt(sm.getName().substring(lastUnderscore + 1));
+         parts.add(MultipartPart.create(partNumber, sm.getSize(), sm.getETag()));
+      }
+      return parts.build();
    }
 
    @Override
    public long getMinimumMultipartPartSize() {
-      throw new UnsupportedOperationException("not yet implemented");
+      return 5L * 1024L * 1024L;
    }
 
    @Override
    public long getMaximumMultipartPartSize() {
-      throw new UnsupportedOperationException("not yet implemented");
+      return 5L * 1024L * 1024L * 1024L;
    }
 
    @Override
    public int getMaximumNumberOfParts() {
-      throw new UnsupportedOperationException("not yet implemented");
+      // TODO: should this be 32?  See: https://cloud.google.com/storage/docs/composite-objects
+      return 10 * 1000;
+   }
+
+   private static String getMPUPartName(MultipartUpload mpu, int partNumber) {
+      return String.format("%s_%08d", mpu.id(), partNumber);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2e1e109a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartNamingStrategy.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartNamingStrategy.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartNamingStrategy.java
deleted file mode 100644
index 89e76a3..0000000
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartNamingStrategy.java
+++ /dev/null
@@ -1,30 +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.googlecloudstorage.blobstore.strategy.internal;
-
-import javax.inject.Singleton;
-
-@Singleton
-public class MultipartNamingStrategy {
-
-   private static final String PART_SEPARATOR = "_";
-
-   protected String getPartName(String key, int partNumber, int totalParts) {
-      int base = (int) Math.log10(totalParts) + 1;
-      return String.format("%s%s%0" + base + "d", key, PART_SEPARATOR, partNumber);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2e1e109a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUpload.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUpload.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUpload.java
deleted file mode 100644
index 2edc6c5..0000000
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUpload.java
+++ /dev/null
@@ -1,36 +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.googlecloudstorage.blobstore.strategy.internal;
-
-public final class MultipartUpload {
-
-   private MultipartUpload() {
-   }
-
-   /* Maximum number of parts per upload */
-   public static final int MAX_NUMBER_OF_PARTS = 10000;
-   /* Maximum number of parts returned for a list parts request */
-   public static final int MAX_LIST_PARTS_RETURNED = 1000;
-   /* Maximum number of multipart uploads returned in a list multipart uploads request */
-   public static final int MAX_LIST_MPU_RETURNED = 1000;
-
-   /**
-    * part size 5 MB to 5 GB, last part can be < 5 MB
-    */
-   public static final long MIN_PART_SIZE = 5L * 1024L * 1024L;
-   public static final long MAX_PART_SIZE = 5L * 1024L * 1024L * 1024L;
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2e1e109a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUploadSlicingAlgorithm.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUploadSlicingAlgorithm.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUploadSlicingAlgorithm.java
deleted file mode 100644
index dd8c5ab..0000000
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUploadSlicingAlgorithm.java
+++ /dev/null
@@ -1,139 +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.googlecloudstorage.blobstore.strategy.internal;
-
-import javax.annotation.Resource;
-import javax.inject.Named;
-
-import org.jclouds.blobstore.reference.BlobStoreConstants;
-import org.jclouds.logging.Logger;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.inject.Inject;
-
-public class MultipartUploadSlicingAlgorithm {
-
-   @Resource
-   @Named(BlobStoreConstants.BLOBSTORE_LOGGER)
-   protected Logger logger = Logger.NULL;
-
-   @VisibleForTesting
-   static final long DEFAULT_PART_SIZE = 32 * 1024 * 1024;
-
-   @VisibleForTesting
-   static final int DEFAULT_MAGNITUDE_BASE = 100;
-
-   @Inject(optional = true)
-   @Named("jclouds.mpu.parts.size")
-   @VisibleForTesting
-   long defaultPartSize = DEFAULT_PART_SIZE;
-
-   @Inject(optional = true)
-   @Named("jclouds.mpu.parts.magnitude")
-   @VisibleForTesting
-   int magnitudeBase = DEFAULT_MAGNITUDE_BASE;
-
-   // calculated only once, but not from the constructor
-   private volatile int parts; // required number of parts with chunkSize
-   private volatile long chunkSize;
-   private volatile long remaining; // number of bytes remained for the last part
-
-   // sequentially updated values
-   private volatile int part;
-   private volatile long chunkOffset;
-   private volatile long copied;
-
-   @VisibleForTesting
-   protected long calculateChunkSize(long length) {
-      long unitPartSize = defaultPartSize; // first try with default part size
-      int parts = (int) (length / unitPartSize);
-      long partSize = unitPartSize;
-      int magnitude = parts / magnitudeBase;
-      if (magnitude > 0) {
-         partSize = magnitude * unitPartSize;
-         if (partSize > MultipartUpload.MAX_PART_SIZE) {
-            partSize = MultipartUpload.MAX_PART_SIZE;
-            unitPartSize = MultipartUpload.MAX_PART_SIZE;
-         }
-         parts = (int) (length / partSize);
-         if (parts * partSize < length) {
-            partSize = (magnitude + 1) * unitPartSize;
-            if (partSize > MultipartUpload.MAX_PART_SIZE) {
-               partSize = MultipartUpload.MAX_PART_SIZE;
-               unitPartSize = MultipartUpload.MAX_PART_SIZE;
-            }
-            parts = (int) (length / partSize);
-         }
-      }
-      if (parts > MultipartUpload.MAX_NUMBER_OF_PARTS) { // if splits in too many parts or
-         // cannot be split
-         unitPartSize = MultipartUpload.MIN_PART_SIZE; // take the minimum part size
-         parts = (int) (length / unitPartSize);
-      }
-      if (parts > MultipartUpload.MAX_NUMBER_OF_PARTS) { // if still splits in too many parts
-         parts = MultipartUpload.MAX_NUMBER_OF_PARTS - 1; // limit them. do not care about not
-         // covering
-      }
-      long remainder = length % unitPartSize;
-      if (remainder == 0 && parts > 0) {
-         parts -= 1;
-      }
-      this.chunkSize = partSize;
-      this.parts = parts;
-      this.remaining = length - partSize * parts;
-      logger.debug(" %d bytes partitioned in %d parts of part size: %d, remaining: %d%s", length, parts, chunkSize,
-               remaining, remaining > MultipartUpload.MAX_PART_SIZE ? " overflow!" : "");
-      return this.chunkSize;
-   }
-
-   public long getCopied() {
-      return copied;
-   }
-
-   public void setCopied(long copied) {
-      this.copied = copied;
-   }
-
-   @VisibleForTesting
-   protected int getParts() {
-      return parts;
-   }
-
-   protected int getNextPart() {
-      return ++part;
-   }
-
-   protected void addCopied(long copied) {
-      this.copied += copied;
-   }
-
-   protected long getNextChunkOffset() {
-      long next = chunkOffset;
-      chunkOffset += getChunkSize();
-      return next;
-   }
-
-   @VisibleForTesting
-   protected long getChunkSize() {
-      return chunkSize;
-   }
-
-   @VisibleForTesting
-   protected long getRemaining() {
-      return remaining;
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2e1e109a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUploadStrategy.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUploadStrategy.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUploadStrategy.java
deleted file mode 100644
index 89c4879..0000000
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/MultipartUploadStrategy.java
+++ /dev/null
@@ -1,26 +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.googlecloudstorage.blobstore.strategy.internal;
-
-import org.jclouds.blobstore.domain.Blob;
-
-import com.google.inject.ImplementedBy;
-
-@ImplementedBy(SequentialMultipartUploadStrategy.class)
-public abstract class MultipartUploadStrategy {
-   public abstract String execute(String container, Blob blob);
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2e1e109a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
deleted file mode 100644
index 83b3823..0000000
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
+++ /dev/null
@@ -1,100 +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.googlecloudstorage.blobstore.strategy.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.List;
-
-import javax.inject.Provider;
-
-import org.jclouds.blobstore.domain.Blob;
-import org.jclouds.blobstore.domain.BlobBuilder;
-import org.jclouds.googlecloudstorage.GoogleCloudStorageApi;
-import org.jclouds.googlecloudstorage.blobstore.functions.BlobMetadataToObjectTemplate;
-import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
-import org.jclouds.googlecloudstorage.domain.templates.ComposeObjectTemplate;
-import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate;
-import org.jclouds.googlecloudstorage.options.InsertObjectOptions;
-import org.jclouds.io.Payload;
-import org.jclouds.io.PayloadSlicer;
-
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
-
-public final class SequentialMultipartUploadStrategy extends MultipartUploadStrategy {
-
-   private final GoogleCloudStorageApi api;
-   private final Provider<BlobBuilder> blobBuilders;
-   private final BlobMetadataToObjectTemplate blob2ObjectTemplate;
-   private final MultipartUploadSlicingAlgorithm algorithm;
-   private final PayloadSlicer slicer;
-   private final MultipartNamingStrategy namingStrategy;
-
-   @Inject SequentialMultipartUploadStrategy(GoogleCloudStorageApi api, Provider<BlobBuilder> blobBuilders,
-            BlobMetadataToObjectTemplate blob2ObjectTemplate, MultipartUploadSlicingAlgorithm algorithm,
-            PayloadSlicer slicer, MultipartNamingStrategy namingStrategy) {
-      this.api = api;
-      this.blobBuilders = blobBuilders;
-      this.blob2ObjectTemplate = blob2ObjectTemplate;
-      this.algorithm = algorithm;
-      this.slicer = slicer;
-      this.namingStrategy = namingStrategy;
-   }
-
-   @Override
-   public String execute(String container, Blob blob) {
-
-      ObjectTemplate destination = blob2ObjectTemplate.apply(blob.getMetadata());
-
-      List<GoogleCloudStorageObject> sourceList = Lists.newArrayList();
-
-      String key = blob.getMetadata().getName();
-      Payload payload = blob.getPayload();
-      Long length = payload.getContentMetadata().getContentLength();
-      if (length == null) {
-         length = blob.getMetadata().getContentMetadata().getContentLength();
-         payload.getContentMetadata().setContentLength(length);
-      }
-      checkNotNull(length,
-               "please invoke payload.getContentMetadata().setContentLength(length) prior to multipart upload");
-      long chunkSize = algorithm.calculateChunkSize(length);
-      int partCount = algorithm.getParts();
-      if (partCount > 0) {
-         for (Payload part : slicer.slice(payload, chunkSize)) {
-            int partNum = algorithm.getNextPart();
-            String partName = namingStrategy.getPartName(key, partNum, partCount);
-            long partSize = ((partCount + 1) == partNum) ? algorithm.getRemaining() : algorithm.getChunkSize();
-
-            InsertObjectOptions insertOptions = new InsertObjectOptions().name(partName);
-
-            GoogleCloudStorageObject object = api.getObjectApi().simpleUpload(container,
-                     blob.getMetadata().getContentMetadata().getContentType(), partSize, part, insertOptions);
-
-            sourceList.add(object);
-         }
-         ComposeObjectTemplate template = ComposeObjectTemplate.builder().fromGoogleCloudStorageObject(sourceList)
-               .destination(destination).build();
-
-         return api.getObjectApi().composeObjects(container, key, template).etag();
-      } else {
-         return api.getObjectApi()
-                  .multipartUpload(container, blob2ObjectTemplate.apply(blob.getMetadata()), blob.getPayload())
-                  .etag();
-      }
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2e1e109a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
index 783bb07..162c45a 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
@@ -38,7 +38,6 @@ import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.integration.internal.BaseBlobIntegrationTest;
 import org.jclouds.blobstore.options.PutOptions;
 import org.jclouds.googlecloud.internal.TestProperties;
-import org.jclouds.googlecloudstorage.blobstore.strategy.internal.MultipartUpload;
 import org.jclouds.io.Payloads;
 import org.jclouds.io.payloads.ByteSourcePayload;
 import org.jclouds.utils.TestUtils;
@@ -57,7 +56,7 @@ import com.google.common.io.Files;
 @Test(groups = { "live", "blobstorelive" })
 public class GoogleCloudStorageBlobIntegrationLiveTest extends BaseBlobIntegrationTest {
 
-   private long PART_SIZE = MultipartUpload.MIN_PART_SIZE;
+   private long PART_SIZE = 5L * 1024L * 1024L;
 
    @Override
    protected long getMinimumMultipartBlobSize() {
@@ -94,27 +93,6 @@ public class GoogleCloudStorageBlobIntegrationLiveTest extends BaseBlobIntegrati
    }
 
    @Override
-   @Test(groups = { "integration", "live" })
-   public void testMultipartUploadSinglePart() throws SkipException {
-      throw new SkipException("Implement MultipartUploads uploads");
-      // TODO: Implement MultipartUploads uploads
-   }
-
-   @Override
-   @Test(groups = { "integration", "live" })
-   public void testMultipartUploadMultipleParts() throws SkipException {
-      throw new SkipException("Implement MultipartUploads uploads");
-      // TODO: Implement MultipartUploads uploads
-   }
-
-   @Override
-   @Test(groups = { "integration", "live" })
-   public void testMultipartUploadNoPartsAbort() throws SkipException {
-      throw new SkipException("Implement MultipartUploads uploads");
-      // TODO: Implement MultipartUploads uploads
-   }
-
-   @Override
    @Test(groups = { "integration", "live" }, dataProvider = "gcsPutTest")
    public void testPutObject(String name, String type, Object content, Object realObject) throws InterruptedException,
             IOException {


[44/50] jclouds git commit: Next development version 2.1.0-SNAPSHOT

Posted by ga...@apache.org.
Next development version 2.1.0-SNAPSHOT


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

Branch: refs/heads/master
Commit: f4a2be0519f11c4d582b574582fcb0505e622dfc
Parents: 214a5e7
Author: Ignasi Barrera <na...@apache.org>
Authored: Tue Nov 15 01:13:00 2016 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Tue Nov 15 01:13:00 2016 +0100

----------------------------------------------------------------------
 providers/google-cloud-storage/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/f4a2be05/providers/google-cloud-storage/pom.xml
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/pom.xml b/providers/google-cloud-storage/pom.xml
index a4351bc..6332b9e 100644
--- a/providers/google-cloud-storage/pom.xml
+++ b/providers/google-cloud-storage/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.jclouds.labs</groupId>
         <artifactId>jclouds-labs-google</artifactId>
-        <version>2.0.0</version>
+        <version>2.1.0-SNAPSHOT</version>
     </parent>
 
     <!-- TODO: when out of labs, switch to org.jclouds.provider -->


[18/50] jclouds git commit: JCLOUDS-929: Plumb delimiter and prefix to GCS.

Posted by ga...@apache.org.
JCLOUDS-929: Plumb delimiter and prefix to GCS.


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

Branch: refs/heads/master
Commit: 834b3d5d2f1a2b80f611532c5262fedefc50be1a
Parents: efdc715
Author: Timur Alperovich <ti...@gmail.com>
Authored: Thu Aug 20 15:29:41 2015 -0700
Committer: Timur Alperovich <ti...@gmail.com>
Committed: Thu Aug 20 17:55:48 2015 -0700

----------------------------------------------------------------------
 ...ListContainerOptionsToListObjectOptions.java | 11 ++++++-
 .../functions/ObjectListToStorageMetadata.java  | 30 ++++++++------------
 ...loudStorageContainerIntegrationLiveTest.java | 10 -------
 3 files changed, 22 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/834b3d5d/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java
index 581e9ce..15b5f4f 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java
@@ -26,18 +26,27 @@ import com.google.common.base.Function;
 public class BlobStoreListContainerOptionsToListObjectOptions implements
          Function<ListContainerOptions, ListObjectOptions> {
    public ListObjectOptions apply(ListContainerOptions from) {
+      if (from.getDir() != null && (from.getPrefix() != null || from.getDelimiter() != null)) {
+         throw new IllegalArgumentException("Cannot pass both directory and prefix/delimiter");
+      }
       checkNotNull(from, "set options to instance NONE instead of passing null");
       ListObjectOptions httpOptions = new ListObjectOptions();
 
-      if (!from.isRecursive()) {
+      if (!from.isRecursive() && from.getDelimiter() == null) {
          httpOptions = httpOptions.delimiter("/");
       }
+      if (from.getDelimiter() != null) {
+         httpOptions = httpOptions.delimiter(from.getDelimiter());
+      }
       if (from.getDir() != null) {
          String path = from.getDir();
          if (!path.endsWith("/"))
             path += "/";
          httpOptions = httpOptions.prefix(path);
       }
+      if (from.getPrefix() != null) {
+         httpOptions.prefix(from.getPrefix());
+      }
       if (from.getMarker() != null) {
          httpOptions = httpOptions.pageToken(from.getMarker());
       }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/834b3d5d/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
index 22f00da..4f7f1d0 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
@@ -16,22 +16,22 @@
  */
 package org.jclouds.googlecloudstorage.blobstore.functions;
 
-import java.util.Map;
+import java.util.SortedSet;
 
 import javax.inject.Inject;
 
-import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.MutableStorageMetadata;
 import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.domain.StorageType;
+import org.jclouds.blobstore.domain.internal.MutableStorageMetadataImpl;
 import org.jclouds.blobstore.domain.internal.PageSetImpl;
-import org.jclouds.blobstore.domain.internal.StorageMetadataImpl;
 import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
 import org.jclouds.googlecloudstorage.domain.ListPageWithPrefixes;
 
 import com.google.common.base.Function;
-import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
 
 public class ObjectListToStorageMetadata
       implements Function<ListPageWithPrefixes<GoogleCloudStorageObject>, PageSet<? extends StorageMetadata>> {
@@ -46,19 +46,13 @@ public class ObjectListToStorageMetadata
          from = ListPageWithPrefixes.create(null, null, null);
       }
 
-      return new PageSetImpl<StorageMetadata>(Iterables.transform(Iterables.transform(from, object2blobMd),
-               new Function<BlobMetadata, StorageMetadata>() {
-                  public StorageMetadata apply(BlobMetadata input) {
-                     Map<String, String> userMetaData = (input != null && input.getUserMetadata() != null) ? input
-                              .getUserMetadata() : ImmutableMap.<String, String> of();
-                     if (input.getContentMetadata().getContentType().equals("application/directory")) {
-                        return new StorageMetadataImpl(StorageType.RELATIVE_PATH, input.getProviderId(), input
-                                 .getName(), input.getLocation(), input.getUri(), input.getETag(), input
-                                 .getCreationDate(), input.getLastModified(), userMetaData,
-                                 input.getSize());
-                     }
-                     return input;
-                  }
-               }), from.nextPageToken());
+      SortedSet<StorageMetadata> results = Sets.<StorageMetadata> newTreeSet(Iterables.transform(from, object2blobMd));
+      for (String prefix : from.prefixes()) {
+          MutableStorageMetadata metadata = new MutableStorageMetadataImpl();
+          metadata.setType(StorageType.RELATIVE_PATH);
+          metadata.setName(prefix);
+          results.add(metadata);
+      }
+      return new PageSetImpl<StorageMetadata>(results, from.nextPageToken());
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/834b3d5d/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
index d4f5fb8..c129ae8 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
@@ -105,14 +105,4 @@ public class GoogleCloudStorageContainerIntegrationLiveTest extends BaseContaine
    public void testListMarkerAfterLastKey() throws Exception {
       throw new SkipException("cannot specify arbitrary markers");
    }
-
-   @Override
-   public void testContainerListWithPrefix() {
-      throw new SkipException("Prefix option has not been plumbed down to GCS");
-   }
-
-   @Override
-   public void testDelimiterList() {
-      throw new SkipException("Prefix option has not been plumbed down to GCS");
-   }
 }


[31/50] jclouds git commit: Depend on OAuth test jar for tests

Posted by ga...@apache.org.
Depend on OAuth test jar for tests


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

Branch: refs/heads/master
Commit: a780cdad59a8329d511cb07267c4db03a7a5d73d
Parents: 28f10f9
Author: Ignasi Barrera <na...@apache.org>
Authored: Thu Apr 7 11:56:45 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Thu Apr 7 11:56:45 2016 +0200

----------------------------------------------------------------------
 providers/google-cloud-storage/pom.xml                        | 7 +++++++
 .../internal/BaseGoogleCloudStorageExpectTest.java            | 3 ++-
 2 files changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/a780cdad/providers/google-cloud-storage/pom.xml
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/pom.xml b/providers/google-cloud-storage/pom.xml
index 98b38ce..aaa9ae5 100644
--- a/providers/google-cloud-storage/pom.xml
+++ b/providers/google-cloud-storage/pom.xml
@@ -65,6 +65,13 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.jclouds.api</groupId>
+            <artifactId>oauth</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.jclouds</groupId>
             <artifactId>jclouds-blobstore</artifactId>
             <version>${jclouds.version}</version>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a780cdad/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/internal/BaseGoogleCloudStorageExpectTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/internal/BaseGoogleCloudStorageExpectTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/internal/BaseGoogleCloudStorageExpectTest.java
index d7c0daa..4246512 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/internal/BaseGoogleCloudStorageExpectTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/internal/BaseGoogleCloudStorageExpectTest.java
@@ -51,6 +51,7 @@ import org.jclouds.http.HttpResponse;
 import org.jclouds.io.Payload;
 import org.jclouds.io.payloads.ByteSourcePayload;
 import org.jclouds.oauth.v2.filters.JWTBearerTokenFlow;
+import org.jclouds.oauth.v2.filters.TestJWTBearerTokenFlow;
 import org.jclouds.providers.ProviderMetadata;
 import org.jclouds.rest.internal.BaseRestApiExpectTest;
 
@@ -91,7 +92,7 @@ public class BaseGoogleCloudStorageExpectTest<T> extends BaseRestApiExpectTest<T
          @Override
          public void configure(Binder binder) {
             // Predictable time
-            binder.bind(JWTBearerTokenFlow.class).to(JWTBearerTokenFlow.TestJWTBearerTokenFlow.class);
+            binder.bind(JWTBearerTokenFlow.class).to(TestJWTBearerTokenFlow.class);
             try {
                KeyFactory keyfactory = KeyFactory.getInstance("RSA");
                PrivateKey privateKey = keyfactory.generatePrivate(privateKeySpec(ByteSource.wrap(PRIVATE_KEY


[50/50] jclouds git commit: JCLOUDS-944: Promote Google Cloud Storage to core

Posted by ga...@apache.org.
JCLOUDS-944: Promote Google Cloud Storage to core


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

Branch: refs/heads/master
Commit: 9ea76ebe4b9e843829e39e3f2d09bb1fb3a3b963
Parents: 6efc894
Author: Andrew Gaul <an...@gaul.org>
Authored: Sat May 6 19:35:44 2017 -0700
Committer: Andrew Gaul <an...@gaul.org>
Committed: Sat May 6 19:35:44 2017 -0700

----------------------------------------------------------------------
 allblobstore/pom.xml                   |  5 +++++
 providers/google-cloud-storage/pom.xml | 18 +++++++++---------
 providers/pom.xml                      |  1 +
 3 files changed, 15 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/9ea76ebe/allblobstore/pom.xml
----------------------------------------------------------------------
diff --git a/allblobstore/pom.xml b/allblobstore/pom.xml
index 63127b4..d457b94 100644
--- a/allblobstore/pom.xml
+++ b/allblobstore/pom.xml
@@ -49,6 +49,11 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.jclouds.provider</groupId>
+      <artifactId>google-cloud-storage</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.jclouds.api</groupId>
       <artifactId>openstack-swift</artifactId>
       <version>${project.version}</version>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9ea76ebe/providers/google-cloud-storage/pom.xml
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/pom.xml b/providers/google-cloud-storage/pom.xml
index 6332b9e..f452e28 100644
--- a/providers/google-cloud-storage/pom.xml
+++ b/providers/google-cloud-storage/pom.xml
@@ -21,13 +21,13 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
-        <groupId>org.apache.jclouds.labs</groupId>
-        <artifactId>jclouds-labs-google</artifactId>
+        <groupId>org.apache.jclouds</groupId>
+        <artifactId>jclouds-project</artifactId>
         <version>2.1.0-SNAPSHOT</version>
+        <relativePath>../../project/pom.xml</relativePath>
     </parent>
 
-    <!-- TODO: when out of labs, switch to org.jclouds.provider -->
-    <groupId>org.apache.jclouds.labs</groupId>
+    <groupId>org.apache.jclouds.provider</groupId>
     <artifactId>google-cloud-storage</artifactId>
     <name>jclouds Google Cloud Storage provider</name>
     <description>jclouds components to access Google Cloud Storage</description>
@@ -49,7 +49,7 @@
         <dependency>
             <groupId>org.apache.jclouds</groupId>
             <artifactId>jclouds-core</artifactId>
-            <version>${jclouds.version}</version>
+            <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.jclouds.common</groupId>
@@ -74,7 +74,7 @@
         <dependency>
             <groupId>org.apache.jclouds</groupId>
             <artifactId>jclouds-blobstore</artifactId>
-            <version>${jclouds.version}</version>
+            <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>com.google.auto.service</groupId>
@@ -89,21 +89,21 @@
         <dependency>
             <groupId>org.apache.jclouds</groupId>
             <artifactId>jclouds-blobstore</artifactId>
-            <version>${jclouds.version}</version>
+            <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.jclouds</groupId>
             <artifactId>jclouds-core</artifactId>
-            <version>${jclouds.version}</version>
+            <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.jclouds.driver</groupId>
             <artifactId>jclouds-slf4j</artifactId>
-            <version>${jclouds.version}</version>
+            <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9ea76ebe/providers/pom.xml
----------------------------------------------------------------------
diff --git a/providers/pom.xml b/providers/pom.xml
index 0739624..afd6beb 100644
--- a/providers/pom.xml
+++ b/providers/pom.xml
@@ -52,6 +52,7 @@
     <module>serverlove-z1-man</module>
     <module>skalicloud-sdg-my</module>
     <module>go2cloud-jhb1</module>
+    <module>google-cloud-storage</module>
     <module>google-compute-engine</module>
     <module>softlayer</module>
     <module>rackspace-cloudfiles-us</module>


[09/50] jclouds git commit: Update ObjectApi and getBlob, fix testGetRangeOutOfRange

Posted by ga...@apache.org.
Update ObjectApi and getBlob, fix testGetRangeOutOfRange


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

Branch: refs/heads/master
Commit: c0190dd03e56e66a7f1987ce05d81eb0c03f6c6c
Parents: bb62abf
Author: Daniel Broudy <br...@google.com>
Authored: Tue Jun 9 12:52:00 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jun 12 16:11:53 2015 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java              | 9 +++++++--
 .../org/jclouds/googlecloudstorage/features/ObjectApi.java  | 5 +++--
 .../googlecloudstorage/options/GetObjectOptions.java        | 4 ++--
 .../googlecloudstorage/features/ObjectApiMockTest.java      | 4 +++-
 4 files changed, 15 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/c0190dd0/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 4ccc8f2..7fd3643 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -39,6 +39,7 @@ import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.domain.internal.BlobImpl;
 import org.jclouds.blobstore.domain.internal.PageSetImpl;
+import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
 import org.jclouds.blobstore.internal.BaseBlobStore;
 import org.jclouds.blobstore.options.CreateContainerOptions;
 import org.jclouds.blobstore.options.GetOptions;
@@ -91,6 +92,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    private final BlobStoreListContainerOptionsToListObjectOptions listContainerOptionsToListObjectOptions;
    private final Provider<MultipartUploadStrategy> multipartUploadStrategy;
    private final Supplier<String> projectId;
+   private final BlobToHttpGetOptions blob2ObjectGetOptions;
 
    @Inject GoogleCloudStorageBlobStore(BlobStoreContext context, BlobUtils blobUtils, Supplier<Location> defaultLocation,
             @Memoized Supplier<Set<? extends Location>> locations, PayloadSlicer slicer, GoogleCloudStorageApi api,
@@ -99,7 +101,8 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
             Provider<FetchBlobMetadata> fetchBlobMetadataProvider,
             BlobMetadataToObjectTemplate blobMetadataToObjectTemplate,
             BlobStoreListContainerOptionsToListObjectOptions listContainerOptionsToListObjectOptions,
-            Provider<MultipartUploadStrategy> multipartUploadStrategy, @CurrentProject Supplier<String> projectId) {
+            Provider<MultipartUploadStrategy> multipartUploadStrategy, @CurrentProject Supplier<String> projectId,
+            BlobToHttpGetOptions blob2ObjectGetOptions) {
       super(context, blobUtils, defaultLocation, locations, slicer);
       this.api = api;
       this.bucketToStorageMetadata = bucketToStorageMetadata;
@@ -110,6 +113,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
       this.listContainerOptionsToListObjectOptions = listContainerOptionsToListObjectOptions;
       this.projectId = projectId;
       this.multipartUploadStrategy = multipartUploadStrategy;
+      this.blob2ObjectGetOptions = checkNotNull(blob2ObjectGetOptions, "blob2ObjectGetOptions");
    }
 
    @Override
@@ -250,10 +254,11 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
       if (gcsObject == null) {
          return null;
       }
+      org.jclouds.http.options.GetOptions httpOptions = blob2ObjectGetOptions.apply(options);
       MutableBlobMetadata metadata = objectToBlobMetadata.apply(gcsObject);
       Blob blob = new BlobImpl(metadata);
       // TODO: Does getObject not get the payload?!
-      Payload payload = api.getObjectApi().download(container, name).getPayload();
+      Payload payload = api.getObjectApi().download(container, name, httpOptions).getPayload();
       payload.setContentMetadata(metadata.getContentMetadata()); // Doing this first retains it on setPayload.
       blob.setPayload(payload);
       return blob;

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c0190dd0/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
index 29bbd57..119aece 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
@@ -45,6 +45,7 @@ import org.jclouds.googlecloudstorage.options.InsertObjectOptions;
 import org.jclouds.googlecloudstorage.options.ListObjectOptions;
 import org.jclouds.googlecloudstorage.options.UpdateObjectOptions;
 import org.jclouds.googlecloudstorage.parser.ParseToPayloadEnclosing;
+import org.jclouds.http.options.HttpRequestOptions;
 import org.jclouds.io.Payload;
 import org.jclouds.io.PayloadEnclosing;
 import org.jclouds.javax.annotation.Nullable;
@@ -123,7 +124,7 @@ public interface ObjectApi {
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable
    GoogleCloudStorageObject getObject(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
-            GetObjectOptions options);
+         HttpRequestOptions options);
 
    /**
     * Retrieve an object or their metadata
@@ -163,7 +164,7 @@ public interface ObjectApi {
    @ResponseParser(ParseToPayloadEnclosing.class)
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable PayloadEnclosing download(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
-            GetObjectOptions options);
+         HttpRequestOptions options);
 
    /**
     * Stores a new object. Object metadata setting is not supported with simple uploads

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c0190dd0/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/GetObjectOptions.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/GetObjectOptions.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/GetObjectOptions.java
index a4446e6..2d307bc 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/GetObjectOptions.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/GetObjectOptions.java
@@ -19,12 +19,12 @@ package org.jclouds.googlecloudstorage.options;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Projection;
-import org.jclouds.http.options.BaseHttpRequestOptions;
+import org.jclouds.http.options.GetOptions;
 
 /**
  * Allows to optionally specify generation,ifGenerationMatch,ifGenerationNotMatch, ifMetagenerationMatch,ifMetagenerationNotMatch and projection which used in Bucket
  */
-public class GetObjectOptions extends BaseHttpRequestOptions {
+public class GetObjectOptions extends GetOptions {
 
    public GetObjectOptions ifGenerationMatch(Long ifGenerationMatch) {
       this.queryParameters.put("ifGenerationMatch", checkNotNull(ifGenerationMatch, "ifGenerationMatch") + "");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c0190dd0/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
index d95b078..af224d4 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
@@ -81,10 +81,12 @@ public class ObjectApiMockTest extends BaseGoogleCloudStorageApiMockTest {
       server.enqueue(jsonResponse("/object_get.json"));
 
       GetObjectOptions options = new GetObjectOptions().ifGenerationMatch((long) 1000);
+      options.range(0, 1023);
 
       assertEquals(objectApi().getObject("test", "file_name", options),
             new ParseGoogleCloudStorageObject().expected());
-      assertSent(server, "GET", "/storage/v1/b/test/o/file_name?ifGenerationMatch=1000");
+      RecordedRequest request = assertSent(server, "GET", "/storage/v1/b/test/o/file_name?ifGenerationMatch=1000");
+      assertEquals(request.getHeader("Range"), "bytes=0-1023");
    }
 
    public void simpleUpload() throws Exception {


[30/50] jclouds git commit: Use correct payload length in GCS test

Posted by ga...@apache.org.
Use correct payload length in GCS test

This avoids MWS unexpected end of stream errors.  Regression from
b9322c583d6aa0cae91d2c5724dfa528a0168385.


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

Branch: refs/heads/master
Commit: 28f10f90b8019619ccb7eb97318b791dce4f745d
Parents: 2499cb0
Author: Andrew Gaul <ga...@apache.org>
Authored: Wed Mar 23 19:32:51 2016 -0400
Committer: Andrew Gaul <ga...@apache.org>
Committed: Wed Mar 23 19:35:41 2016 -0400

----------------------------------------------------------------------
 .../org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/28f10f90/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
index 35e9827..863581b 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java
@@ -265,7 +265,7 @@ public class ObjectApiMockTest extends BaseGoogleCloudStorageApiMockTest {
       String testPayload = "this is a test payload for upload!";
       p.setPayload(testPayload.getBytes());
 
-      ObjectTemplate template = new ObjectTemplate().name("file_name").size((long) 1000).crc32c("crc32c").contentType(MediaType.ANY_TEXT_TYPE);
+      ObjectTemplate template = new ObjectTemplate().name("file_name").size((long) testPayload.length()).crc32c("crc32c").contentType(MediaType.ANY_TEXT_TYPE);
 
       assertEquals(objectApi().multipartUpload("bucket_name", template, p.getPayload()),
             new ParseGoogleCloudStorageObject().expected());


[43/50] jclouds git commit: Apache jclouds 2.0.0-rc3 release

Posted by ga...@apache.org.
Apache jclouds 2.0.0-rc3 release


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

Branch: refs/heads/master
Commit: 214a5e781085bda22bbcc19634cd23ae5bd4d209
Parents: a600a12
Author: Ignasi Barrera <na...@apache.org>
Authored: Wed Nov 9 22:48:47 2016 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Nov 9 22:48:47 2016 +0100

----------------------------------------------------------------------
 providers/google-cloud-storage/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/214a5e78/providers/google-cloud-storage/pom.xml
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/pom.xml b/providers/google-cloud-storage/pom.xml
index aaa9ae5..a4351bc 100644
--- a/providers/google-cloud-storage/pom.xml
+++ b/providers/google-cloud-storage/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.jclouds.labs</groupId>
         <artifactId>jclouds-labs-google</artifactId>
-        <version>2.0.0-SNAPSHOT</version>
+        <version>2.0.0</version>
     </parent>
 
     <!-- TODO: when out of labs, switch to org.jclouds.provider -->


[07/50] jclouds git commit: Allow GCS object nullable owner

Posted by ga...@apache.org.
Allow GCS object nullable owner

This addresses a NullPointerException seen while listing a bucket:

{statusCode=200, message=OK, headers={X-Frame-Options=[SAMEORIGIN], Server=[GSE], Cache-Control=[private, max-age=0, must-revalidate, no-transform], X-Content-Type-Options=[nosniff], Vary=[X-Origin, Origin], X-XSS-Protection=[1; mode=block], Date=[Fri, 29 May 2015 21:43:51 GMT], Alternate-Protocol=[443:quic,p=1]}, payload=[content=true, contentMetadata=[contentDisposition=null, contentEncoding=null, contentLanguage=null, contentLength=760, contentMD5=null, contentType=application/json; charset=UTF-8, expires=Fri May 29 14:43:51 PDT 2015], written=false]}


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

Branch: refs/heads/master
Commit: fb4c65141ef13f1c199078cf866875d0854750f3
Parents: 3d9258f
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri May 29 14:45:13 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Sun Jun 7 22:05:44 2015 -0700

----------------------------------------------------------------------
 .../googlecloudstorage/domain/GoogleCloudStorageObject.java        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/fb4c6514/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GoogleCloudStorageObject.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GoogleCloudStorageObject.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GoogleCloudStorageObject.java
index f8bd84b..d639710 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GoogleCloudStorageObject.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GoogleCloudStorageObject.java
@@ -59,7 +59,7 @@ public abstract class GoogleCloudStorageObject {
    @Nullable public abstract String contentLanguage();
    @Nullable public abstract String cacheControl();
    public abstract List<ObjectAccessControls> acl();
-   public abstract Owner owner();
+   @Nullable public abstract Owner owner();
    @Nullable public abstract String crc32c();
    @Nullable public abstract Integer componentCount();
 


[48/50] jclouds git commit: JCLOUDS-902: Google Cloud Storage signed URLs

Posted by ga...@apache.org.
JCLOUDS-902: Google Cloud Storage signed URLs


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

Branch: refs/heads/master
Commit: b671d2c0d262d418060016752c631e4128e9c80a
Parents: a1af4f7
Author: Andrew Gaul <ga...@apache.org>
Authored: Wed Apr 19 19:36:41 2017 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Apr 20 01:14:07 2017 -0700

----------------------------------------------------------------------
 .../GoogleCloudStorageBlobRequestSigner.java    | 153 +++++++++++++++++++
 ...oogleCloudStorageBlobStoreContextModule.java |  11 ++
 .../domain/GoogleCloudStorageObject.java        |   2 +-
 .../GoogleCloudStorageErrorHandler.java         |   5 +
 .../GoogleCloudStorageBlobSignerLiveTest.java   |  66 --------
 5 files changed, 170 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/b671d2c0/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobRequestSigner.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobRequestSigner.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobRequestSigner.java
new file mode 100644
index 0000000..390ada1
--- /dev/null
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobRequestSigner.java
@@ -0,0 +1,153 @@
+/*
+ * 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.googlecloudstorage.blobstore;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.net.URI;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Signature;
+import java.security.SignatureException;
+
+import javax.annotation.Resource;
+import javax.inject.Provider;
+
+import org.jclouds.Constants;
+import org.jclouds.blobstore.BlobRequestSigner;
+import org.jclouds.blobstore.domain.Blob;
+import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
+import org.jclouds.date.TimeStamp;
+import org.jclouds.domain.Credentials;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpUtils;
+import org.jclouds.http.Uris;
+import org.jclouds.http.options.GetOptions;
+import org.jclouds.logging.Logger;
+import org.jclouds.oauth.v2.config.Authorization;
+
+import com.google.common.base.Charsets;
+import com.google.common.base.Strings;
+import com.google.common.base.Supplier;
+import com.google.common.io.BaseEncoding;
+import com.google.common.net.HttpHeaders;
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+
+public final class GoogleCloudStorageBlobRequestSigner implements BlobRequestSigner {
+   private static final int DEFAULT_EXPIRY_SECONDS = 15 * 60;
+   private static final URI STORAGE_URL = URI.create("http://storage.googleapis.com/");
+
+   private final Supplier<Credentials> creds;
+   private final Supplier<PrivateKey> privateKey;
+   private final Provider<Long> timestamp;
+   private final HttpUtils utils;
+
+   private final BlobToHttpGetOptions toGetOptions = new BlobToHttpGetOptions();
+
+   @Resource
+   @Named(Constants.LOGGER_SIGNATURE)
+   protected Logger signatureLog = Logger.NULL;
+
+   @Inject
+   protected GoogleCloudStorageBlobRequestSigner(@org.jclouds.location.Provider Supplier<Credentials> creds,
+         @Authorization Supplier<PrivateKey> privateKey, @TimeStamp Provider<Long> timestamp, HttpUtils utils) {
+      this.creds = creds;
+      this.privateKey = privateKey;
+      this.timestamp = timestamp;
+      this.utils = utils;
+   }
+
+   @Override
+   public HttpRequest signGetBlob(String container, String name) {
+      return signGetBlob(container, name, DEFAULT_EXPIRY_SECONDS);
+   }
+
+   @Override
+   public HttpRequest signGetBlob(String container, String name, long timeInSeconds) {
+      return sign("GET", container, name, GetOptions.NONE, timestamp.get() + timeInSeconds, null);
+   }
+
+   @Override
+   public HttpRequest signGetBlob(String container, String name, org.jclouds.blobstore.options.GetOptions options) {
+      return sign("GET", container, name, toGetOptions.apply(options), timestamp.get() + DEFAULT_EXPIRY_SECONDS, null);
+   }
+
+   @Override
+   public HttpRequest signPutBlob(String container, Blob blob) {
+      return signPutBlob(container, blob, DEFAULT_EXPIRY_SECONDS);
+   }
+
+   @Override
+   public HttpRequest signPutBlob(String container, Blob blob, long timeInSeconds) {
+      return sign("PUT", container, blob.getMetadata().getName(), GetOptions.NONE, timestamp.get() + timeInSeconds, null);
+   }
+
+   @Deprecated
+   @Override
+   public HttpRequest signRemoveBlob(String container, String name) {
+      throw new UnsupportedOperationException();
+   }
+
+   private HttpRequest sign(String method, String container, String name, GetOptions options, long expires, String contentType) {
+      checkNotNull(container, "container");
+      checkNotNull(name, "name");
+
+      HttpRequest.Builder request = HttpRequest.builder()
+            .method(method)
+            .endpoint(Uris.uriBuilder(STORAGE_URL).appendPath(container).appendPath(name).build());
+      if (contentType != null) {
+         request.replaceHeader(HttpHeaders.CONTENT_TYPE, contentType);
+      }
+
+      String stringToSign = createStringToSign(request.build(), expires);
+      byte[] rawSignature;
+      try {
+         Signature signer = Signature.getInstance("SHA256withRSA");
+         signer.initSign(privateKey.get());
+         signer.update(stringToSign.getBytes(Charsets.UTF_8));
+         rawSignature = signer.sign();
+      } catch (InvalidKeyException ike) {
+         throw new RuntimeException(ike);
+      } catch (NoSuchAlgorithmException nsae) {
+         throw new RuntimeException(nsae);
+      } catch (SignatureException se) {
+         throw new RuntimeException(se);
+      }
+      String signature = BaseEncoding.base64().encode(rawSignature);
+
+      return (HttpRequest) request
+            .addQueryParam("Expires", String.valueOf(expires))
+            .addQueryParam("GoogleAccessId", creds.get().identity)
+            .addQueryParam("Signature", signature)
+            .headers(options.buildRequestHeaders())
+            .build();
+   }
+
+   private String createStringToSign(HttpRequest request, long expires) {
+      utils.logRequest(signatureLog, request, ">>");
+      StringBuilder buffer = new StringBuilder();
+      buffer.append(request.getMethod()).append("\n");
+      buffer.append(Strings.nullToEmpty(request.getFirstHeaderOrNull(HttpHeaders.CONTENT_MD5))).append("\n");
+      buffer.append(Strings.nullToEmpty(request.getFirstHeaderOrNull(HttpHeaders.CONTENT_TYPE))).append("\n");
+      buffer.append(String.valueOf(expires)).append("\n");
+      // TODO: extension headers
+      buffer.append(request.getEndpoint().getPath());
+      return buffer.toString();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b671d2c0/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/config/GoogleCloudStorageBlobStoreContextModule.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/config/GoogleCloudStorageBlobStoreContextModule.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/config/GoogleCloudStorageBlobStoreContextModule.java
index 3d2bcd7..1392d3f 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/config/GoogleCloudStorageBlobStoreContextModule.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/config/GoogleCloudStorageBlobStoreContextModule.java
@@ -16,11 +16,15 @@
  */
 package org.jclouds.googlecloudstorage.blobstore.config;
 
+import org.jclouds.blobstore.BlobRequestSigner;
 import org.jclouds.blobstore.BlobStore;
 import org.jclouds.blobstore.attr.ConsistencyModel;
+import org.jclouds.date.TimeStamp;
+import org.jclouds.googlecloudstorage.blobstore.GoogleCloudStorageBlobRequestSigner;
 import org.jclouds.googlecloudstorage.blobstore.GoogleCloudStorageBlobStore;
 
 import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
 import com.google.inject.Scopes;
 
 public class GoogleCloudStorageBlobStoreContextModule extends AbstractModule {
@@ -29,5 +33,12 @@ public class GoogleCloudStorageBlobStoreContextModule extends AbstractModule {
    protected void configure() {
       bind(ConsistencyModel.class).toInstance(ConsistencyModel.EVENTUAL);
       bind(BlobStore.class).to(GoogleCloudStorageBlobStore.class).in(Scopes.SINGLETON);
+      bind(BlobRequestSigner.class).to(GoogleCloudStorageBlobRequestSigner.class);
+   }
+
+   @Provides
+   @TimeStamp
+   protected final Long unixEpochTimestamp() {
+      return System.currentTimeMillis() / 1000;
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b671d2c0/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GoogleCloudStorageObject.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GoogleCloudStorageObject.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GoogleCloudStorageObject.java
index d639710..ce48e4f 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GoogleCloudStorageObject.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GoogleCloudStorageObject.java
@@ -46,7 +46,7 @@ public abstract class GoogleCloudStorageObject {
    public abstract String bucket();
    public abstract long generation();
    public abstract long metageneration();
-   public abstract String contentType();
+   @Nullable public abstract String contentType();
    public abstract Date updated();
    @Nullable public abstract Date timeDeleted();
    public abstract StorageClass storageClass();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b671d2c0/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/handlers/GoogleCloudStorageErrorHandler.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/handlers/GoogleCloudStorageErrorHandler.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/handlers/GoogleCloudStorageErrorHandler.java
index 9c6840e..d330146 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/handlers/GoogleCloudStorageErrorHandler.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/handlers/GoogleCloudStorageErrorHandler.java
@@ -48,6 +48,11 @@ public class GoogleCloudStorageErrorHandler implements HttpErrorHandler {
       switch (response.getStatusCode()) {
          case 308:
             return;
+         case 400:
+            if (message.indexOf("<Code>ExpiredToken</Code>") != -1) {
+               exception = new AuthorizationException(message, exception);
+            }
+            break;
          case 401:
          case 403:
             exception = new AuthorizationException(message, exception);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/b671d2c0/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobSignerLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobSignerLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobSignerLiveTest.java
index 7e7dd52..2f76490 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobSignerLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobSignerLiveTest.java
@@ -16,8 +16,6 @@
  */
 package org.jclouds.googlecloudstorage.blobstore.integration;
 
-import java.io.IOException;
-
 import org.jclouds.blobstore.integration.internal.BaseBlobSignerLiveTest;
 import org.testng.SkipException;
 import org.testng.annotations.Test;
@@ -28,70 +26,6 @@ public class GoogleCloudStorageBlobSignerLiveTest extends BaseBlobSignerLiveTest
       provider = "google-cloud-storage";
    }
 
-   @Test
-   public void testSignGetUrl() throws Exception {
-      try {
-         super.testSignGetUrl();
-      } catch (UnsupportedOperationException uoe) {
-         throw new SkipException("not yet implemented in GCS", uoe);
-      }
-   }
-
-   @Test
-   public void testSignGetUrlOptions() throws Exception {
-      try {
-         super.testSignGetUrlOptions();
-      } catch (UnsupportedOperationException uoe) {
-         throw new SkipException("not yet implemented in GCS", uoe);
-      }
-   }
-
-   @Test
-   public void testSignGetUrlWithTime() throws InterruptedException, IOException {
-      try {
-         super.testSignGetUrlWithTime();
-      } catch (UnsupportedOperationException uoe) {
-         throw new SkipException("not yet implemented in GCS", uoe);
-      }
-   }
-
-   @Test
-   public void testSignGetUrlWithTimeExpired() throws InterruptedException, IOException {
-      try {
-         super.testSignGetUrlWithTimeExpired();
-      } catch (UnsupportedOperationException uoe) {
-         throw new SkipException("not yet implemented in GCS", uoe);
-      }
-   }
-
-   @Test
-   public void testSignPutUrl() throws Exception {
-      try {
-         super.testSignPutUrl();
-      } catch (UnsupportedOperationException uoe) {
-         throw new SkipException("not yet implemented in GCS", uoe);
-      }
-   }
-
-   @Test
-   public void testSignPutUrlWithTime() throws Exception {
-      try {
-         super.testSignPutUrlWithTime();
-      } catch (UnsupportedOperationException uoe) {
-         throw new SkipException("not yet implemented in GCS", uoe);
-      }
-   }
-
-   @Test
-   public void testSignPutUrlWithTimeExpired() throws Exception {
-      try {
-         super.testSignPutUrlWithTimeExpired();
-      } catch (UnsupportedOperationException uoe) {
-         throw new SkipException("not yet implemented in GCS", uoe);
-      }
-   }
-
-   @Test
    public void testSignRemoveUrl() throws Exception {
       try {
          super.testSignRemoveUrl();


[02/50] jclouds git commit: JCLOUDS-894: Expose GCS multipart operations

Posted by ga...@apache.org.
JCLOUDS-894: Expose GCS multipart operations

Not yet implemented


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

Branch: refs/heads/master
Commit: 119d2f487fe41d3966f61a8da53d52b3c03b7e16
Parents: 8431670
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri May 1 13:23:28 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri May 1 13:30:27 2015 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java  | 43 ++++++++++++++++++++
 1 file changed, 43 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/119d2f48/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index dcc1d5a..80a3c83 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -22,6 +22,7 @@ import static org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Obj
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.util.List;
 import java.util.Set;
 
 import javax.inject.Inject;
@@ -31,6 +32,8 @@ import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.domain.BlobAccess;
 import org.jclouds.blobstore.domain.BlobMetadata;
 import org.jclouds.blobstore.domain.ContainerAccess;
+import org.jclouds.blobstore.domain.MultipartPart;
+import org.jclouds.blobstore.domain.MultipartUpload;
 import org.jclouds.blobstore.domain.MutableBlobMetadata;
 import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
@@ -348,4 +351,44 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
 
       return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName, template).etag();
    }
+
+   @Override
+   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) {
+      throw new UnsupportedOperationException("not yet implemented");
+   }
+
+   @Override
+   public void abortMultipartUpload(MultipartUpload mpu) {
+      throw new UnsupportedOperationException("not yet implemented");
+   }
+
+   @Override
+   public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) {
+      throw new UnsupportedOperationException("not yet implemented");
+   }
+
+   @Override
+   public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) {
+      throw new UnsupportedOperationException("not yet implemented");
+   }
+
+   @Override
+   public List<MultipartPart> listMultipartUpload(MultipartUpload mpu) {
+      throw new UnsupportedOperationException("not yet implemented");
+   }
+
+   @Override
+   public long getMinimumMultipartPartSize() {
+      throw new UnsupportedOperationException("not yet implemented");
+   }
+
+   @Override
+   public long getMaximumMultipartPartSize() {
+      throw new UnsupportedOperationException("not yet implemented");
+   }
+
+   @Override
+   public int getMaximumNumberOfParts() {
+      throw new UnsupportedOperationException("not yet implemented");
+   }
 }


[03/50] jclouds git commit: Name test buckets jclouds instead of jcloud

Posted by ga...@apache.org.
Name test buckets jclouds instead of jcloud


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

Branch: refs/heads/master
Commit: 9d3a7bdd4dbdb5b06f50662ceb9728bbd67562e9
Parents: 119d2f4
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri May 29 13:44:51 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri May 29 14:07:40 2015 -0700

----------------------------------------------------------------------
 .../BucketAccessControlsApiExpectTest.java      | 18 ++++++++--------
 .../features/BucketApiExpectTest.java           |  4 ++--
 .../features/BucketApiLiveTest.java             |  2 +-
 ...efaultObjectAccessControlsApiExpectTest.java | 18 ++++++++--------
 .../DefaultObjectAccessControlsApiLiveTest.java |  2 +-
 .../ObjectAccessControlsApiExpectTest.java      | 22 ++++++++++----------
 .../features/ObjectApiLiveTest.java             |  2 +-
 .../parse/BucketAclGetTest.java                 |  4 ++--
 .../parse/BucketAclInsertTest.java              |  4 ++--
 .../parse/BucketAclListTest.java                |  8 +++----
 .../parse/BucketAclUpdateTest.java              |  4 ++--
 .../parse/FullBucketGetTest.java                |  8 +++----
 .../parse/ObjectAclGetTest.java                 |  4 ++--
 .../parse/ObjectAclInsertTest.java              |  2 +-
 .../parse/ObjectAclListTest.java                |  4 ++--
 .../parse/ObjectAclUpdateTest.java              |  2 +-
 .../src/test/resources/bucket_acl_get.json      |  6 +++---
 .../resources/bucket_acl_insert_response.json   |  6 +++---
 .../src/test/resources/bucket_acl_list.json     | 12 +++++------
 .../resources/bucket_acl_update_response.json   |  6 +++---
 .../src/test/resources/full_bucket_get.json     | 12 +++++------
 .../resources/list_bucket_with_options.json     |  8 +++----
 .../src/test/resources/object_acl_get.json      |  6 +++---
 .../resources/object_acl_insert_response.json   |  4 ++--
 .../src/test/resources/object_acl_list.json     |  6 +++---
 .../resources/object_acl_update_initial.json    |  4 ++--
 .../resources/object_acl_update_response.json   |  4 ++--
 27 files changed, 91 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiExpectTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiExpectTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiExpectTest.java
index ab6484f..79f96f6 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiExpectTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiExpectTest.java
@@ -36,10 +36,10 @@ import org.testng.annotations.Test;
 @Test(groups = "unit", testName = "BucketAccessControlsApiExpectTest")
 public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApiExpectTest {
 
-   private static final String EXPECTED_TEST_BUCKET = "jcloudtestbucket";
+   private static final String EXPECTED_TEST_BUCKET = "jcloudstestbucket";
 
    public static final HttpRequest GET_BUCKETACL_REQUEST = HttpRequest.builder().method("GET")
-            .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers")
+            .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/acl/allUsers")
             .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
    private final HttpResponse GET_BUCKETACL_RESPONSE = HttpResponse.builder().statusCode(200)
@@ -49,7 +49,7 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
             .payload(staticPayloadFromResource("/bucket_acl_insert_response.json")).build();
 
    private final HttpRequest LIST_BUCKETACL_REQUEST = HttpRequest.builder().method("GET")
-            .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/acl")
+            .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/acl")
             .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
    private final HttpResponse LIST_BUCKETACL_RESPONSE = HttpResponse.builder().statusCode(200)
@@ -91,7 +91,7 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
       BucketAccessControlsApi api = requestsSendResponses(requestForScopes(STORAGE_FULLCONTROL_SCOPE), TOKEN_RESPONSE,
                LIST_BUCKETACL_REQUEST, listResponse).getBucketAccessControlsApi();
 
-      assertNull(api.listBucketAccessControls("jcloudtestbucket"));
+      assertNull(api.listBucketAccessControls("jcloudstestbucket"));
    }
 
    // Test insertBucketAccessControls
@@ -99,7 +99,7 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
       HttpRequest insertRequest = HttpRequest
                .builder()
                .method("POST")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/acl")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/acl")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .payload(payloadFromResourceWithContentType("/bucket_acl_insert_initial.json",
@@ -116,7 +116,7 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
    // Test deleteBucketAccessControls
    public void testDeleteBucketAclResponseIs2xx() throws Exception {
       HttpRequest delete = HttpRequest.builder().method("DELETE")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allAuthenticatedUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/acl/allAuthenticatedUsers")
                .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
       HttpResponse deleteResponse = HttpResponse.builder().statusCode(204).build();
@@ -129,7 +129,7 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
 
    public void testDeleteBucketAclResponseIs4xx() throws Exception {
       HttpRequest delete = HttpRequest.builder().method("DELETE")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allAuthenticatedUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/acl/allAuthenticatedUsers")
                .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
       HttpResponse deleteResponse = HttpResponse.builder().statusCode(404).build();
@@ -145,7 +145,7 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
       HttpRequest update = HttpRequest
                .builder()
                .method("PUT")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/acl/allUsers")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .payload(payloadFromResourceWithContentType("/bucket_acl_update_initial.json",
@@ -168,7 +168,7 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
       HttpRequest patchRequest = HttpRequest
                .builder()
                .method("PATCH")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/acl/allUsers")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .payload(payloadFromResourceWithContentType("/bucket_acl_update_initial.json",

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiExpectTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiExpectTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiExpectTest.java
index 4970b19..5c42617 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiExpectTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiExpectTest.java
@@ -61,7 +61,7 @@ public class BucketApiExpectTest extends BaseGoogleCloudStorageApiExpectTest {
 
    public static final HttpRequest LIST_BUCKET_REQUEST_WITHOPTIONS = HttpRequest.builder().method("GET")
             .endpoint("https://www.googleapis.com/storage/v1/b").addQueryParam("project", EXPECTED_TEST_PROJECT_NUMBER)
-            .addQueryParam("maxResults", "2").addQueryParam("pageToken", "jcloudtestbucket500")
+            .addQueryParam("maxResults", "2").addQueryParam("pageToken", "jcloudstestbucket500")
             .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
    private final HttpResponse LIST_BUCKET_RESPONSE = HttpResponse.builder().statusCode(200)
@@ -112,7 +112,7 @@ public class BucketApiExpectTest extends BaseGoogleCloudStorageApiExpectTest {
       BucketApi api = requestsSendResponses(requestForScopes(STORAGE_READONLY_SCOPE), TOKEN_RESPONSE,
                LIST_BUCKET_REQUEST_WITHOPTIONS, LIST_BUCKET_RESPONSE).getBucketApi();
 
-      ListOptions options = new ListOptions().maxResults(2).pageToken("jcloudtestbucket500");
+      ListOptions options = new ListOptions().maxResults(2).pageToken("jcloudstestbucket500");
 
       assertEquals(api.listBucket(EXPECTED_TEST_PROJECT_NUMBER, options), new NoAclBucketListTest().expected());
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
index 762e7f2..9c81aa5 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
@@ -60,7 +60,7 @@ public class BucketApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
 
    private static final String BUCKET_NAME_NEARLINE = "jcloudstestbucketnearline" + (int) (Math.random() * 10000);
 
-   private static final String BUCKET_NAME_WITHOPTIONS = "jcloudtestbucketoptions" + (int) (Math.random() * 10000);
+   private static final String BUCKET_NAME_WITHOPTIONS = "jcloudstestbucketoptions" + (int) (Math.random() * 10000);
 
    private static final String LOG_BUCKET_NAME = "jcloudslogbucket" + (int) (Math.random() * 10000);
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiExpectTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiExpectTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiExpectTest.java
index acc7093..42804be 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiExpectTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiExpectTest.java
@@ -36,14 +36,14 @@ import org.testng.annotations.Test;
 @Test(groups = "unit", testName = "DefaultObjectAccessControlsApiExpectTest")
 public class DefaultObjectAccessControlsApiExpectTest extends BaseGoogleCloudStorageApiExpectTest {
 
-   private static final String EXPECTED_TEST_BUCKET = "jcloudtestbucket";
+   private static final String EXPECTED_TEST_BUCKET = "jcloudstestbucket";
    private static final String EXPECTED_TEST_GROUP_ENTITY = "group-00b4903a971ec6cff233284d6d24f5bf5cba904c4ade4d43ebd6a5d33800e68b";
 
    private static final HttpRequest GET_DEFAULT_OBJECT_ACL_REQUEST = HttpRequest
             .builder()
             .method("GET")
             .endpoint(
-                     "https://www.googleapis.com/storage/v1/b/jcloudtestbucket/defaultObjectAcl/group-00b4903a971ec6cff233284d6d24f5bf5cba904c4ade4d43ebd6a5d33800e68b")
+                     "https://www.googleapis.com/storage/v1/b/jcloudstestbucket/defaultObjectAcl/group-00b4903a971ec6cff233284d6d24f5bf5cba904c4ade4d43ebd6a5d33800e68b")
             .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
    private final HttpResponse GET_DEFAULT_OBJECT_ACL_RESPONSE = HttpResponse.builder().statusCode(200)
@@ -53,7 +53,7 @@ public class DefaultObjectAccessControlsApiExpectTest extends BaseGoogleCloudSto
             .payload(staticPayloadFromResource("/default_object_acl_insert_response.json")).build();
 
    public  final HttpRequest LIST_DEFAULT_OBJECT_ACL_REQUEST = HttpRequest.builder().method("GET")
-            .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/defaultObjectAcl")
+            .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/defaultObjectAcl")
             .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
    private final HttpResponse LIST_DEFAULT_OBJECT_ACL_RESPONSE = HttpResponse.builder().statusCode(200)
@@ -105,7 +105,7 @@ public class DefaultObjectAccessControlsApiExpectTest extends BaseGoogleCloudSto
       HttpRequest insertRequest = HttpRequest
                .builder()
                .method("POST")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/defaultObjectAcl")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/defaultObjectAcl")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .payload(payloadFromResourceWithContentType("/default_object_acl_insert_request_payload.json",
@@ -123,7 +123,7 @@ public class DefaultObjectAccessControlsApiExpectTest extends BaseGoogleCloudSto
    // Test deleteDefaultObjectAccessControls
    public void testDeleteDefaultObjectAclResponseIs2xx() throws Exception {
       HttpRequest delete = HttpRequest.builder().method("DELETE")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/defaultObjectAcl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/defaultObjectAcl/allUsers")
                .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
       HttpResponse deleteResponse = HttpResponse.builder().statusCode(204).build();
@@ -136,7 +136,7 @@ public class DefaultObjectAccessControlsApiExpectTest extends BaseGoogleCloudSto
 
    public void testDeleteObjectAclResponseIs4xx() throws Exception {
       HttpRequest delete = HttpRequest.builder().method("DELETE")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/defaultObjectAcl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/defaultObjectAcl/allUsers")
                .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
       HttpResponse deleteResponse = HttpResponse.builder().statusCode(404).build();
@@ -152,7 +152,7 @@ public class DefaultObjectAccessControlsApiExpectTest extends BaseGoogleCloudSto
       HttpRequest update = HttpRequest
                .builder()
                .method("PUT")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/defaultObjectAcl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/defaultObjectAcl/allUsers")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .payload(payloadFromResourceWithContentType("/default_object_acl_update_request_payload.json",
@@ -175,7 +175,7 @@ public class DefaultObjectAccessControlsApiExpectTest extends BaseGoogleCloudSto
       HttpRequest update = HttpRequest
                .builder()
                .method("PUT")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/defaultObjectAcl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/defaultObjectAcl/allUsers")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .addQueryParam("role", ObjectRole.OWNER.toString())
@@ -199,7 +199,7 @@ public class DefaultObjectAccessControlsApiExpectTest extends BaseGoogleCloudSto
       HttpRequest update = HttpRequest
                .builder()
                .method("PATCH")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/defaultObjectAcl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/defaultObjectAcl/allUsers")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .payload(payloadFromResourceWithContentType("/default_object_acl_update_request_payload.json",

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiLiveTest.java
index d15391e..55c45bf 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/DefaultObjectAccessControlsApiLiveTest.java
@@ -32,7 +32,7 @@ import org.testng.annotations.Test;
 
 public class DefaultObjectAccessControlsApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
 
-   protected static final String BUCKET_NAME = "jcloudtestbucketdefaultoacl" + UUID.randomUUID();
+   protected static final String BUCKET_NAME = "jcloudstestbucketdefaultoacl" + UUID.randomUUID();
 
    private DefaultObjectAccessControlsApi api() {
       return api.getDefaultObjectAccessControlsApi();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectAccessControlsApiExpectTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectAccessControlsApiExpectTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectAccessControlsApiExpectTest.java
index 2a6e5cf..abf6010 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectAccessControlsApiExpectTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectAccessControlsApiExpectTest.java
@@ -36,7 +36,7 @@ import org.testng.annotations.Test;
 @Test(groups = "unit", testName = "ObjectAccessControlsApiExpectTest")
 public class ObjectAccessControlsApiExpectTest extends BaseGoogleCloudStorageApiExpectTest {
 
-   private static final String EXPECTED_TEST_BUCKET = "jcloudtestbucket";
+   private static final String EXPECTED_TEST_BUCKET = "jcloudstestbucket";
    private static final String EXPECTED_TEST_OBJECT = "foo.txt";
    private static final String EXPECTED_TEST_GROUP_ENTITY = "group-00b4903a971ec6cff233284d6d24f5bf5cba904c4ade4d43ebd6a5d33800e68b";
    private static final String EXPECTED_TEST_USER_ENTITY = "user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d";
@@ -45,14 +45,14 @@ public class ObjectAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
             .builder()
             .method("GET")
             .endpoint(
-                     "https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/group-00b4903a971ec6cff233284d6d24f5bf5cba904c4ade4d43ebd6a5d33800e68b")
+                     "https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/group-00b4903a971ec6cff233284d6d24f5bf5cba904c4ade4d43ebd6a5d33800e68b")
             .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
    public static final HttpRequest GET_OBJECT_ACL_REQUEST_WITHOPTIONS = HttpRequest
             .builder()
             .method("GET")
             .endpoint(
-                     "https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/group-00b4903a971ec6cff233284d6d24f5bf5cba904c4ade4d43ebd6a5d33800e68b")
+                     "https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/group-00b4903a971ec6cff233284d6d24f5bf5cba904c4ade4d43ebd6a5d33800e68b")
             .addQueryParam("generation", "100").addHeader("Accept", "application/json")
             .addHeader("Authorization", "Bearer " + TOKEN).build();
 
@@ -63,11 +63,11 @@ public class ObjectAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
             .payload(staticPayloadFromResource("/object_acl_insert_response.json")).build();
 
    public final HttpRequest LIST_OBJECT_ACL_REQUEST = HttpRequest.builder().method("GET")
-            .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl")
+            .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl")
             .addHeader("Accept", "application/json").addHeader("Authorization", "Bearer " + TOKEN).build();
 
    public final HttpRequest LIST_OBJECT_ACL_REQUEST_WITHOPTIONS = HttpRequest.builder().method("GET")
-            .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl")
+            .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl")
             .addQueryParam("generation", "100").addHeader("Accept", "application/json")
             .addHeader("Authorization", "Bearer " + TOKEN).build();
 
@@ -141,7 +141,7 @@ public class ObjectAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
       HttpRequest insertRequest = HttpRequest
                .builder()
                .method("POST")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .payload(payloadFromResourceWithContentType("/object_acl_insert_request_payload.json",
@@ -161,7 +161,7 @@ public class ObjectAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
       HttpRequest insertRequest = HttpRequest
                .builder()
                .method("POST")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .addQueryParam("generation", "100")
@@ -185,7 +185,7 @@ public class ObjectAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
       HttpRequest update = HttpRequest
                .builder()
                .method("PUT")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/allUsers")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .payload(payloadFromResourceWithContentType("/object_acl_request_payload.json",
@@ -207,7 +207,7 @@ public class ObjectAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
       HttpRequest update = HttpRequest
                .builder()
                .method("PUT")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/allUsers")
                .addQueryParam("generation", "100")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
@@ -232,7 +232,7 @@ public class ObjectAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
       HttpRequest patchRequest = HttpRequest
                .builder()
                .method("PATCH")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/allUsers")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
                .payload(payloadFromResourceWithContentType("/object_acl_request_payload.json",
@@ -254,7 +254,7 @@ public class ObjectAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
       HttpRequest patchRequest = HttpRequest
                .builder()
                .method("PATCH")
-               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/allUsers")
+               .endpoint("https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/allUsers")
                .addQueryParam("generation", "100")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
index aa35d22..a5728f8 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java
@@ -68,7 +68,7 @@ import com.google.common.primitives.Bytes;
 public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
 
    private static final String BUCKET_NAME = "jcloudsobjectoperations" + UUID.randomUUID();
-   private static final String BUCKET_NAME2 = "jcloudobjectdestination" + UUID.randomUUID();
+   private static final String BUCKET_NAME2 = "jcloudsobjectdestination" + UUID.randomUUID();
    private static final String UPLOAD_OBJECT_NAME = "objectOperation.txt";
    private static final String UPLOAD_OBJECT_NAME2 = "jcloudslogo.jpg";
    private static final String MULTIPART_UPLOAD_OBJECT = "multipart_related.jpg";

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclGetTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclGetTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclGetTest.java
index 21494f0..4544128 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclGetTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclGetTest.java
@@ -33,7 +33,7 @@ public class BucketAclGetTest extends BaseGoogleCloudStorageParseTest<BucketAcce
    @Override
    @Consumes(MediaType.APPLICATION_JSON)
    public BucketAccessControls expected() {
-      return BucketAccessControls.builder().bucket("jcloudtestbucket").entity("allUsers").role(Role.READER)
-               .id("jcloudtestbucket/allUsers").build();
+      return BucketAccessControls.builder().bucket("jcloudstestbucket").entity("allUsers").role(Role.READER)
+               .id("jcloudstestbucket/allUsers").build();
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclInsertTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclInsertTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclInsertTest.java
index b38ce42..d7cac85 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclInsertTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclInsertTest.java
@@ -35,8 +35,8 @@ public class BucketAclInsertTest extends BaseGoogleCloudStorageParseTest<BucketA
    public BucketAccessControls expected() {
       return BucketAccessControls
                .builder()
-               .id("jcloudtestbucket/allAuthenticatedUsers")
-               .bucket("jcloudtestbucket").entity("allAuthenticatedUsers").role(Role.WRITER).build();
+               .id("jcloudstestbucket/allAuthenticatedUsers")
+               .bucket("jcloudstestbucket").entity("allAuthenticatedUsers").role(Role.WRITER).build();
 
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclListTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclListTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclListTest.java
index 077eb46..3f6a0d4 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclListTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclListTest.java
@@ -32,14 +32,14 @@ import com.google.common.collect.ImmutableList;
 
 public class BucketAclListTest extends BaseGoogleCloudStorageParseTest<List<BucketAccessControls>> {
 
-   private BucketAccessControls item_1 = BucketAccessControls.builder().id("jcloudtestbucket/allUsers")
-            .bucket("jcloudtestbucket").entity("allUsers").role(Role.READER).build();
+   private BucketAccessControls item_1 = BucketAccessControls.builder().id("jcloudstestbucket/allUsers")
+            .bucket("jcloudstestbucket").entity("allUsers").role(Role.READER).build();
 
    private BucketAccessControls item_2 = BucketAccessControls
             .builder()
-            .id("jcloudtestbucket/project-owners-1082289308625")
+            .id("jcloudstestbucket/project-owners-1082289308625")
             .projectTeam(ProjectTeam.create("1082289308625", Team.OWNERS))
-            .bucket("jcloudtestbucket").entity("project-owners-1082289308625").role(Role.OWNER).build();
+            .bucket("jcloudstestbucket").entity("project-owners-1082289308625").role(Role.OWNER).build();
 
    @Override
    public String resource() {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclUpdateTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclUpdateTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclUpdateTest.java
index bfba5e1..b3548f2 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclUpdateTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketAclUpdateTest.java
@@ -33,7 +33,7 @@ public class BucketAclUpdateTest extends BaseGoogleCloudStorageParseTest<BucketA
    @Override
    @Consumes(MediaType.APPLICATION_JSON)
    public BucketAccessControls expected() {
-      return BucketAccessControls.builder().id("jcloudtestbucket/allUsers")
-               .bucket("jcloudtestbucket").entity("allUsers").role(Role.OWNER).build();
+      return BucketAccessControls.builder().id("jcloudstestbucket/allUsers")
+               .bucket("jcloudstestbucket").entity("allUsers").role(Role.OWNER).build();
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java
index 3f2759b..60ef7fd 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java
@@ -39,8 +39,8 @@ public class FullBucketGetTest extends BaseGoogleCloudStorageParseTest<Bucket> {
 
    private final BucketAccessControls acl1 = BucketAccessControls
             .builder()
-            .id("jcloudtestbucket3500/project-owners-1082289308625")
-            .bucket("jcloudtestbucket3500").entity("project-owners-1082289308625").role(Role.OWNER)
+            .id("jcloudstestbucket3500/project-owners-1082289308625")
+            .bucket("jcloudstestbucket3500").entity("project-owners-1082289308625").role(Role.OWNER)
             .projectTeam(ProjectTeam.create("1082289308625", Team.OWNERS))
             .build();
 
@@ -60,8 +60,8 @@ public class FullBucketGetTest extends BaseGoogleCloudStorageParseTest<Bucket> {
    @Consumes(MediaType.APPLICATION_JSON)
    public Bucket expected() {
       return Bucket.create(
-            "jcloudtestbucket3500", // id
-            "jcloudtestbucket3500", // name
+            "jcloudstestbucket3500", // id
+            "jcloudstestbucket3500", // name
             1082289308625l, // projectNumber
             new SimpleDateFormatDateService().iso8601DateParse("2014-06-19T14:03:22.345Z"), // timeCreated
             10l, // metageneration

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclGetTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclGetTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclGetTest.java
index d50c284..0cef68e 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclGetTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclGetTest.java
@@ -37,13 +37,13 @@ public class ObjectAclGetTest extends BaseGoogleCloudStorageParseTest<ObjectAcce
    public ObjectAccessControls expected() {
       return ObjectAccessControls
                .builder()
-               .bucket("jcloudtestbucket")
+               .bucket("jcloudstestbucket")
                .object("foo.txt")
                .generation(1394121608485000L)
                .entity("project-owners-1082289308625")
                .role(ObjectRole.OWNER)
                .projectTeam(ProjectTeam.create("1082289308625", Team.OWNERS))
-               .id("jcloudtestbucket/foo.txt/1394121608485000/project-owners-1082289308625").build();
+               .id("jcloudstestbucket/foo.txt/1394121608485000/project-owners-1082289308625").build();
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclInsertTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclInsertTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclInsertTest.java
index 595687b..b4ccfa2 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclInsertTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclInsertTest.java
@@ -35,7 +35,7 @@ public class ObjectAclInsertTest extends BaseGoogleCloudStorageParseTest<ObjectA
    public ObjectAccessControls expected() {
       return ObjectAccessControls
                .builder()
-               .bucket("jcloudtestbucket").object("foo.txt")
+               .bucket("jcloudstestbucket").object("foo.txt")
                .entity("user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d")
                .entityId("00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d").role(ObjectRole.OWNER)
                .build();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclListTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclListTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclListTest.java
index 7e7c4ed..426da0d 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclListTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclListTest.java
@@ -31,8 +31,8 @@ public class ObjectAclListTest extends BaseGoogleCloudStorageParseTest<List<Obje
 
    private ObjectAccessControls item1 = ObjectAccessControls
             .builder()
-            .id("jcloudtestbucket/foo.txt/1394121608485000/user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d")
-            .bucket("jcloudtestbucket").object("foo.txt").generation(Long.valueOf("1394121608485000"))
+            .id("jcloudstestbucket/foo.txt/1394121608485000/user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d")
+            .bucket("jcloudstestbucket").object("foo.txt").generation(Long.valueOf("1394121608485000"))
             .entity("user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d")
             .entityId("00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d").role(ObjectRole.OWNER)
             .build();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclUpdateTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclUpdateTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclUpdateTest.java
index 5b5cd60..205622e 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclUpdateTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ObjectAclUpdateTest.java
@@ -34,7 +34,7 @@ public class ObjectAclUpdateTest extends BaseGoogleCloudStorageParseTest<ObjectA
    @Consumes(MediaType.APPLICATION_JSON)
    public ObjectAccessControls expected() {
       return ObjectAccessControls.builder()
-               .bucket("jcloudtestbucket").object("foo.txt").entity("allUsers").role(ObjectRole.OWNER).build();
+               .bucket("jcloudstestbucket").object("foo.txt").entity("allUsers").role(ObjectRole.OWNER).build();
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/bucket_acl_get.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/bucket_acl_get.json b/providers/google-cloud-storage/src/test/resources/bucket_acl_get.json
index 1df3d84..27f3d3f 100644
--- a/providers/google-cloud-storage/src/test/resources/bucket_acl_get.json
+++ b/providers/google-cloud-storage/src/test/resources/bucket_acl_get.json
@@ -1,8 +1,8 @@
 {
    "kind": "storage#bucketAccessControl",
-   "id": "jcloudtestbucket/allUsers",
-   "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers",
-   "bucket": "jcloudtestbucket",
+   "id": "jcloudstestbucket/allUsers",
+   "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudstestbucket/acl/allUsers",
+   "bucket": "jcloudstestbucket",
    "entity": "allUsers",
    "role": "READER",
    "etag": "CAM="

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/bucket_acl_insert_response.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/bucket_acl_insert_response.json b/providers/google-cloud-storage/src/test/resources/bucket_acl_insert_response.json
index f03dae2..144aa32 100644
--- a/providers/google-cloud-storage/src/test/resources/bucket_acl_insert_response.json
+++ b/providers/google-cloud-storage/src/test/resources/bucket_acl_insert_response.json
@@ -1,8 +1,8 @@
 {
    "kind": "storage#bucketAccessControl",
-   "id": "jcloudtestbucket/allAuthenticatedUsers",
-   "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allAuthenticatedUsers",
-   "bucket": "jcloudtestbucket",
+   "id": "jcloudstestbucket/allAuthenticatedUsers",
+   "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudstestbucket/acl/allAuthenticatedUsers",
+   "bucket": "jcloudstestbucket",
    "entity": "allAuthenticatedUsers",
    "role": "WRITER",
    "etag": "CAQ="

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/bucket_acl_list.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/bucket_acl_list.json b/providers/google-cloud-storage/src/test/resources/bucket_acl_list.json
index e0ed5a4..dd8ca03 100644
--- a/providers/google-cloud-storage/src/test/resources/bucket_acl_list.json
+++ b/providers/google-cloud-storage/src/test/resources/bucket_acl_list.json
@@ -3,18 +3,18 @@
    "items": [
      {
        "kind": "storage#bucketAccessControl",
-       "id": "jcloudtestbucket/allUsers",
-       "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers",
-       "bucket": "jcloudtestbucket",
+       "id": "jcloudstestbucket/allUsers",
+       "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudstestbucket/acl/allUsers",
+       "bucket": "jcloudstestbucket",
        "entity": "allUsers",
        "role": "READER",
        "etag": "CAc="
     },
     {
        "kind": "storage#bucketAccessControl",
-       "id": "jcloudtestbucket/project-owners-1082289308625",
-       "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudtestbucket/acl/project-owners-1082289308625",
-       "bucket": "jcloudtestbucket",
+       "id": "jcloudstestbucket/project-owners-1082289308625",
+       "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudstestbucket/acl/project-owners-1082289308625",
+       "bucket": "jcloudstestbucket",
        "entity": "project-owners-1082289308625",
        "role": "OWNER",
        "projectTeam": {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/bucket_acl_update_response.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/bucket_acl_update_response.json b/providers/google-cloud-storage/src/test/resources/bucket_acl_update_response.json
index f16f7a4..5859e13 100644
--- a/providers/google-cloud-storage/src/test/resources/bucket_acl_update_response.json
+++ b/providers/google-cloud-storage/src/test/resources/bucket_acl_update_response.json
@@ -1,8 +1,8 @@
 {
    "kind": "storage#bucketAccessControl",
-   "id": "jcloudtestbucket/allUsers",
-   "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers",
-   "bucket": "jcloudtestbucket",
+   "id": "jcloudstestbucket/allUsers",
+   "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudstestbucket/acl/allUsers",
+   "bucket": "jcloudstestbucket",
    "entity": "allUsers",
    "role": "OWNER",
    "etag": "CAg="

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/full_bucket_get.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/full_bucket_get.json b/providers/google-cloud-storage/src/test/resources/full_bucket_get.json
index 3cea72e..42e2cf4 100644
--- a/providers/google-cloud-storage/src/test/resources/full_bucket_get.json
+++ b/providers/google-cloud-storage/src/test/resources/full_bucket_get.json
@@ -1,17 +1,17 @@
 {
    "kind": "storage#bucket",
-   "id": "jcloudtestbucket3500",
-   "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudtestbucket3500",
+   "id": "jcloudstestbucket3500",
+   "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudstestbucket3500",
    "projectNumber": "1082289308625",
-   "name": "jcloudtestbucket3500",
+   "name": "jcloudstestbucket3500",
    "timeCreated": "2014-06-19T14:03:22.345Z",
    "metageneration": "10",
    "acl": [
      {
         "kind": "storage#bucketAccessControl",
-        "id": "jcloudtestbucket3500/project-owners-1082289308625",
-        "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudtestbucket3500/acl/project-owners-1082289308625",
-        "bucket": "jcloudtestbucket3500",
+        "id": "jcloudstestbucket3500/project-owners-1082289308625",
+        "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudstestbucket3500/acl/project-owners-1082289308625",
+        "bucket": "jcloudstestbucket3500",
         "entity": "project-owners-1082289308625",
         "role": "OWNER",
         "projectTeam": {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/list_bucket_with_options.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/list_bucket_with_options.json b/providers/google-cloud-storage/src/test/resources/list_bucket_with_options.json
index bceb735..ad28c1b 100644
--- a/providers/google-cloud-storage/src/test/resources/list_bucket_with_options.json
+++ b/providers/google-cloud-storage/src/test/resources/list_bucket_with_options.json
@@ -1,13 +1,13 @@
 {
    "kind": "storage#buckets",
-   "nextPageToken": "jcloudtestbucket500",
+   "nextPageToken": "jcloudstestbucket500",
    "items": [
       {
          "kind": "storage#bucket",
-         "id": "jcloudtestbucket500",
-         "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudtestbucket500",
+         "id": "jcloudstestbucket500",
+         "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudstestbucket500",
          "projectNumber": "1082289308625",
-         "name": "jcloudtestbucket500",
+         "name": "jcloudstestbucket500",
          "timeCreated": "2014-06-17T14:17:50.155Z",
          "metageneration": "1",
          "owner": {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/object_acl_get.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/object_acl_get.json b/providers/google-cloud-storage/src/test/resources/object_acl_get.json
index dd2417d..6b09d42 100644
--- a/providers/google-cloud-storage/src/test/resources/object_acl_get.json
+++ b/providers/google-cloud-storage/src/test/resources/object_acl_get.json
@@ -1,8 +1,8 @@
 {
    "kind": "storage#objectAccessControl",
-   "id": "jcloudtestbucket/foo.txt/1394121608485000/project-owners-1082289308625",
-   "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/project-owners-1082289308625",
-   "bucket": "jcloudtestbucket",
+   "id": "jcloudstestbucket/foo.txt/1394121608485000/project-owners-1082289308625",
+   "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/project-owners-1082289308625",
+   "bucket": "jcloudstestbucket",
    "object": "foo.txt",
    "generation": "1394121608485000",
    "entity": "project-owners-1082289308625",

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/object_acl_insert_response.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/object_acl_insert_response.json b/providers/google-cloud-storage/src/test/resources/object_acl_insert_response.json
index 1a477b8..4197a6c 100644
--- a/providers/google-cloud-storage/src/test/resources/object_acl_insert_response.json
+++ b/providers/google-cloud-storage/src/test/resources/object_acl_insert_response.json
@@ -1,7 +1,7 @@
 {
    "kind": "storage#objectAccessControl",
-   "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d",
-   "bucket": "jcloudtestbucket",
+   "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d",
+   "bucket": "jcloudstestbucket",
    "object": "foo.txt",
    "entity": "user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d",
    "role": "OWNER",

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/object_acl_list.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/object_acl_list.json b/providers/google-cloud-storage/src/test/resources/object_acl_list.json
index 9a7a677..dd8883a 100644
--- a/providers/google-cloud-storage/src/test/resources/object_acl_list.json
+++ b/providers/google-cloud-storage/src/test/resources/object_acl_list.json
@@ -3,9 +3,9 @@
    "items": [
       {
        "kind": "storage#objectAccessControl",
-       "id": "jcloudtestbucket/foo.txt/1394121608485000/user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d",
-       "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d",
-       "bucket": "jcloudtestbucket",
+       "id": "jcloudstestbucket/foo.txt/1394121608485000/user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d",
+       "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d",
+       "bucket": "jcloudstestbucket",
        "object": "foo.txt",
        "generation": "1394121608485000",
        "entity": "user-00b4903a97adfde729f0650133a7379693099d8d85d6b1b18255ca70bf89e31d",

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/object_acl_update_initial.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/object_acl_update_initial.json b/providers/google-cloud-storage/src/test/resources/object_acl_update_initial.json
index c3ee980..b888ed4 100644
--- a/providers/google-cloud-storage/src/test/resources/object_acl_update_initial.json
+++ b/providers/google-cloud-storage/src/test/resources/object_acl_update_initial.json
@@ -1,7 +1,7 @@
 {
    "kind": "storage#objectAccessControl",
-   "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/allUsers",
-   "bucket": "jcloudtestbucket",
+   "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/allUsers",
+   "bucket": "jcloudstestbucket",
    "object": "foo.txt",
    "entity": "allUsers",
    "role": "OWNER",

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9d3a7bdd/providers/google-cloud-storage/src/test/resources/object_acl_update_response.json
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/resources/object_acl_update_response.json b/providers/google-cloud-storage/src/test/resources/object_acl_update_response.json
index c3ee980..b888ed4 100644
--- a/providers/google-cloud-storage/src/test/resources/object_acl_update_response.json
+++ b/providers/google-cloud-storage/src/test/resources/object_acl_update_response.json
@@ -1,7 +1,7 @@
 {
    "kind": "storage#objectAccessControl",
-   "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudtestbucket/o/foo.txt/acl/allUsers",
-   "bucket": "jcloudtestbucket",
+   "selfLink": "https://www.googleapis.com/storage/v1/b/jcloudstestbucket/o/foo.txt/acl/allUsers",
+   "bucket": "jcloudstestbucket",
    "object": "foo.txt",
    "entity": "allUsers",
    "role": "OWNER",


[05/50] jclouds git commit: JCLOUDS-894: Disable MultipartUploads tests

Posted by ga...@apache.org.
JCLOUDS-894: Disable MultipartUploads tests


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

Branch: refs/heads/master
Commit: 2585624d44c531acb8a73877b0de16f07be026ed
Parents: ff2d150
Author: Daniel Broudy <br...@google.com>
Authored: Fri May 29 16:36:08 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Mon Jun 1 15:52:53 2015 -0700

----------------------------------------------------------------------
 ...ogleCloudStorageBlobIntegrationLiveTest.java | 21 ++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/2585624d/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
index c878e52..783bb07 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
@@ -94,15 +94,24 @@ public class GoogleCloudStorageBlobIntegrationLiveTest extends BaseBlobIntegrati
    }
 
    @Override
-   @Test(enabled = false)
-   public void testFileGetParallel() throws SkipException {
-      // Implement Parallel uploads
+   @Test(groups = { "integration", "live" })
+   public void testMultipartUploadSinglePart() throws SkipException {
+      throw new SkipException("Implement MultipartUploads uploads");
+      // TODO: Implement MultipartUploads uploads
    }
 
    @Override
-   @Test(enabled = false)
-   public void testPutFileParallel() throws SkipException {
-      // Implement Parallel uploads
+   @Test(groups = { "integration", "live" })
+   public void testMultipartUploadMultipleParts() throws SkipException {
+      throw new SkipException("Implement MultipartUploads uploads");
+      // TODO: Implement MultipartUploads uploads
+   }
+
+   @Override
+   @Test(groups = { "integration", "live" })
+   public void testMultipartUploadNoPartsAbort() throws SkipException {
+      throw new SkipException("Implement MultipartUploads uploads");
+      // TODO: Implement MultipartUploads uploads
    }
 
    @Override


[04/50] jclouds git commit: Remove bucket litter during integration tests

Posted by ga...@apache.org.
Remove bucket litter during integration tests


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

Branch: refs/heads/master
Commit: ff2d150d7db73c9742e8b5aad1a86e2535974a8c
Parents: 9d3a7bd
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri May 29 14:11:51 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri May 29 14:11:51 2015 -0700

----------------------------------------------------------------------
 .../jclouds/googlecloudstorage/features/BucketApiLiveTest.java   | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/ff2d150d/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
index 9c81aa5..12226dc 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketApiLiveTest.java
@@ -116,6 +116,8 @@ public class BucketApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
       assertEquals(response.name(), BUCKET_NAME_STANDARD);
       assertEquals(response.location(), Location.US);
       assertThat(response.storageClass()).isEqualTo(StorageClass.STANDARD);
+
+      api().deleteBucket(BUCKET_NAME_STANDARD);
    }
 
    @Test(groups = "live")
@@ -131,6 +133,8 @@ public class BucketApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
       assertEquals(response.name(), BUCKET_NAME_NEARLINE);
       assertEquals(response.location(), Location.US);
       assertThat(response.storageClass()).isEqualTo(StorageClass.NEARLINE);
+
+      api().deleteBucket(BUCKET_NAME_NEARLINE);
    }
 
    @Test(groups = "live", dependsOnMethods = { "testCreateBucket" })


[27/50] jclouds git commit: Skip ACL tests on GCS

Posted by ga...@apache.org.
Skip ACL tests on GCS

These tests use request signing which GCS does not currently support.


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

Branch: refs/heads/master
Commit: 9c05604e994867695bb6418c3b34ec9c6ec8bf83
Parents: 10318ed
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jan 22 21:09:54 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jan 22 21:09:54 2016 -0800

----------------------------------------------------------------------
 .../GoogleCloudStorageBlobIntegrationLiveTest.java       | 11 +++++++++++
 .../GoogleCloudStorageContainerIntegrationLiveTest.java  | 11 +++++++++++
 2 files changed, 22 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/9c05604e/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
index db1bcd8..803307f 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
@@ -29,6 +29,7 @@ import java.util.Properties;
 
 import javax.ws.rs.core.MediaType;
 
+import org.assertj.core.api.Fail;
 import org.jclouds.blobstore.BlobStore;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.domain.BlobBuilder.PayloadBlobBuilder;
@@ -257,4 +258,14 @@ public class GoogleCloudStorageBlobIntegrationLiveTest extends BaseBlobIntegrati
    public void deleteObject(String name) throws InterruptedException {
       super.deleteObject(name);
    }
+
+   @Override
+   public void testSetBlobAccess() throws Exception {
+      try {
+         super.testSetBlobAccess();
+         Fail.failBecauseExceptionWasNotThrown(UnsupportedOperationException.class);
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("request signing not supported on GCS", uoe);
+      }
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/9c05604e/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
index 4caac24..bd5afb8 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
@@ -25,6 +25,7 @@ import java.util.Properties;
 
 import javax.ws.rs.core.MediaType;
 
+import org.assertj.core.api.Fail;
 import org.jclouds.blobstore.domain.BlobMetadata;
 import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
@@ -87,4 +88,14 @@ public class GoogleCloudStorageContainerIntegrationLiveTest extends BaseContaine
    public void testListMarkerAfterLastKey() throws Exception {
       throw new SkipException("cannot specify arbitrary markers");
    }
+
+   @Override
+   public void testSetContainerAccess() throws Exception {
+      try {
+         super.testSetContainerAccess();
+         Fail.failBecauseExceptionWasNotThrown(UnsupportedOperationException.class);
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("request signing not supported on GCS", uoe);
+      }
+   }
 }


[36/50] jclouds git commit: Delete GCS composite object components

Posted by ga...@apache.org.
Delete GCS composite object components

Previously we left dangling subobjects.  The composite object retains
a reference to the components data.


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

Branch: refs/heads/master
Commit: ed262f7bd611d6754eb44106aa8d1a8d1abbe05a
Parents: c2a22bc
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jun 3 23:30:08 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Sat Jun 4 00:23:22 2016 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java   | 19 ++++++++++++++-----
 ...oogleCloudStorageBlobIntegrationLiveTest.java |  6 +-----
 2 files changed, 15 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed262f7b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 1cb927e..cce5d3c 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -384,9 +384,9 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
 
    @Override
    public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) {
-      ImmutableList.Builder<GoogleCloudStorageObject> builder = ImmutableList.builder();
+      ImmutableList.Builder<GoogleCloudStorageObject> objects = ImmutableList.builder();
       for (MultipartPart part : parts) {
-         builder.add(api.getObjectApi().getObject(mpu.containerName(),
+         objects.add(api.getObjectApi().getObject(mpu.containerName(),
                Strings2.urlEncode(getMPUPartName(mpu, part.partNumber()))));
       }
 
@@ -400,11 +400,20 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
          destination.addAcl(controls);
       }
 
-      ComposeObjectTemplate template = ComposeObjectTemplate.builder().fromGoogleCloudStorageObject(builder.build())
+      ComposeObjectTemplate template = ComposeObjectTemplate.builder()
+            .fromGoogleCloudStorageObject(objects.build())
             .destination(destination).build();
-      return api.getObjectApi().composeObjects(mpu.containerName(), Strings2.urlEncode(mpu.blobName()), template)
+      String eTag = api.getObjectApi().composeObjects(mpu.containerName(), Strings2.urlEncode(mpu.blobName()), template)
             .etag();
-      // TODO: delete components?
+
+      // remove parts, composite object keeps a reference to them
+      ImmutableList.Builder<String> builder = ImmutableList.builder();
+      for (MultipartPart part : parts) {
+         builder.add(getMPUPartName(mpu, part.partNumber()));
+      }
+      removeBlobs(mpu.containerName(), builder.build());
+
+      return eTag;
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed262f7b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
index 8aa3fe1..244076f 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
@@ -18,10 +18,8 @@ package org.jclouds.googlecloudstorage.blobstore.integration;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
@@ -224,9 +222,7 @@ public class GoogleCloudStorageBlobIntegrationLiveTest extends BaseBlobIntegrati
          addMultipartBlobToContainer(containerName, "const.txt");
 
          long countAfter = blobStore.countBlobs(containerName);
-         assertNotEquals(countBefore, countAfter, "No blob was created");
-         assertTrue(countAfter - countBefore > 1, "A multipart blob wasn't actually created - "
-                  + "there was only 1 extra blob but there should be one manifest blob and multiple chunk blobs");
+         assertThat(countAfter).isEqualTo(countBefore + 1);
       } finally {
          returnContainer(containerName);
       }


[29/50] jclouds git commit: GCS support for conditional copies

Posted by ga...@apache.org.
GCS support for conditional copies


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

Branch: refs/heads/master
Commit: 2499cb0ac27b49a6d0b915730dcee13ed72c7a45
Parents: 165e9af
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Feb 12 19:33:10 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Feb 12 20:44:18 2016 -0800

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java  | 13 ++++++
 ...ogleCloudStorageBlobIntegrationLiveTest.java | 48 ++++++++++++++++++++
 2 files changed, 61 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/2499cb0a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 4f2cf3d..10ebfc1 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -308,6 +308,19 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    @Override
    public String copyBlob(String fromContainer, String fromName, String toContainer, String toName,
          CopyOptions options) {
+      if (options.ifMatch() != null) {
+         throw new UnsupportedOperationException("GCS does not support ifMatch");
+      }
+      if (options.ifNoneMatch() != null) {
+         throw new UnsupportedOperationException("GCS does not support ifNoneMatch");
+      }
+      if (options.ifModifiedSince() != null) {
+         throw new UnsupportedOperationException("GCS does not support ifModifiedSince");
+      }
+      if (options.ifUnmodifiedSince() != null) {
+         throw new UnsupportedOperationException("GCS does not support ifUnmodifiedSince");
+      }
+
       if (options.contentMetadata() == null && options.userMetadata() == null) {
          return api.getObjectApi().copyObject(toContainer, Strings2.urlEncode(toName), fromContainer,
                Strings2.urlEncode(fromName)).etag();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/2499cb0a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
index 803307f..8aa3fe1 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
@@ -268,4 +268,52 @@ public class GoogleCloudStorageBlobIntegrationLiveTest extends BaseBlobIntegrati
          throw new SkipException("request signing not supported on GCS", uoe);
       }
    }
+
+   @Override
+   @Test(expectedExceptions = UnsupportedOperationException.class)
+   public void testCopyIfMatch() throws Exception {
+      super.testCopyIfMatch();
+   }
+
+   @Override
+   @Test(expectedExceptions = UnsupportedOperationException.class)
+   public void testCopyIfMatchNegative() throws Exception {
+      super.testCopyIfMatch();
+   }
+
+   @Override
+   @Test(expectedExceptions = UnsupportedOperationException.class)
+   public void testCopyIfNoneMatch() throws Exception {
+      super.testCopyIfNoneMatch();
+   }
+
+   @Override
+   @Test(expectedExceptions = UnsupportedOperationException.class)
+   public void testCopyIfNoneMatchNegative() throws Exception {
+      super.testCopyIfNoneMatch();
+   }
+
+   @Override
+   @Test(expectedExceptions = UnsupportedOperationException.class)
+   public void testCopyIfModifiedSince() throws Exception {
+      super.testCopyIfModifiedSince();
+   }
+
+   @Override
+   @Test(expectedExceptions = UnsupportedOperationException.class)
+   public void testCopyIfModifiedSinceNegative() throws Exception {
+      super.testCopyIfModifiedSince();
+   }
+
+   @Override
+   @Test(expectedExceptions = UnsupportedOperationException.class)
+   public void testCopyIfUnmodifiedSince() throws Exception {
+      super.testCopyIfUnmodifiedSince();
+   }
+
+   @Override
+   @Test(expectedExceptions = UnsupportedOperationException.class)
+   public void testCopyIfUnmodifiedSinceNegative() throws Exception {
+      super.testCopyIfUnmodifiedSince();
+   }
 }


[13/50] jclouds git commit: Remove the graduated GCE provided and updated Maven coordinates

Posted by ga...@apache.org.
Remove the graduated GCE provided and updated Maven coordinates


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

Branch: refs/heads/master
Commit: e76c59fef480ee8fd3a018766b724190c24945e9
Parents: 2abac7c
Author: Ignasi Barrera <na...@apache.org>
Authored: Fri Jun 26 14:51:07 2015 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Fri Jun 26 14:51:07 2015 +0200

----------------------------------------------------------------------
 providers/google-cloud-storage/pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/e76c59fe/providers/google-cloud-storage/pom.xml
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/pom.xml b/providers/google-cloud-storage/pom.xml
index 203bb39..1b08640 100644
--- a/providers/google-cloud-storage/pom.xml
+++ b/providers/google-cloud-storage/pom.xml
@@ -49,13 +49,13 @@
             <version>${jclouds.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.jclouds.labs</groupId>
+            <groupId>org.apache.jclouds.common</groupId>
             <artifactId>googlecloud</artifactId>
             <version>${project.version}</version>
             <type>jar</type>
         </dependency>
         <dependency>
-            <groupId>org.apache.jclouds.labs</groupId>
+            <groupId>org.apache.jclouds.common</groupId>
             <artifactId>googlecloud</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>


[41/50] jclouds git commit: Avoid lower-case l literal suffix

Posted by ga...@apache.org.
Avoid lower-case l literal suffix

Readers can confuse this with 1.  Found via error-prone.  Fixed via:

find -name \*.java | xargs sed -i 's/\( [0-9][0-9]*\)l/\1L/g'
find -name \*.java | xargs sed -i 's/\(([0-9][0-9]*\)l/\1L/g'


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

Branch: refs/heads/master
Commit: 89787b4c971144a9e7662666f12e27ad3253c25b
Parents: 11c636b
Author: Andrew Gaul <ga...@apache.org>
Authored: Sun Oct 23 14:15:09 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Sun Oct 23 14:15:09 2016 -0700

----------------------------------------------------------------------
 .../org/jclouds/googlecloudstorage/parse/BucketUpdateTest.java   | 4 ++--
 .../org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java  | 4 ++--
 .../jclouds/googlecloudstorage/parse/NoAclBucketListTest.java    | 4 ++--
 .../org/jclouds/googlecloudstorage/parse/NoAclBucketTest.java    | 4 ++--
 4 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/89787b4c/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketUpdateTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketUpdateTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketUpdateTest.java
index da57c19..df28169 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketUpdateTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/BucketUpdateTest.java
@@ -39,9 +39,9 @@ public class BucketUpdateTest extends BaseGoogleCloudStorageParseTest<Bucket> {
       return Bucket.create(
             "bhashbucket", // id
             "bhashbucket", // name
-            1082289308625l, // projectNumber
+            1082289308625L, // projectNumber
             new SimpleDateFormatDateService().iso8601DateParse("2014-06-02T19:19:41.112z"), // timeCreated
-            204l, // metageneration
+            204L, // metageneration
             null, // acl
             null, // defaultObjectAcl
             Owner.create("project-owners-1082289308625", null), // owner

http://git-wip-us.apache.org/repos/asf/jclouds/blob/89787b4c/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java
index 60ef7fd..0f155e3 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/FullBucketGetTest.java
@@ -62,9 +62,9 @@ public class FullBucketGetTest extends BaseGoogleCloudStorageParseTest<Bucket> {
       return Bucket.create(
             "jcloudstestbucket3500", // id
             "jcloudstestbucket3500", // name
-            1082289308625l, // projectNumber
+            1082289308625L, // projectNumber
             new SimpleDateFormatDateService().iso8601DateParse("2014-06-19T14:03:22.345Z"), // timeCreated
-            10l, // metageneration
+            10L, // metageneration
             Arrays.asList(acl1), // acl
             Arrays.asList(defObjectAcl), // defaultObjectAcl
             Owner.create("project-owners-1082289308625", null), // owner

http://git-wip-us.apache.org/repos/asf/jclouds/blob/89787b4c/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/NoAclBucketListTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/NoAclBucketListTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/NoAclBucketListTest.java
index 91c8074..84d644a 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/NoAclBucketListTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/NoAclBucketListTest.java
@@ -34,9 +34,9 @@ public class NoAclBucketListTest extends BaseGoogleCloudStorageParseTest<ListPag
 
    private Bucket item1 = Bucket.create("bhashbucket", // id
          "bhashbucket", // name
-         1082289308625l, // projectNumber
+         1082289308625L, // projectNumber
          new SimpleDateFormatDateService().iso8601DateParse("2014-06-02T19:19:41.112z"), // timeCreated
-         99l, // metageneration
+         99L, // metageneration
          null, // acl
          null, // defaultObjectAcl
          Owner.create("project-owners-1082289308625", null), // owner

http://git-wip-us.apache.org/repos/asf/jclouds/blob/89787b4c/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/NoAclBucketTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/NoAclBucketTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/NoAclBucketTest.java
index a2f4091..5e93f4f 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/NoAclBucketTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/NoAclBucketTest.java
@@ -39,9 +39,9 @@ public class NoAclBucketTest extends BaseGoogleCloudStorageParseTest<Bucket> {
       return Bucket.create(
             "bhashbucket", // id
             "bhashbucket", // name
-            1082289308625l, // projectNumber
+            1082289308625L, // projectNumber
             new SimpleDateFormatDateService().iso8601DateParse("2014-06-02T19:19:41.112z"), // timeCreated
-            87l, // metageneration
+            87L, // metageneration
             null, // acl
             null, // defaultObjectAcl
             Owner.create("project-owners-1082289308625", null), // owner


[15/50] jclouds git commit: JCLOUDS-929: Disable delimiter test.

Posted by ga...@apache.org.
JCLOUDS-929: Disable delimiter test.


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

Branch: refs/heads/master
Commit: e492ba641ad7abd78430e19345f5ca2c4152daeb
Parents: 7be0753
Author: Timur Alperovich <ti...@gmail.com>
Authored: Mon Jul 13 14:43:01 2015 -0700
Committer: Timur Alperovich <ti...@gmail.com>
Committed: Mon Jul 13 14:43:01 2015 -0700

----------------------------------------------------------------------
 .../integration/GoogleCloudStorageContainerLiveTest.java        | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/e492ba64/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
index 5aa033e..490ee35 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
@@ -39,4 +39,9 @@ public class GoogleCloudStorageContainerLiveTest extends BaseContainerLiveTest {
    public void testContainerListWithPrefix() {
       throw new SkipException("Prefix option has not been plumbed down to GCS");
    }
+
+   @Override
+   public void testDelimiterList() {
+      throw new SkipException("Prefix option has not been plumbed down to GCS");
+   }
 }


[35/50] jclouds git commit: JCLOUDS-912: GCS upload InputStream work around

Posted by ga...@apache.org.
JCLOUDS-912: GCS upload InputStream work around


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

Branch: refs/heads/master
Commit: c2a22bc32ca5e3f82c6cb5fedcb1924bc251b20f
Parents: 5d43731
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jun 3 12:38:43 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jun 3 12:38:43 2016 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java                   | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/c2a22bc3/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 10ebfc1..1cb927e 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -214,7 +214,9 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
 
    @Override
    public String putBlob(String container, Blob blob, PutOptions options) {
-      if (options.isMultipart()) {
+      if (options.isMultipart() || !blob.getPayload().isRepeatable()) {
+         // JCLOUDS-912 prevents using single-part uploads with InputStream payloads.
+         // Work around this with multi-part upload which buffers parts in-memory.
          return putMultipartBlob(container, blob, options);
       } else {
          checkNotNull(blob.getPayload().getContentMetadata().getContentLength());


[40/50] jclouds git commit: JCLOUDS-945: ignore marker prefix test on GCS

Posted by ga...@apache.org.
JCLOUDS-945: ignore marker prefix test on GCS


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

Branch: refs/heads/master
Commit: 11c636b6b32538e48050476d40b5da9d135c77e8
Parents: 230448a
Author: Andrew Gaul <ga...@apache.org>
Authored: Tue Oct 4 23:03:03 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Oct 4 23:03:03 2016 -0700

----------------------------------------------------------------------
 .../GoogleCloudStorageContainerIntegrationLiveTest.java         | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/11c636b6/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
index bd5afb8..ff7f665 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
@@ -90,6 +90,11 @@ public class GoogleCloudStorageContainerIntegrationLiveTest extends BaseContaine
    }
 
    @Override
+   public void testListMarkerPrefix() throws Exception {
+      throw new SkipException("cannot specify arbitrary markers");
+   }
+
+   @Override
    public void testSetContainerAccess() throws Exception {
       try {
          super.testSetContainerAccess();


[37/50] jclouds git commit: JCLOUDS-866: Reduce GCS multipart limit to 32

Posted by ga...@apache.org.
JCLOUDS-866: Reduce GCS multipart limit to 32


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

Branch: refs/heads/master
Commit: ae1f6d0c3f18ad733f39be82e13df3c15a02d403
Parents: ed262f7
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jun 3 23:30:43 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Sat Jun 4 00:23:40 2016 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java                   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/ae1f6d0c/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index cce5d3c..fe14fa3 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -452,8 +452,8 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
 
    @Override
    public int getMaximumNumberOfParts() {
-      // TODO: should this be 32?  See: https://cloud.google.com/storage/docs/composite-objects
-      return 10 * 1000;
+      // can raise limit via composite objects of composites
+      return 32;
    }
 
    private static String getMPUPartName(MultipartUpload mpu, int partNumber) {


[25/50] jclouds git commit: JCLOUDS-844: GCS putBlob ACLs

Posted by ga...@apache.org.
JCLOUDS-844: GCS putBlob ACLs


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

Branch: refs/heads/master
Commit: 57d162c646b83ca69da804b95fef987b2ca352f0
Parents: 639e96d
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Dec 21 23:01:01 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Mon Dec 21 23:25:00 2015 -0800

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java  | 44 ++++++++++++++------
 1 file changed, 32 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/57d162c6/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 5dbb7cd..a3b22d1 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -209,15 +209,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
     */
    @Override
    public String putBlob(String container, Blob blob) {
-      checkNotNull(blob.getPayload().getContentMetadata().getContentLength());
-      HashCode md5 = blob.getMetadata().getContentMetadata().getContentMD5AsHashCode();
-
-      ObjectTemplate template = blobMetadataToObjectTemplate.apply(blob.getMetadata());
-
-      if (md5 != null) {
-         template.md5Hash(base64().encode(md5.asBytes()));
-      }
-      return api.getObjectApi().multipartUpload(container, template, blob.getPayload()).etag();
+      return putBlob(container, blob, PutOptions.NONE);
    }
 
    @Override
@@ -225,7 +217,25 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
       if (options.isMultipart()) {
          return putMultipartBlob(container, blob, options);
       } else {
-         return putBlob(container, blob);
+         checkNotNull(blob.getPayload().getContentMetadata().getContentLength());
+
+         ObjectTemplate template = blobMetadataToObjectTemplate.apply(blob.getMetadata());
+
+         HashCode md5 = blob.getMetadata().getContentMetadata().getContentMD5AsHashCode();
+         if (md5 != null) {
+            template.md5Hash(base64().encode(md5.asBytes()));
+         }
+
+         if (options.getBlobAccess() == BlobAccess.PUBLIC_READ) {
+            ObjectAccessControls controls = ObjectAccessControls.builder()
+                  .entity("allUsers")
+                  .bucket(container)
+                  .role(READER)
+                  .build();
+            template.addAcl(controls);
+         }
+
+         return api.getObjectApi().multipartUpload(container, template, blob.getPayload()).etag();
       }
    }
 
@@ -342,9 +352,9 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    }
 
    @Override
-   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) {
+   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions options) {
       String uploadId = blobMetadata.getName();
-      return MultipartUpload.create(container, blobMetadata.getName(), uploadId, blobMetadata);
+      return MultipartUpload.create(container, blobMetadata.getName(), uploadId, blobMetadata, options);
    }
 
    @Override
@@ -364,7 +374,17 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
          builder.add(api.getObjectApi().getObject(mpu.containerName(),
                Strings2.urlEncode(getMPUPartName(mpu, part.partNumber()))));
       }
+
       ObjectTemplate destination = blobMetadataToObjectTemplate.apply(mpu.blobMetadata());
+      if (mpu.putOptions().getBlobAccess() == BlobAccess.PUBLIC_READ) {
+         ObjectAccessControls controls = ObjectAccessControls.builder()
+               .entity("allUsers")
+               .bucket(mpu.containerName())
+               .role(READER)
+               .build();
+         destination.addAcl(controls);
+      }
+
       ComposeObjectTemplate template = ComposeObjectTemplate.builder().fromGoogleCloudStorageObject(builder.build())
             .destination(destination).build();
       return api.getObjectApi().composeObjects(mpu.containerName(), Strings2.urlEncode(mpu.blobName()), template)


[28/50] jclouds git commit: Convert CopyOptions into an AutoValue

Posted by ga...@apache.org.
Convert CopyOptions into an AutoValue

This commit requires an interface change since AutoValue lacks support
for Optional and uses Nullable annotations instead.


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

Branch: refs/heads/master
Commit: 165e9afd9f4830f55018b2fa4fa8f6dcec609e7d
Parents: 9c05604
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Feb 12 19:29:38 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Feb 12 19:29:38 2016 -0800

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java            | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/165e9afd/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index a3b22d1..4f2cf3d 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -308,15 +308,15 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    @Override
    public String copyBlob(String fromContainer, String fromName, String toContainer, String toName,
          CopyOptions options) {
-      if (!options.getContentMetadata().isPresent() && !options.getUserMetadata().isPresent()) {
+      if (options.contentMetadata() == null && options.userMetadata() == null) {
          return api.getObjectApi().copyObject(toContainer, Strings2.urlEncode(toName), fromContainer,
                Strings2.urlEncode(fromName)).etag();
       }
 
       ObjectTemplate template = new ObjectTemplate();
 
-      if (options.getContentMetadata().isPresent()) {
-         ContentMetadata contentMetadata = options.getContentMetadata().get();
+      if (options.contentMetadata() != null) {
+         ContentMetadata contentMetadata = options.contentMetadata();
 
          String contentDisposition = contentMetadata.getContentDisposition();
          if (contentDisposition != null) {
@@ -343,8 +343,8 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
          }
       }
 
-      if (options.getUserMetadata().isPresent()) {
-         template.customMetadata(options.getUserMetadata().get());
+      if (options.userMetadata() != null) {
+         template.customMetadata(options.userMetadata());
       }
 
       return api.getObjectApi().copyObject(toContainer, Strings2.urlEncode(toName), fromContainer,


[32/50] jclouds git commit: Handle unimplemented signed URL tests in providers

Posted by ga...@apache.org.
Handle unimplemented signed URL tests in providers

This commit makes it evident in source code which providers do not
support this feature.


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

Branch: refs/heads/master
Commit: f6210d58d3a34ac9261e0dbdffca2d52d5143512
Parents: a780cda
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri May 6 14:38:57 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri May 6 14:38:57 2016 -0700

----------------------------------------------------------------------
 .../GoogleCloudStorageBlobSignerLiveTest.java   | 102 +++++++++++++++++++
 1 file changed, 102 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/f6210d58/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobSignerLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobSignerLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobSignerLiveTest.java
new file mode 100644
index 0000000..7e7dd52
--- /dev/null
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobSignerLiveTest.java
@@ -0,0 +1,102 @@
+/*
+ * 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.googlecloudstorage.blobstore.integration;
+
+import java.io.IOException;
+
+import org.jclouds.blobstore.integration.internal.BaseBlobSignerLiveTest;
+import org.testng.SkipException;
+import org.testng.annotations.Test;
+
+@Test(groups = { "live" })
+public class GoogleCloudStorageBlobSignerLiveTest extends BaseBlobSignerLiveTest {
+   public GoogleCloudStorageBlobSignerLiveTest() {
+      provider = "google-cloud-storage";
+   }
+
+   @Test
+   public void testSignGetUrl() throws Exception {
+      try {
+         super.testSignGetUrl();
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("not yet implemented in GCS", uoe);
+      }
+   }
+
+   @Test
+   public void testSignGetUrlOptions() throws Exception {
+      try {
+         super.testSignGetUrlOptions();
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("not yet implemented in GCS", uoe);
+      }
+   }
+
+   @Test
+   public void testSignGetUrlWithTime() throws InterruptedException, IOException {
+      try {
+         super.testSignGetUrlWithTime();
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("not yet implemented in GCS", uoe);
+      }
+   }
+
+   @Test
+   public void testSignGetUrlWithTimeExpired() throws InterruptedException, IOException {
+      try {
+         super.testSignGetUrlWithTimeExpired();
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("not yet implemented in GCS", uoe);
+      }
+   }
+
+   @Test
+   public void testSignPutUrl() throws Exception {
+      try {
+         super.testSignPutUrl();
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("not yet implemented in GCS", uoe);
+      }
+   }
+
+   @Test
+   public void testSignPutUrlWithTime() throws Exception {
+      try {
+         super.testSignPutUrlWithTime();
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("not yet implemented in GCS", uoe);
+      }
+   }
+
+   @Test
+   public void testSignPutUrlWithTimeExpired() throws Exception {
+      try {
+         super.testSignPutUrlWithTimeExpired();
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("not yet implemented in GCS", uoe);
+      }
+   }
+
+   @Test
+   public void testSignRemoveUrl() throws Exception {
+      try {
+         super.testSignRemoveUrl();
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("not yet implemented in GCS", uoe);
+      }
+   }
+}


[17/50] jclouds git commit: JCLOUDS-992: do not use RELATIVE_PATH for BLOBs.

Posted by ga...@apache.org.
JCLOUDS-992: do not use RELATIVE_PATH for BLOBs.

Changes the Google storage provider to be inline with the other
providers in not returning RELATIVE_PATH for objects that are BLOBs.


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

Branch: refs/heads/master
Commit: efdc715b88ed3e60d6eb63caf200d2eb6a38ffb6
Parents: 428d909
Author: Timur Alperovich <ti...@gmail.com>
Authored: Thu Aug 20 14:29:20 2015 -0700
Committer: Timur Alperovich <ti...@gmail.com>
Committed: Thu Aug 20 14:30:38 2015 -0700

----------------------------------------------------------------------
 .../blobstore/functions/ObjectToBlobMetadata.java   | 16 +---------------
 1 file changed, 1 insertion(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/efdc715b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectToBlobMetadata.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectToBlobMetadata.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectToBlobMetadata.java
index 93f9959..4a6cf7d 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectToBlobMetadata.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectToBlobMetadata.java
@@ -16,12 +16,10 @@
  */
 package org.jclouds.googlecloudstorage.blobstore.functions;
 
-import javax.inject.Inject;
 
 import org.jclouds.blobstore.domain.MutableBlobMetadata;
 import org.jclouds.blobstore.domain.StorageType;
 import org.jclouds.blobstore.domain.internal.MutableBlobMetadataImpl;
-import org.jclouds.blobstore.strategy.IfDirectoryReturnNameStrategy;
 import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
 import org.jclouds.javax.annotation.Nullable;
 
@@ -30,11 +28,6 @@ import com.google.common.hash.HashCode;
 import com.google.common.io.BaseEncoding;
 
 public class ObjectToBlobMetadata implements Function<GoogleCloudStorageObject, MutableBlobMetadata> {
-   private final IfDirectoryReturnNameStrategy ifDirectoryReturnName;
-
-   @Inject public ObjectToBlobMetadata(IfDirectoryReturnNameStrategy ifDirectoryReturnName) {
-      this.ifDirectoryReturnName = ifDirectoryReturnName;
-   }
 
    public MutableBlobMetadata apply(GoogleCloudStorageObject from) {
       if (from == null) {
@@ -55,14 +48,7 @@ public class ObjectToBlobMetadata implements Function<GoogleCloudStorageObject,
       to.setUri(from.selfLink());
       to.setId(from.id());
       to.setPublicUri(from.mediaLink());
-
-      String directoryName = ifDirectoryReturnName.execute(to);
-      if (directoryName != null) {
-         to.setName(directoryName);
-         to.setType(StorageType.RELATIVE_PATH);
-      } else {
-         to.setType(StorageType.BLOB);
-      }
+      to.setType(StorageType.BLOB);
       to.setSize(from.size());
       return to;
    }


[10/50] jclouds git commit: fix javadoc

Posted by ga...@apache.org.
fix javadoc


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

Branch: refs/heads/master
Commit: 7213acb03f2083d89725170e8c9f1efa920a34a5
Parents: c0190dd
Author: Daniel Broudy <br...@google.com>
Authored: Fri Jun 12 14:26:50 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jun 12 16:12:48 2015 -0700

----------------------------------------------------------------------
 .../org/jclouds/googlecloudstorage/features/ObjectApi.java     | 6 ++++--
 .../jclouds/googlecloudstorage/options/GetObjectOptions.java   | 3 ++-
 2 files changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/7213acb0/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
index 119aece..f91a410 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
@@ -113,7 +113,8 @@ public interface ObjectApi {
     * @param objectName
     *           Name of the object
     * @param options
-    *           Supply {@link GetObjectOptions} with optional query parameters
+    *           A class that implements {@link HttpRequestOptions}
+    *           such as {@link GetObjectOptions} with optional query parameters
     *
     * @return a {@link GoogleCloudStorageObject}
     */
@@ -153,7 +154,8 @@ public interface ObjectApi {
     * @param objectName
     *           Name of the object
     * @param options
-    *           Supply {@link GetObjectOptions} with optional query parameters
+    *           A class that implements {@link HttpRequestOptions}
+    *           such as {@link GetObjectOptions} with optional query parameters
     *
     * @return a {@link GoogleCloudStorageObject}
     */

http://git-wip-us.apache.org/repos/asf/jclouds/blob/7213acb0/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/GetObjectOptions.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/GetObjectOptions.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/GetObjectOptions.java
index 2d307bc..5fd9b0f 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/GetObjectOptions.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/GetObjectOptions.java
@@ -22,7 +22,8 @@ import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Projection
 import org.jclouds.http.options.GetOptions;
 
 /**
- * Allows to optionally specify generation,ifGenerationMatch,ifGenerationNotMatch, ifMetagenerationMatch,ifMetagenerationNotMatch and projection which used in Bucket
+ * Allows to optionally specify generation, ifGenerationMatch, ifGenerationNotMatch, ifMetagenerationMatch,
+ * ifMetagenerationNotMatch and projection, in addition to the values in {@link GetOptions}.
  */
 public class GetObjectOptions extends GetOptions {
 


[42/50] jclouds git commit: Do not leave open streams when loading test mock files

Posted by ga...@apache.org.
Do not leave open streams when loading test mock files


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

Branch: refs/heads/master
Commit: a600a1221d09e34b3f379acd75a6b7ba3ee32c7f
Parents: 89787b4
Author: Ignasi Barrera <na...@apache.org>
Authored: Wed Oct 26 15:57:28 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Oct 26 15:57:28 2016 +0200

----------------------------------------------------------------------
 .../internal/BaseGoogleCloudStorageExpectTest.java        | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/a600a122/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/internal/BaseGoogleCloudStorageExpectTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/internal/BaseGoogleCloudStorageExpectTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/internal/BaseGoogleCloudStorageExpectTest.java
index 4246512..dd3c644 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/internal/BaseGoogleCloudStorageExpectTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/internal/BaseGoogleCloudStorageExpectTest.java
@@ -49,14 +49,16 @@ import org.jclouds.googlecloudstorage.GoogleCloudStorageProviderMetadata;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.io.Payload;
-import org.jclouds.io.payloads.ByteSourcePayload;
+import org.jclouds.io.Payloads;
 import org.jclouds.oauth.v2.filters.JWTBearerTokenFlow;
 import org.jclouds.oauth.v2.filters.TestJWTBearerTokenFlow;
 import org.jclouds.providers.ProviderMetadata;
 import org.jclouds.rest.internal.BaseRestApiExpectTest;
 
+import com.google.common.base.Charsets;
 import com.google.common.base.Joiner;
 import com.google.common.base.Supplier;
+import com.google.common.base.Throwables;
 import com.google.common.io.ByteSource;
 import com.google.common.io.Resources;
 import com.google.inject.Binder;
@@ -167,6 +169,10 @@ public class BaseGoogleCloudStorageExpectTest<T> extends BaseRestApiExpectTest<T
    }
 
    protected Payload staticPayloadFromResource(String resource) {
-      return new ByteSourcePayload(Resources.asByteSource(Resources.getResource(getClass(), resource)));
+      try {
+         return Payloads.newStringPayload(Resources.toString(Resources.getResource(getClass(), resource), Charsets.UTF_8));
+      } catch (IOException ex) {
+         throw Throwables.propagate(ex);
+      }
    }
 }


[38/50] jclouds git commit: JCLOUDS-1125: GCS list multipart uploads

Posted by ga...@apache.org.
JCLOUDS-1125: GCS list multipart uploads

Not supported.


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

Branch: refs/heads/master
Commit: 5baa49d9b844f511e7d6167d43cd85f1a87fa2a6
Parents: ae1f6d0
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Jun 13 16:34:20 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Mon Jun 13 17:11:39 2016 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java              | 5 +++++
 .../GoogleCloudStorageBlobIntegrationLiveTest.java          | 9 +++++++++
 2 files changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/5baa49d9/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index fe14fa3..63406d9 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -441,6 +441,11 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
    }
 
    @Override
+   public List<MultipartUpload> listMultipartUploads(String container) {
+      throw new UnsupportedOperationException("not supported");
+   }
+
+   @Override
    public long getMinimumMultipartPartSize() {
       return 5L * 1024L * 1024L;
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5baa49d9/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
index 244076f..d68441c 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
@@ -312,4 +312,13 @@ public class GoogleCloudStorageBlobIntegrationLiveTest extends BaseBlobIntegrati
    public void testCopyIfUnmodifiedSinceNegative() throws Exception {
       super.testCopyIfUnmodifiedSince();
    }
+
+   @Override
+   public void testListMultipartUploads() throws Exception {
+      try {
+         super.testListMultipartUploads();
+      } catch (UnsupportedOperationException uoe) {
+         throw new SkipException("GCS does not support listing multipart uploads", uoe);
+      }
+   }
 }


[14/50] jclouds git commit: JCLOUDS-930: Skip the prefix test in GCS.

Posted by ga...@apache.org.
JCLOUDS-930: Skip the prefix test in GCS.

As the prefix option has not been plumbed down into GCS, we should
skip the prefix test.


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

Branch: refs/heads/master
Commit: 7be0753e74c3b60a8461f640bd6c2f658a9f3035
Parents: e76c59f
Author: Timur Alperovich <ti...@gmail.com>
Authored: Mon Jun 29 21:52:17 2015 -0700
Committer: Timur Alperovich <ti...@gmail.com>
Committed: Mon Jun 29 21:52:17 2015 -0700

----------------------------------------------------------------------
 .../integration/GoogleCloudStorageContainerLiveTest.java       | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/7be0753e/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
index 559713b..5aa033e 100644
--- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
+++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerLiveTest.java
@@ -20,6 +20,7 @@ import java.util.Properties;
 
 import org.jclouds.blobstore.integration.internal.BaseContainerLiveTest;
 import org.jclouds.googlecloud.internal.TestProperties;
+import org.testng.SkipException;
 import org.testng.annotations.Test;
 
 @Test(groups = { "live" })
@@ -33,4 +34,9 @@ public class GoogleCloudStorageContainerLiveTest extends BaseContainerLiveTest {
       TestProperties.setGoogleCredentialsFromJson(provider);
       return TestProperties.apply(provider, super.setupProperties());
    }
+
+   @Override
+   public void testContainerListWithPrefix() {
+      throw new SkipException("Prefix option has not been plumbed down to GCS");
+   }
 }