Skip to content

Commit

Permalink
Support for Canned access control lists (#54)
Browse files Browse the repository at this point in the history
* Add support for Canned access control lists
  • Loading branch information
adam-aws committed Oct 6, 2020
1 parent 5006450 commit 7a79ecf
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 10 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Expand Up @@ -6,7 +6,7 @@

<groupId>com.amazonaws</groupId>
<artifactId>amazon-sqs-java-extended-client-lib</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>
<packaging>jar</packaging>
<name>Amazon SQS Extended Client Library for Java</name>
<description>An extension to the Amazon SQS client that enables sending and receiving messages up to 2GB via Amazon S3.
Expand Down Expand Up @@ -55,7 +55,7 @@
<dependency>
<groupId>software.amazon.payloadoffloading</groupId>
<artifactId>payloadoffloading-common</artifactId>
<version>1.0.0</version>
<version>1.1.0</version>
</dependency>

<dependency>
Expand Down
Expand Up @@ -121,9 +121,10 @@ public AmazonSQSExtendedClient(AmazonSQS sqsClient) {
public AmazonSQSExtendedClient(AmazonSQS sqsClient, ExtendedClientConfiguration extendedClientConfig) {
super(sqsClient);
this.clientConfiguration = new ExtendedClientConfiguration(extendedClientConfig);
S3Dao s3Dao = new S3Dao(clientConfiguration.getAmazonS3Client());
this.payloadStore = new S3BackedPayloadStore(s3Dao, clientConfiguration.getS3BucketName(),
clientConfiguration.getSSEAwsKeyManagementParams());
S3Dao s3Dao = new S3Dao(clientConfiguration.getAmazonS3Client(),
clientConfiguration.getSSEAwsKeyManagementParams(),
clientConfiguration.getCannedAccessControlList());
this.payloadStore = new S3BackedPayloadStore(s3Dao, clientConfiguration.getS3BucketName());
}

/**
Expand Down
Expand Up @@ -16,6 +16,7 @@
package com.amazon.sqs.javamessaging;

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams;
import com.amazonaws.annotation.NotThreadSafe;
import software.amazon.payloadoffloading.PayloadStorageConfiguration;
Expand Down Expand Up @@ -150,6 +151,12 @@ public ExtendedClientConfiguration withPayloadSupportDisabled() {
return this;
}

@Override
public ExtendedClientConfiguration withCannedAccessControlList(CannedAccessControlList cannedAccessControlList) {
this.setCannedAccessControlList(cannedAccessControlList);
return this;
}

/**
* Enables support for large-payload messages.
*
Expand Down
Expand Up @@ -20,10 +20,7 @@
import java.util.stream.IntStream;

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClient;
import com.amazonaws.services.sqs.model.*;
Expand All @@ -36,7 +33,16 @@
import software.amazon.payloadoffloading.PayloadS3Pointer;

import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.isA;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyString;

/**
* Tests the AmazonSQSExtendedClient class.
Expand Down Expand Up @@ -489,6 +495,24 @@ public void testDefaultExtendedClientDeletesObjectsFromS3UponDeleteBatch() {
verify(mockS3, times(batchSize)).deleteObject(eq(S3_BUCKET_NAME), anyString());
}

@Test
public void testWhenSendMessageWIthCannedAccessControlListDefined() {
CannedAccessControlList expected = CannedAccessControlList.BucketOwnerFullControl;
String messageBody = generateStringWithLength(MORE_THAN_SQS_SIZE_LIMIT);
ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration()
.withPayloadSupportEnabled(mockS3, S3_BUCKET_NAME).withCannedAccessControlList(expected);
AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mockSqsBackend, extendedClientConfiguration));

SendMessageRequest messageRequest = new SendMessageRequest(SQS_QUEUE_URL, messageBody);
sqsExtended.sendMessage(messageRequest);

ArgumentCaptor<PutObjectRequest> captor = ArgumentCaptor.forClass(PutObjectRequest.class);

verify(mockS3).putObject(captor.capture());

Assert.assertEquals(expected, captor.getValue().getCannedAcl());
}

private void testReceiveMessage_when_MessageIsLarge(String reservedAttributeName) throws Exception {
Message message = new Message().addMessageAttributesEntry(reservedAttributeName, mock(MessageAttributeValue.class));
String pointer = new PayloadS3Pointer(S3_BUCKET_NAME, "S3Key").toJson();
Expand Down

0 comments on commit 7a79ecf

Please sign in to comment.