Add test for multipart copy

S3Proxy does not yet support this so we expect NotImplemented.
References #56.
pull/72/head
Andrew Gaul 2015-07-24 17:55:09 -07:00
rodzic aed1a3ab3c
commit f94d1834c9
1 zmienionych plików z 68 dodań i 0 usunięć

Wyświetl plik

@ -24,7 +24,9 @@ import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;
@ -42,8 +44,17 @@ import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.CompleteMultipartUploadRequest;
import com.amazonaws.services.s3.model.CompleteMultipartUploadResult;
import com.amazonaws.services.s3.model.CopyPartRequest;
import com.amazonaws.services.s3.model.CopyPartResult;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.InitiateMultipartUploadRequest;
import com.amazonaws.services.s3.model.InitiateMultipartUploadResult;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PartETag;
import com.amazonaws.services.s3.model.S3Object;
import com.google.common.base.Throwables;
import com.google.common.io.ByteSource;
@ -149,6 +160,63 @@ public final class S3AwsSdkTest {
}
}
// TODO: jclouds lacks support for multipart copy
@Test
public void testMultipartCopy() throws Exception {
AmazonS3 client = new AmazonS3Client(awsCreds,
new ClientConfiguration().withSignerOverride("S3SignerType"));
client.setEndpoint(s3Endpoint.toString());
String sourceBlobName = "testMultipartCopy-source";
String targetBlobName = "testMultipartCopy-target";
client.putObject(containerName, sourceBlobName,
BYTE_SOURCE.openStream(), new ObjectMetadata());
InitiateMultipartUploadRequest initiateRequest =
new InitiateMultipartUploadRequest(containerName,
targetBlobName);
InitiateMultipartUploadResult initResult =
client.initiateMultipartUpload(initiateRequest);
String uploadId = initResult.getUploadId();
CopyPartRequest copyRequest = new CopyPartRequest()
.withDestinationBucketName(containerName)
.withDestinationKey(targetBlobName)
.withSourceBucketName(containerName)
.withSourceKey(sourceBlobName)
.withUploadId(initResult.getUploadId())
.withFirstByte(0L)
.withLastByte(BYTE_SOURCE.size() - 1)
.withPartNumber(1);
// TODO: S3Proxy lacks support for multipart copy
CopyPartResult copyPartResult = null;
try {
copyPartResult = client.copyPart(copyRequest);
Fail.failBecauseExceptionWasNotThrown(AmazonS3Exception.class);
} catch (AmazonS3Exception e) {
assertThat(e.getErrorCode()).isEqualTo("NotImplemented");
return;
}
List<PartETag> partETags = new ArrayList<>();
partETags.add(copyPartResult.getPartETag());
CompleteMultipartUploadRequest completeRequest =
new CompleteMultipartUploadRequest(
containerName, targetBlobName,
initResult.getUploadId(), partETags);
CompleteMultipartUploadResult completeUploadResponse =
client.completeMultipartUpload(completeRequest);
S3Object object = client.getObject(new GetObjectRequest(containerName,
targetBlobName));
try (InputStream actual = object.getObjectContent();
InputStream expected = BYTE_SOURCE.openStream()) {
assertThat(actual).hasContentEqualTo(expected);
}
}
private static final class NullX509TrustManager
implements X509TrustManager {
@Override