@VisibleForTesting public void addS3DirectObject(FileList.Builder builder, final AmazonS3 client, String bucket, String objectKey, RetryExecutor retryExec) { final GetObjectMetadataRequest objectMetadataRequest = new GetObjectMetadataRequest(bucket, objectKey); ObjectMetadata objectMetadata = new DefaultRetryable<ObjectMetadata>("Looking up for a single object") { @Override public ObjectMetadata call() { return client.getObjectMetadata(objectMetadataRequest); } }.executeWith(retryExec); builder.add(objectKey, objectMetadata.getContentLength()); }
if (task.getPath().isPresent()) { LOGGER.info("Start getting object with path: [{}]", task.getPath().get()); addS3DirectObject(builder, client, task.getBucket(), task.getPath().get(), retryExec);
@Test public void addS3DirectObject() { doReturn(new ObjectMetadata()).when(client).getObjectMetadata(any(GetObjectMetadataRequest.class)); FileList.Builder builder = new FileList.Builder().pathMatchPattern(""); dummyS3Plugin().addS3DirectObject(builder, client, "some_bucket", "some_prefix"); }
@Test public void addS3DirectObject_with_retry() { doThrow(new RuntimeException()).doReturn(new ObjectMetadata()) .when(client).getObjectMetadata(any(GetObjectMetadataRequest.class)); FileList.Builder builder = new FileList.Builder().pathMatchPattern(""); dummyS3Plugin().addS3DirectObject( builder, client, "some_bucket", "some_prefix", retryExecutor()); }
@Test(expected = SomeException.class) public void addS3DirectObject_on_retry_gave_up_should_throw_original_exception() { doThrow(new SomeException()).doReturn(new ObjectMetadata()) .when(client).getObjectMetadata(any(GetObjectMetadataRequest.class)); FileList.Builder builder = new FileList.Builder().pathMatchPattern(""); dummyS3Plugin().addS3DirectObject( builder, client, "some_bucket", "some_prefix", retryExecutor().withRetryLimit(0)); } }