aws-rfdk
Version:
Package for core render farm constructs
94 lines • 11.6 kB
JavaScript
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
Object.defineProperty(exports, "__esModule", { value: true });
const aws_cdk_lib_1 = require("aws-cdk-lib");
const assertions_1 = require("aws-cdk-lib/assertions");
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
const aws_ecs_1 = require("aws-cdk-lib/aws-ecs");
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
const wait_for_stable_service_1 = require("../lib/wait-for-stable-service");
const test_helper_1 = require("./test-helper");
describe('WaitForStableService', () => {
let app;
let stack;
let isolatedStack;
let cluster;
let taskDefinition;
let service;
beforeEach(() => {
app = new aws_cdk_lib_1.App();
stack = new aws_cdk_lib_1.Stack(app, 'Stack');
isolatedStack = new aws_cdk_lib_1.Stack(app, 'IsolatedStack');
cluster = new aws_ecs_1.Cluster(stack, 'Cluster');
cluster.addCapacity('ASG', {
vpcSubnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS },
instanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.C5, aws_ec2_1.InstanceSize.LARGE),
minCapacity: 1,
maxCapacity: 1,
});
taskDefinition = new aws_ecs_1.Ec2TaskDefinition(stack, 'RCSTask');
taskDefinition.addContainer('Test', {
image: aws_ecs_1.ContainerImage.fromAsset(__dirname),
memoryLimitMiB: 7500,
});
service = new aws_ecs_1.Ec2Service(stack, 'Service', {
cluster,
taskDefinition,
});
});
test('creates a custom resource', () => {
// WHEN
new wait_for_stable_service_1.WaitForStableService(isolatedStack, 'WaitForStableService', {
service,
});
// THEN
assertions_1.Template.fromStack(isolatedStack).hasResourceProperties('Custom::RFDK_WaitForStableService', {
cluster: isolatedStack.resolve(cluster.clusterArn),
services: [isolatedStack.resolve(service.serviceArn)],
});
});
test('creates lambda correctly', () => {
// WHEN
new wait_for_stable_service_1.WaitForStableService(isolatedStack, 'WaitForStableService', {
service,
});
(0, test_helper_1.resourcePropertiesCountIs)(isolatedStack, 'AWS::Lambda::Function', {
Handler: 'wait-for-stable-service.wait',
Environment: {
Variables: {
DEBUG: 'false',
},
},
Runtime: 'nodejs18.x',
Timeout: 900,
}, 1);
});
test('adds policies to the lambda role', () => {
// WHEN
new wait_for_stable_service_1.WaitForStableService(isolatedStack, 'WaitForStableService', {
service,
});
// THEN
assertions_1.Template.fromStack(isolatedStack).hasResourceProperties('AWS::IAM::Role', {
ManagedPolicyArns: assertions_1.Match.arrayWith([
isolatedStack.resolve(aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole').managedPolicyArn),
]),
Policies: [{
PolicyDocument: assertions_1.Match.objectLike({
Statement: [{
Action: 'ecs:DescribeServices',
Effect: 'Allow',
Resource: assertions_1.Match.arrayWith([
isolatedStack.resolve(cluster.clusterArn),
isolatedStack.resolve(service.serviceArn),
]),
}],
}),
}],
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1mb3Itc3RhYmxlLXNlcnZpY2UudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndhaXQtZm9yLXN0YWJsZS1zZXJ2aWNlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUFFSCw2Q0FHcUI7QUFDckIsdURBR2dDO0FBQ2hDLGlEQUs2QjtBQUM3QixpREFLNkI7QUFDN0IsaURBRTZCO0FBQzdCLDRFQUV3QztBQUN4QywrQ0FBMEQ7QUFFMUQsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtJQUNwQyxJQUFJLEdBQVEsQ0FBQztJQUNiLElBQUksS0FBWSxDQUFDO0lBQ2pCLElBQUksYUFBb0IsQ0FBQztJQUN6QixJQUFJLE9BQWdCLENBQUM7SUFDckIsSUFBSSxjQUFpQyxDQUFDO0lBQ3RDLElBQUksT0FBbUIsQ0FBQztJQUV4QixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsR0FBRyxHQUFHLElBQUksaUJBQUcsRUFBRSxDQUFDO1FBQ2hCLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLGFBQWEsR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQ3pCLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxvQkFBVSxDQUFDLG1CQUFtQixFQUFFO1lBQzFELFlBQVksRUFBRSxzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQztZQUNuRSxXQUFXLEVBQUUsQ0FBQztZQUNkLFdBQVcsRUFBRSxDQUFDO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsY0FBYyxHQUFHLElBQUksMkJBQWlCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELGNBQWMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ2xDLEtBQUssRUFBRSx3QkFBYyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7WUFDMUMsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLElBQUksb0JBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFO1lBQ3pDLE9BQU87WUFDUCxjQUFjO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLE9BQU87UUFDUCxJQUFJLDhDQUFvQixDQUFDLGFBQWEsRUFBRSxzQkFBc0IsRUFBRTtZQUM5RCxPQUFPO1NBQ1IsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLHFCQUFRLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLG1DQUFtQyxFQUFFO1lBQzNGLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDbEQsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ3BDLE9BQU87UUFDUCxJQUFJLDhDQUFvQixDQUFDLGFBQWEsRUFBRSxzQkFBc0IsRUFBRTtZQUM5RCxPQUFPO1NBQ1IsQ0FBQyxDQUFDO1FBRUgsSUFBQSx1Q0FBeUIsRUFBQyxhQUFhLEVBQUUsdUJBQXVCLEVBQUU7WUFDaEUsT0FBTyxFQUFFLDhCQUE4QjtZQUN2QyxXQUFXLEVBQUU7Z0JBQ1gsU0FBUyxFQUFFO29CQUNULEtBQUssRUFBRSxPQUFPO2lCQUNmO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsWUFBWTtZQUNyQixPQUFPLEVBQUUsR0FBRztTQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7UUFDNUMsT0FBTztRQUNQLElBQUksOENBQW9CLENBQUMsYUFBYSxFQUFFLHNCQUFzQixFQUFFO1lBQzlELE9BQU87U0FDUixDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AscUJBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEUsaUJBQWlCLEVBQUUsa0JBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQ2pDLGFBQWEsQ0FBQyxPQUFPLENBQUMsdUJBQWEsQ0FBQyx3QkFBd0IsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO2FBQzNILENBQUM7WUFDRixRQUFRLEVBQUUsQ0FBQztvQkFDVCxjQUFjLEVBQUUsa0JBQUssQ0FBQyxVQUFVLENBQUM7d0JBQy9CLFNBQVMsRUFBRSxDQUFDO2dDQUNWLE1BQU0sRUFBRSxzQkFBc0I7Z0NBQzlCLE1BQU0sRUFBRSxPQUFPO2dDQUNmLFFBQVEsRUFBRSxrQkFBSyxDQUFDLFNBQVMsQ0FBQztvQ0FDeEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO29DQUN6QyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7aUNBQzFDLENBQUM7NkJBQ0gsQ0FBQztxQkFDSCxDQUFDO2lCQUNILENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHtcbiAgQXBwLFxuICBTdGFjayxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgTWF0Y2gsXG4gIFRlbXBsYXRlLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7XG4gIEluc3RhbmNlQ2xhc3MsXG4gIEluc3RhbmNlU2l6ZSxcbiAgSW5zdGFuY2VUeXBlLFxuICBTdWJuZXRUeXBlLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7XG4gIENsdXN0ZXIsXG4gIENvbnRhaW5lckltYWdlLFxuICBFYzJTZXJ2aWNlLFxuICBFYzJUYXNrRGVmaW5pdGlvbixcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQge1xuICBNYW5hZ2VkUG9saWN5LFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7XG4gIFdhaXRGb3JTdGFibGVTZXJ2aWNlLFxufSBmcm9tICcuLi9saWIvd2FpdC1mb3Itc3RhYmxlLXNlcnZpY2UnO1xuaW1wb3J0IHsgcmVzb3VyY2VQcm9wZXJ0aWVzQ291bnRJcyB9IGZyb20gJy4vdGVzdC1oZWxwZXInO1xuXG5kZXNjcmliZSgnV2FpdEZvclN0YWJsZVNlcnZpY2UnLCAoKSA9PiB7XG4gIGxldCBhcHA6IEFwcDtcbiAgbGV0IHN0YWNrOiBTdGFjaztcbiAgbGV0IGlzb2xhdGVkU3RhY2s6IFN0YWNrO1xuICBsZXQgY2x1c3RlcjogQ2x1c3RlcjtcbiAgbGV0IHRhc2tEZWZpbml0aW9uOiBFYzJUYXNrRGVmaW5pdGlvbjtcbiAgbGV0IHNlcnZpY2U6IEVjMlNlcnZpY2U7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gbmV3IEFwcCgpO1xuICAgIHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1N0YWNrJyk7XG4gICAgaXNvbGF0ZWRTdGFjayA9IG5ldyBTdGFjayhhcHAsICdJc29sYXRlZFN0YWNrJyk7XG4gICAgY2x1c3RlciA9IG5ldyBDbHVzdGVyKHN0YWNrLCAnQ2x1c3RlcicpO1xuICAgIGNsdXN0ZXIuYWRkQ2FwYWNpdHkoJ0FTRycsIHtcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLkM1LCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICAgICAgbWluQ2FwYWNpdHk6IDEsXG4gICAgICBtYXhDYXBhY2l0eTogMSxcbiAgICB9KTtcbiAgICB0YXNrRGVmaW5pdGlvbiA9IG5ldyBFYzJUYXNrRGVmaW5pdGlvbihzdGFjaywgJ1JDU1Rhc2snKTtcbiAgICB0YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoJ1Rlc3QnLCB7XG4gICAgICBpbWFnZTogQ29udGFpbmVySW1hZ2UuZnJvbUFzc2V0KF9fZGlybmFtZSksXG4gICAgICBtZW1vcnlMaW1pdE1pQjogNzUwMCxcbiAgICB9KTtcbiAgICBzZXJ2aWNlID0gbmV3IEVjMlNlcnZpY2Uoc3RhY2ssICdTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcixcbiAgICAgIHRhc2tEZWZpbml0aW9uLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIGEgY3VzdG9tIHJlc291cmNlJywgKCkgPT4ge1xuICAgIC8vIFdIRU5cbiAgICBuZXcgV2FpdEZvclN0YWJsZVNlcnZpY2UoaXNvbGF0ZWRTdGFjaywgJ1dhaXRGb3JTdGFibGVTZXJ2aWNlJywge1xuICAgICAgc2VydmljZSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBUZW1wbGF0ZS5mcm9tU3RhY2soaXNvbGF0ZWRTdGFjaykuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdDdXN0b206OlJGREtfV2FpdEZvclN0YWJsZVNlcnZpY2UnLCB7XG4gICAgICBjbHVzdGVyOiBpc29sYXRlZFN0YWNrLnJlc29sdmUoY2x1c3Rlci5jbHVzdGVyQXJuKSxcbiAgICAgIHNlcnZpY2VzOiBbaXNvbGF0ZWRTdGFjay5yZXNvbHZlKHNlcnZpY2Uuc2VydmljZUFybildLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIGxhbWJkYSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgLy8gV0hFTlxuICAgIG5ldyBXYWl0Rm9yU3RhYmxlU2VydmljZShpc29sYXRlZFN0YWNrLCAnV2FpdEZvclN0YWJsZVNlcnZpY2UnLCB7XG4gICAgICBzZXJ2aWNlLFxuICAgIH0pO1xuXG4gICAgcmVzb3VyY2VQcm9wZXJ0aWVzQ291bnRJcyhpc29sYXRlZFN0YWNrLCAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgSGFuZGxlcjogJ3dhaXQtZm9yLXN0YWJsZS1zZXJ2aWNlLndhaXQnLFxuICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgVmFyaWFibGVzOiB7XG4gICAgICAgICAgREVCVUc6ICdmYWxzZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgUnVudGltZTogJ25vZGVqczE4LngnLFxuICAgICAgVGltZW91dDogOTAwLFxuICAgIH0sIDEpO1xuICB9KTtcblxuICB0ZXN0KCdhZGRzIHBvbGljaWVzIHRvIHRoZSBsYW1iZGEgcm9sZScsICgpID0+IHtcbiAgICAvLyBXSEVOXG4gICAgbmV3IFdhaXRGb3JTdGFibGVTZXJ2aWNlKGlzb2xhdGVkU3RhY2ssICdXYWl0Rm9yU3RhYmxlU2VydmljZScsIHtcbiAgICAgIHNlcnZpY2UsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgVGVtcGxhdGUuZnJvbVN0YWNrKGlzb2xhdGVkU3RhY2spLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpJQU06OlJvbGUnLCB7XG4gICAgICBNYW5hZ2VkUG9saWN5QXJuczogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgaXNvbGF0ZWRTdGFjay5yZXNvbHZlKE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJykubWFuYWdlZFBvbGljeUFybiksXG4gICAgICBdKSxcbiAgICAgIFBvbGljaWVzOiBbe1xuICAgICAgICBQb2xpY3lEb2N1bWVudDogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgU3RhdGVtZW50OiBbe1xuICAgICAgICAgICAgQWN0aW9uOiAnZWNzOkRlc2NyaWJlU2VydmljZXMnLFxuICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgUmVzb3VyY2U6IE1hdGNoLmFycmF5V2l0aChbXG4gICAgICAgICAgICAgIGlzb2xhdGVkU3RhY2sucmVzb2x2ZShjbHVzdGVyLmNsdXN0ZXJBcm4pLFxuICAgICAgICAgICAgICBpc29sYXRlZFN0YWNrLnJlc29sdmUoc2VydmljZS5zZXJ2aWNlQXJuKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIH1dLFxuICAgICAgICB9KSxcbiAgICAgIH1dLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
;