Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions packages/aws-cdk-lib/aws-sqs/lib/queue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ export interface QueueProps {
/**
* The limit of how many bytes that a message can contain before Amazon SQS rejects it.
*
* You can specify an integer value from 1024 bytes (1 KiB) to 262144 bytes
* (256 KiB). The default value is 262144 (256 KiB).
* You can specify an integer value from 1024 bytes (1 KiB) to 1048576 bytes
* (1 MiB). The default value is 1048576 (1 MiB).
*
* @default 256KiB
* @default 1MiB
*/
readonly maxMessageSizeBytes?: number;

Expand Down
4 changes: 2 additions & 2 deletions packages/aws-cdk-lib/aws-sqs/lib/validate-queue-props.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ const queueValidationRules: ValidationRule<QueueProps>[] = [
message: (props) => `delivery delay must be between 0 and 900 seconds, but ${props.deliveryDelay?.toSeconds()} was provided`,
},
{
condition: (props) => validateRange(props.maxMessageSizeBytes, 1_024, 262_144),
message: (props) => `maximum message size must be between 1,024 and 262,144 bytes, but ${props.maxMessageSizeBytes} was provided`,
condition: (props) => validateRange(props.maxMessageSizeBytes, 1_024, 1_048_576),
message: (props) => `maximum message size must be between 1,024 and 1,048,576 bytes, but ${props.maxMessageSizeBytes} was provided`,
},
{
condition: (props) => validateRange(props.retentionPeriod?.toSeconds(), 60, 1_209_600),
Expand Down
49 changes: 49 additions & 0 deletions packages/aws-cdk-lib/aws-sqs/test/sqs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,55 @@ test('message retention period can be provided as a parameter', () => {
});
});

test.each([
{ size: 1023, valid: false, description: 'just below lower bound' },
{ size: 1024, valid: true, description: 'at lower bound' },
{ size: 1048576, valid: true, description: 'at upper bound' },
{ size: 1048577, valid: false, description: 'just above upper bound' },
])('maxMessageSizeBytes validation for $size bytes ($description)', ({ size, valid }) => {
const stack = new Stack();
const constructId = `QueueWithSize${size}`;
const action = () => new sqs.Queue(stack, constructId, { maxMessageSizeBytes: size });

if (valid) {
expect(action).not.toThrow();
} else {
expect(action).toThrow(`Queue initialization failed due to the following validation error(s):\n- maximum message size must be between 1,024 and 1,048,576 bytes, but ${size} was provided`);
}
});

test('maxMessageSizeBytes works with CDK tokens', () => {
const stack = new Stack();
const parameter = new CfnParameter(stack, 'MessageSize', { type: 'Number' });

// Should not throw for tokens (validation skipped)
expect(() => new sqs.Queue(stack, 'TokenQueue', {
maxMessageSizeBytes: parameter.valueAsNumber,
})).not.toThrow();
});

test('multiple validation errors include maxMessageSizeBytes', () => {
const stack = new Stack();

expect(() => new sqs.Queue(stack, 'MultiError', {
maxMessageSizeBytes: 2000000,
retentionPeriod: Duration.seconds(30),
})).toThrow(/maximum message size must be between 1,024 and 1,048,576 bytes.*message retention period must be between 60 and 1,209,600 seconds/s);
});

test('maxMessageSizeBytes synthesizes correct CloudFormation', () => {
const stack = new Stack();

new sqs.Queue(stack, 'LargeMessageQueue', {
maxMessageSizeBytes: 1048576,
});

const template = Template.fromStack(stack);
template.hasResourceProperties('AWS::SQS::Queue', {
MaximumMessageSize: 1048576,
});
});

test('addToPolicy will automatically create a policy for this queue', () => {
const stack = new Stack();
const queue = new sqs.Queue(stack, 'MyQueue');
Expand Down
Loading