UNPKG

aws-rfdk

Version:

Package for core render farm constructs

94 lines 11.6 kB
"use strict"; /** * 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