use of software.amazon.awssdk.core.async.AsyncRequestBody in project aws-sdk-java-v2 by aws.
the class DefaultS3TransferManager method uploadFile.
@Override
public FileUpload uploadFile(UploadFileRequest uploadFileRequest) {
Validate.paramNotNull(uploadFileRequest, "uploadFileRequest");
AsyncRequestBody requestBody = AsyncRequestBody.fromFile(uploadFileRequest.source());
CompletableFuture<CompletedFileUpload> uploadFuture = new CompletableFuture<>();
TransferProgressUpdater progressUpdater = new TransferProgressUpdater(uploadFileRequest, requestBody);
progressUpdater.transferInitiated();
requestBody = progressUpdater.wrapRequestBody(requestBody);
progressUpdater.registerCompletion(uploadFuture);
try {
assertNotUnsupportedArn(uploadFileRequest.putObjectRequest().bucket(), "upload");
CompletableFuture<PutObjectResponse> putObjFuture = s3CrtAsyncClient.putObject(uploadFileRequest.putObjectRequest(), requestBody);
// Forward upload cancellation to CRT future
CompletableFutureUtils.forwardExceptionTo(uploadFuture, putObjFuture);
CompletableFutureUtils.forwardTransformedResultTo(putObjFuture, uploadFuture, r -> CompletedFileUpload.builder().response(r).build());
} catch (Throwable throwable) {
uploadFuture.completeExceptionally(throwable);
}
return new DefaultFileUpload(uploadFuture, progressUpdater.progress());
}
use of software.amazon.awssdk.core.async.AsyncRequestBody in project aws-sdk-java-v2 by aws.
the class DefaultS3TransferManager method upload.
@Override
public Upload upload(UploadRequest uploadRequest) {
Validate.paramNotNull(uploadRequest, "uploadRequest");
AsyncRequestBody requestBody = uploadRequest.requestBody();
CompletableFuture<CompletedUpload> uploadFuture = new CompletableFuture<>();
TransferProgressUpdater progressUpdater = new TransferProgressUpdater(uploadRequest, requestBody);
progressUpdater.transferInitiated();
requestBody = progressUpdater.wrapRequestBody(requestBody);
progressUpdater.registerCompletion(uploadFuture);
try {
assertNotUnsupportedArn(uploadRequest.putObjectRequest().bucket(), "upload");
CompletableFuture<PutObjectResponse> putObjFuture = s3CrtAsyncClient.putObject(uploadRequest.putObjectRequest(), requestBody);
// Forward upload cancellation to CRT future
CompletableFutureUtils.forwardExceptionTo(uploadFuture, putObjFuture);
CompletableFutureUtils.forwardTransformedResultTo(putObjFuture, uploadFuture, r -> CompletedUpload.builder().response(r).build());
} catch (Throwable throwable) {
uploadFuture.completeExceptionally(throwable);
}
return new DefaultUpload(uploadFuture, progressUpdater.progress());
}
use of software.amazon.awssdk.core.async.AsyncRequestBody in project aws-sdk-java-v2 by aws.
the class S3CrtClientPutObjectIntegrationTest method putObject_byteBufferBody_objectSentCorrectly.
@Test
public void putObject_byteBufferBody_objectSentCorrectly() {
byte[] data = new byte[16384];
new Random().nextBytes(data);
ByteBuffer byteBuffer = ByteBuffer.wrap(data);
AsyncRequestBody body = AsyncRequestBody.fromByteBuffer(byteBuffer);
s3Crt.putObject(r -> r.bucket(TEST_BUCKET).key(TEST_KEY), body).join();
ResponseBytes<GetObjectResponse> responseBytes = S3IntegrationTestBase.s3.getObject(r -> r.bucket(TEST_BUCKET).key(TEST_KEY), ResponseTransformer.toBytes());
byte[] expectedSum = ChecksumUtils.computeCheckSum(byteBuffer);
Assertions.assertThat(ChecksumUtils.computeCheckSum(responseBytes.asByteBuffer())).isEqualTo(expectedSum);
}
use of software.amazon.awssdk.core.async.AsyncRequestBody in project aws-sdk-java-v2 by aws.
the class S3CrtClientPutObjectIntegrationTest method putObject_customRequestBody_objectSentCorrectly.
@Test
public void putObject_customRequestBody_objectSentCorrectly() throws IOException {
Random rng = new Random();
int bufferSize = 16384;
int nBuffers = 15;
List<ByteBuffer> bodyData = Stream.generate(() -> {
byte[] data = new byte[bufferSize];
rng.nextBytes(data);
return ByteBuffer.wrap(data);
}).limit(nBuffers).collect(Collectors.toList());
long contentLength = bufferSize * nBuffers;
byte[] expectedSum = ChecksumUtils.computeCheckSum(bodyData);
Flowable<ByteBuffer> publisher = Flowable.fromIterable(bodyData);
AsyncRequestBody customRequestBody = new AsyncRequestBody() {
@Override
public Optional<Long> contentLength() {
return Optional.of(contentLength);
}
@Override
public void subscribe(Subscriber<? super ByteBuffer> subscriber) {
publisher.subscribe(subscriber);
}
};
s3Crt.putObject(r -> r.bucket(TEST_BUCKET).key(TEST_KEY), customRequestBody).join();
ResponseInputStream<GetObjectResponse> objContent = S3IntegrationTestBase.s3.getObject(r -> r.bucket(TEST_BUCKET).key(TEST_KEY), ResponseTransformer.toInputStream());
Assertions.assertThat(ChecksumUtils.computeCheckSum(objContent)).isEqualTo(expectedSum);
}
use of software.amazon.awssdk.core.async.AsyncRequestBody in project aws-sdk-java-v2 by aws.
the class Aws4EventStreamSignerTest method generateTestVector.
TestVector generateTestVector() {
return new TestVector() {
List<String> requestBody = Lists.newArrayList("A", "B", "C");
@Override
public List<String> requestBody() {
return requestBody;
}
@Override
public SdkHttpFullRequest.Builder httpFullRequest() {
// Signing key: "29dc0a760fed568677d74136ad02d315a07d31b8f321f5c43350f284dac892c";
return SdkHttpFullRequest.builder().method(SdkHttpMethod.POST).putHeader("Host", "demo.us-east-1.amazonaws.com").putHeader("content-encoding", "application/vnd.amazon.eventstream").putHeader("x-amz-content-sha256", "STREAMING-AWS4-HMAC-SHA256-EVENTS").encodedPath("/streaming").protocol("https").host("demo.us-east-1.amazonaws.com");
}
@Override
public AsyncRequestBody requestBodyPublisher() {
List<ByteBuffer> bodyBytes = requestBody.stream().map(s -> ByteBuffer.wrap(s.getBytes(StandardCharsets.UTF_8))).collect(Collectors.toList());
Publisher<ByteBuffer> bodyPublisher = Flowable.fromIterable(bodyBytes);
return AsyncRequestBody.fromPublisher(bodyPublisher);
}
@Override
public Flowable<Message> expectedMessagePublisher() {
Flowable<String> sigsHex = Flowable.just("7aabf85b765e6a4d0d500b6e968657b14726fa3e1eb7e839302728ffd77629a5", "f72aa9642f571d24a6e1ae42f10f073ad9448d8a028b6bcd82da081335adda02", "632af120435b57ec241d8bfbb12e496dfd5e2730a1a02ac0ab6eaa230ae02e9a", "c6f679ddb3af68f5e82f0cf6761244cb2338cf11e7d01a24130aea1b7c17e53e");
// The Last data frame is empty
Flowable<String> payloads = Flowable.fromIterable(requestBody).concatWith(Flowable.just(""));
return sigsHex.zipWith(payloads, new BiFunction<String, String, Message>() {
// The first Instant was used to sign the request
private int idx = 1;
@Override
public Message apply(String sig, String payload) throws Exception {
Map<String, HeaderValue> headers = new HashMap<>();
headers.put(EVENT_STREAM_DATE, HeaderValue.fromTimestamp(SIGNING_INSTANTS.get(idx++)));
headers.put(EVENT_STREAM_SIGNATURE, HeaderValue.fromByteArray(BinaryUtils.fromHex(sig)));
return new Message(headers, payload.getBytes(StandardCharsets.UTF_8));
}
});
}
};
}
Aggregations