JCLOUDS-1546: Support GCS Archive storage class
Also change portable abstraction mapping for Tier.ARCHIVE.
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 28e7287..def10f1 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
@@ -86,6 +86,7 @@
}
public enum StorageClass {
+ ARCHIVE(Tier.ARCHIVE),
COLDLINE(Tier.ARCHIVE),
DURABLE_REDUCED_AVAILABILITY(Tier.STANDARD),
MULTI_REGIONAL(Tier.STANDARD),
@@ -103,7 +104,7 @@
switch (tier) {
case STANDARD: return StorageClass.STANDARD;
case INFREQUENT: return StorageClass.NEARLINE;
- case ARCHIVE: return StorageClass.COLDLINE;
+ case ARCHIVE: return StorageClass.ARCHIVE;
}
throw new IllegalArgumentException("invalid tier: " + tier);
}
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 c59a82f..2639f21 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,6 +60,8 @@
private static final String BUCKET_NAME_COLDLINE = "jcloudstestbucketcoldline" + (int) (Math.random() * 10000);
+ private static final String BUCKET_NAME_ARCHIVE = "jcloudstestbucketarchive" + (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);
@@ -142,6 +144,23 @@
}
@Test(groups = "live")
+ public void testCreateBucketArchive() {
+ BucketTemplate template = new BucketTemplate()
+ .name(BUCKET_NAME_ARCHIVE)
+ .location(Location.US)
+ .storageClass(StorageClass.ARCHIVE);
+
+ Bucket response = api().createBucket(PROJECT_NUMBER, template);
+
+ assertNotNull(response);
+ assertEquals(response.name(), BUCKET_NAME_ARCHIVE);
+ assertEquals(response.location(), Location.US);
+ assertThat(response.storageClass()).isEqualTo(StorageClass.ARCHIVE);
+
+ api().deleteBucket(BUCKET_NAME_ARCHIVE);
+ }
+
+ @Test(groups = "live")
public void testCreateBucketMultiregional() {
BucketTemplate template = new BucketTemplate()
.name(BUCKET_NAME_MULTI_REGIONAL)
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 5d44d58..46a5f18 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
@@ -449,6 +449,48 @@
ByteStreams2.toByteArrayAndClose(payloadImpl.getPayload().openStream()));
}
+ @Test(groups = "live", dependsOnMethods = "testPatchObjectsWithOptions")
+ public void testMultipartJpegUploadArchive() throws IOException {
+ long contentLength = 32 * 1024L;
+ ByteSource byteSource = TestUtils.randomByteSource().slice(0, contentLength);
+ ByteSourcePayload payload = Payloads.newByteSourcePayload(byteSource);
+ PayloadEnclosing payloadImpl = new PayloadEnclosingImpl(payload);
+
+ ObjectTemplate template = new ObjectTemplate();
+
+ ObjectAccessControls oacl = ObjectAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
+ .role(ObjectRole.OWNER).build();
+
+ // This would trigger server side validation of md5
+ md5Hash = base64().encode(byteSource.hash(Hashing.md5()).asBytes());
+ // TODO: crc32c = without making a compile dep on guava 18
+
+ template.contentType("image/jpeg").addAcl(oacl).size(contentLength).name(MULTIPART_UPLOAD_OBJECT)
+ .contentLanguage("en").contentDisposition("attachment").md5Hash(md5Hash)
+ .storageClass(StorageClass.ARCHIVE)
+ .customMetadata("custommetakey1", "custommetavalue1").crc32c(crc32c)
+ .customMetadata(ImmutableMap.of("Adrian", "powderpuff"));
+
+ GoogleCloudStorageObject gcsObject = api().multipartUpload(BUCKET_NAME, template, payloadImpl.getPayload());
+
+ assertThat(gcsObject.bucket()).isEqualTo(BUCKET_NAME);
+ assertThat(gcsObject.name()).isEqualTo(MULTIPART_UPLOAD_OBJECT);
+ checkHashCodes(gcsObject);
+
+ assertThat(gcsObject.metadata()).contains(entry("custommetakey1", "custommetavalue1"),
+ entry("Adrian", "powderpuff")).doesNotContainKey("adrian");
+
+ gcsObject = api().getObject(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT, null);
+
+ assertThat(gcsObject).isNotNull();
+ assertThat(gcsObject.storageClass()).isEqualTo(StorageClass.ARCHIVE);
+
+ PayloadEnclosing impl = api().download(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT);
+
+ assertThat(ByteStreams2.toByteArrayAndClose(impl.getPayload().openStream())).isEqualTo(
+ ByteStreams2.toByteArrayAndClose(payloadImpl.getPayload().openStream()));
+ }
+
private void checkHashCodes(GoogleCloudStorageObject gcsObject) {
assertEquals(gcsObject.md5Hash(), md5Hash);
if (crc32c != null) {