Skip to content

Commit 7a79ecf

Browse files
authored
Support for Canned access control lists (#54)
* Add support for Canned access control lists
1 parent 5006450 commit 7a79ecf

File tree

4 files changed

+42
-10
lines changed

4 files changed

+42
-10
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.amazonaws</groupId>
88
<artifactId>amazon-sqs-java-extended-client-lib</artifactId>
9-
<version>1.1.0</version>
9+
<version>1.2.0</version>
1010
<packaging>jar</packaging>
1111
<name>Amazon SQS Extended Client Library for Java</name>
1212
<description>An extension to the Amazon SQS client that enables sending and receiving messages up to 2GB via Amazon S3.
@@ -55,7 +55,7 @@
5555
<dependency>
5656
<groupId>software.amazon.payloadoffloading</groupId>
5757
<artifactId>payloadoffloading-common</artifactId>
58-
<version>1.0.0</version>
58+
<version>1.1.0</version>
5959
</dependency>
6060

6161
<dependency>

src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClient.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,10 @@ public AmazonSQSExtendedClient(AmazonSQS sqsClient) {
121121
public AmazonSQSExtendedClient(AmazonSQS sqsClient, ExtendedClientConfiguration extendedClientConfig) {
122122
super(sqsClient);
123123
this.clientConfiguration = new ExtendedClientConfiguration(extendedClientConfig);
124-
S3Dao s3Dao = new S3Dao(clientConfiguration.getAmazonS3Client());
125-
this.payloadStore = new S3BackedPayloadStore(s3Dao, clientConfiguration.getS3BucketName(),
126-
clientConfiguration.getSSEAwsKeyManagementParams());
124+
S3Dao s3Dao = new S3Dao(clientConfiguration.getAmazonS3Client(),
125+
clientConfiguration.getSSEAwsKeyManagementParams(),
126+
clientConfiguration.getCannedAccessControlList());
127+
this.payloadStore = new S3BackedPayloadStore(s3Dao, clientConfiguration.getS3BucketName());
127128
}
128129

129130
/**

src/main/java/com/amazon/sqs/javamessaging/ExtendedClientConfiguration.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.amazon.sqs.javamessaging;
1717

1818
import com.amazonaws.services.s3.AmazonS3;
19+
import com.amazonaws.services.s3.model.CannedAccessControlList;
1920
import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams;
2021
import com.amazonaws.annotation.NotThreadSafe;
2122
import software.amazon.payloadoffloading.PayloadStorageConfiguration;
@@ -150,6 +151,12 @@ public ExtendedClientConfiguration withPayloadSupportDisabled() {
150151
return this;
151152
}
152153

154+
@Override
155+
public ExtendedClientConfiguration withCannedAccessControlList(CannedAccessControlList cannedAccessControlList) {
156+
this.setCannedAccessControlList(cannedAccessControlList);
157+
return this;
158+
}
159+
153160
/**
154161
* Enables support for large-payload messages.
155162
*

src/test/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClientTest.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@
2020
import java.util.stream.IntStream;
2121

2222
import com.amazonaws.services.s3.AmazonS3;
23-
import com.amazonaws.services.s3.model.GetObjectRequest;
24-
import com.amazonaws.services.s3.model.PutObjectRequest;
25-
import com.amazonaws.services.s3.model.S3Object;
26-
import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams;
23+
import com.amazonaws.services.s3.model.*;
2724
import com.amazonaws.services.sqs.AmazonSQS;
2825
import com.amazonaws.services.sqs.AmazonSQSClient;
2926
import com.amazonaws.services.sqs.model.*;
@@ -36,7 +33,16 @@
3633
import software.amazon.payloadoffloading.PayloadS3Pointer;
3734

3835
import static org.mockito.Matchers.eq;
39-
import static org.mockito.Mockito.*;
36+
import static org.mockito.Mockito.mock;
37+
import static org.mockito.Mockito.isA;
38+
import static org.mockito.Mockito.when;
39+
import static org.mockito.Mockito.spy;
40+
import static org.mockito.Mockito.verify;
41+
import static org.mockito.Mockito.never;
42+
import static org.mockito.Mockito.verifyZeroInteractions;
43+
import static org.mockito.Mockito.times;
44+
import static org.mockito.Mockito.any;
45+
import static org.mockito.Mockito.anyString;
4046

4147
/**
4248
* Tests the AmazonSQSExtendedClient class.
@@ -489,6 +495,24 @@ public void testDefaultExtendedClientDeletesObjectsFromS3UponDeleteBatch() {
489495
verify(mockS3, times(batchSize)).deleteObject(eq(S3_BUCKET_NAME), anyString());
490496
}
491497

498+
@Test
499+
public void testWhenSendMessageWIthCannedAccessControlListDefined() {
500+
CannedAccessControlList expected = CannedAccessControlList.BucketOwnerFullControl;
501+
String messageBody = generateStringWithLength(MORE_THAN_SQS_SIZE_LIMIT);
502+
ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration()
503+
.withPayloadSupportEnabled(mockS3, S3_BUCKET_NAME).withCannedAccessControlList(expected);
504+
AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mockSqsBackend, extendedClientConfiguration));
505+
506+
SendMessageRequest messageRequest = new SendMessageRequest(SQS_QUEUE_URL, messageBody);
507+
sqsExtended.sendMessage(messageRequest);
508+
509+
ArgumentCaptor<PutObjectRequest> captor = ArgumentCaptor.forClass(PutObjectRequest.class);
510+
511+
verify(mockS3).putObject(captor.capture());
512+
513+
Assert.assertEquals(expected, captor.getValue().getCannedAcl());
514+
}
515+
492516
private void testReceiveMessage_when_MessageIsLarge(String reservedAttributeName) throws Exception {
493517
Message message = new Message().addMessageAttributesEntry(reservedAttributeName, mock(MessageAttributeValue.class));
494518
String pointer = new PayloadS3Pointer(S3_BUCKET_NAME, "S3Key").toJson();

0 commit comments

Comments
 (0)