diff --git a/packages/@aws-cdk/aws-sqs/lib/validate-props.ts b/packages/@aws-cdk/aws-sqs/lib/validate-props.ts index 3d7781fabd957..8a1204e21f858 100644 --- a/packages/@aws-cdk/aws-sqs/lib/validate-props.ts +++ b/packages/@aws-cdk/aws-sqs/lib/validate-props.ts @@ -1,3 +1,4 @@ +import { Token } from '@aws-cdk/core'; import { QueueProps } from './index'; export function validateProps(props: QueueProps) { @@ -10,7 +11,7 @@ export function validateProps(props: QueueProps) { } function validateRange(label: string, value: number | undefined, minValue: number, maxValue: number, unit?: string) { - if (value === undefined) { return; } + if (value === undefined || Token.isUnresolved(value)) { return; } const unitSuffix = unit ? ` ${unit}` : ''; if (value < minValue) { throw new Error(`${label} must be ${minValue}${unitSuffix} or more, but ${value} was provided`); } if (value > maxValue) { throw new Error(`${label} must be ${maxValue}${unitSuffix} of less, but ${value} was provided`); } diff --git a/packages/@aws-cdk/aws-sqs/test/test.sqs.ts b/packages/@aws-cdk/aws-sqs/test/test.sqs.ts index baef7fa8bb2e4..15a67e269bf3a 100644 --- a/packages/@aws-cdk/aws-sqs/test/test.sqs.ts +++ b/packages/@aws-cdk/aws-sqs/test/test.sqs.ts @@ -1,7 +1,7 @@ import { expect, haveResource } from '@aws-cdk/assert'; import * as iam from '@aws-cdk/aws-iam'; import * as kms from '@aws-cdk/aws-kms'; -import { Duration, Stack } from '@aws-cdk/core'; +import { CfnParameter, Duration, Stack } from '@aws-cdk/core'; import { Test } from 'nodeunit'; import * as sqs from '../lib'; @@ -54,6 +54,58 @@ export = { test.done(); }, + 'message retention period must be between 1 minute to 14 days'(test: Test) { + // GIVEN + const stack = new Stack(); + + // THEN + test.throws(() => new sqs.Queue(stack, 'MyQueue', { + retentionPeriod: Duration.seconds(30), + }), /message retention period must be 60 seconds or more/); + + test.throws(() => new sqs.Queue(stack, 'AnotherQueue', { + retentionPeriod: Duration.days(15), + }), /message retention period must be 1209600 seconds of less/); + + test.done(); + }, + + 'message retention period can be provided as a parameter'(test: Test) { + // GIVEN + const stack = new Stack(); + const parameter = new CfnParameter(stack, 'my-retention-period', { + type: 'Number', + default: 30, + }); + + // WHEN + new sqs.Queue(stack, 'MyQueue', { + retentionPeriod: Duration.seconds(parameter.valueAsNumber), + }); + + // THEN + expect(stack).toMatch({ + 'Parameters': { + 'myretentionperiod': { + 'Type': 'Number', + 'Default': 30, + }, + }, + 'Resources': { + 'MyQueueE6CA6235': { + 'Type': 'AWS::SQS::Queue', + 'Properties': { + 'MessageRetentionPeriod': { + 'Ref': 'myretentionperiod', + }, + }, + }, + }, + }); + + test.done(); + }, + 'addToPolicy will automatically create a policy for this queue'(test: Test) { const stack = new Stack(); const queue = new sqs.Queue(stack, 'MyQueue');