JCLOUDS-1399: Support S3 One Zone-IA storage class

Also improve test coverage of storage classes.
This commit is contained in:
Andrew Gaul 2018-04-04 21:05:46 -07:00
parent c2b76d1d42
commit dd4de2d0b8
2 changed files with 23 additions and 13 deletions

View File

@ -36,6 +36,7 @@ public interface ObjectMetadata extends Comparable<ObjectMetadata> {
public enum StorageClass { public enum StorageClass {
STANDARD(Tier.STANDARD), STANDARD(Tier.STANDARD),
STANDARD_IA(Tier.INFREQUENT), STANDARD_IA(Tier.INFREQUENT),
ONEZONE_IA(Tier.INFREQUENT),
REDUCED_REDUNDANCY(Tier.STANDARD), REDUCED_REDUNDANCY(Tier.STANDARD),
GLACIER(Tier.ARCHIVE); GLACIER(Tier.ARCHIVE);

View File

@ -16,7 +16,8 @@
*/ */
package org.jclouds.aws.s3; package org.jclouds.aws.s3;
import static org.jclouds.aws.s3.blobstore.options.AWSS3PutOptions.Builder.storageClass; import static org.assertj.core.api.Assertions.assertThat;
import static org.jclouds.aws.s3.blobstore.options.AWSS3PutObjectOptions.Builder.storageClass;
import static org.jclouds.s3.options.ListBucketOptions.Builder.withPrefix; import static org.jclouds.s3.options.ListBucketOptions.Builder.withPrefix;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNotNull;
@ -33,11 +34,11 @@ import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse; import org.jclouds.http.HttpResponse;
import org.jclouds.location.predicates.LocationPredicates; import org.jclouds.location.predicates.LocationPredicates;
import org.jclouds.rest.HttpClient; import org.jclouds.rest.HttpClient;
import org.jclouds.s3.S3Client;
import org.jclouds.s3.S3ClientLiveTest; import org.jclouds.s3.S3ClientLiveTest;
import org.jclouds.s3.domain.ListBucketResponse; import org.jclouds.s3.domain.ListBucketResponse;
import org.jclouds.s3.domain.ObjectMetadata; import org.jclouds.s3.domain.ObjectMetadata;
import org.jclouds.s3.domain.ObjectMetadata.StorageClass; import org.jclouds.s3.domain.ObjectMetadata.StorageClass;
import org.jclouds.s3.domain.S3Object;
import org.testng.ITestContext; import org.testng.ITestContext;
import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -64,22 +65,30 @@ public class AWSS3ClientLiveTest extends S3ClientLiveTest {
super.setUpResourcesOnThisThread(testContext); super.setUpResourcesOnThisThread(testContext);
} }
public void testPutWithReducedRedundancyStorage() throws InterruptedException { public void testPutWithStorageClass() throws Exception {
String containerName = getContainerName(); String containerName = getContainerName();
AWSS3Client s3Client = getApi();
try { try {
String blobName = "test-rrs"; for (StorageClass storageClass : StorageClass.values()) {
BlobStore blobStore = view.getBlobStore(); if (storageClass == StorageClass.GLACIER) {
blobStore.createContainerInLocation(null, containerName); // AWS does not allow creation of Glacier objects
continue;
}
Blob blob = blobStore.blobBuilder(blobName).payload("something").build(); String blobName = "test-" + storageClass;
blobStore.putBlob(containerName, blob, BlobStore blobStore = view.getBlobStore();
storageClass(StorageClass.REDUCED_REDUNDANCY)); blobStore.createContainerInLocation(null, containerName);
S3Client s3Client = view.unwrapApi(S3Client.class); S3Object object = s3Client.newS3Object();
ListBucketResponse response = s3Client.listBucket(containerName, withPrefix(blobName)); object.getMetadata().setKey(blobName);
object.setPayload("something");
s3Client.putObject(containerName, object, storageClass(storageClass));
ObjectMetadata metadata = response.iterator().next(); ListBucketResponse response = s3Client.listBucket(containerName, withPrefix(blobName));
assertEquals(metadata.getStorageClass(), StorageClass.REDUCED_REDUNDANCY);
ObjectMetadata metadata = response.iterator().next();
assertThat(metadata.getStorageClass()).isEqualTo(storageClass);
}
} finally { } finally {
returnContainer(containerName); returnContainer(containerName);