Test uploading large parts in multipart upload

This commit exposes a AWS Java SDK bug.  References #80.
pull/95/head
Alex Hall 2015-10-21 02:48:27 +02:00 zatwierdzone przez Andrew Gaul
rodzic d4f20646b4
commit b7e98d1ce3
1 zmienionych plików z 46 dodań i 1 usunięć

Wyświetl plik

@ -55,7 +55,8 @@ import com.amazonaws.services.s3.model.InitiateMultipartUploadResult;
import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PartETag; import com.amazonaws.services.s3.model.PartETag;
import com.amazonaws.services.s3.model.S3Object; import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.UploadPartRequest;
import com.amazonaws.services.s3.model.UploadPartResult;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import com.google.common.io.ByteSource; import com.google.common.io.ByteSource;
@ -209,6 +210,50 @@ public final class S3AwsSdkTest {
} }
} }
@Test
public void testBigMultipartUpload() throws Exception {
AmazonS3 client = new AmazonS3Client(awsCreds,
new ClientConfiguration().withSignerOverride("S3SignerType"));
client.setEndpoint(s3Endpoint.toString());
String key = "multipart-upload";
int size = 10_000_000;
ByteSource byteSource = TestUtils.randomByteSource().slice(0, size);
InitiateMultipartUploadRequest initRequest =
new InitiateMultipartUploadRequest(containerName, key);
InitiateMultipartUploadResult initResponse =
client.initiateMultipartUpload(initRequest);
String uploadId = initResponse.getUploadId();
UploadPartRequest uploadRequest = new UploadPartRequest()
.withBucketName(containerName).withKey(key)
.withUploadId(uploadId).withPartNumber(1)
.withInputStream(byteSource.openStream())
.withPartSize(size);
UploadPartResult uploadPartResult = client.uploadPart(uploadRequest);
PartETag partETag = uploadPartResult.getPartETag();
// must be mutable since AWK SDK sorts parts
List<PartETag> partETagList = new ArrayList<PartETag>();
partETagList.add(partETag);
CompleteMultipartUploadRequest completeRequest = new
CompleteMultipartUploadRequest(
containerName,
key,
uploadId,
partETagList);
client.completeMultipartUpload(completeRequest);
S3Object object = client.getObject(new GetObjectRequest(containerName,
key));
try (InputStream actual = object.getObjectContent();
InputStream expected = byteSource.openStream()) {
assertThat(actual).hasContentEqualTo(expected);
}
}
private static final class NullX509TrustManager private static final class NullX509TrustManager
implements X509TrustManager { implements X509TrustManager {
@Override @Override