UNPKG

@aws-cdk-testing/cli-integ

Version:

Integration tests for the AWS CDK CLI

52 lines 9.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const client_cloudformation_1 = require("@aws-sdk/client-cloudformation"); const client_lambda_1 = require("@aws-sdk/client-lambda"); const lib_1 = require("../../../lib"); jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime (0, lib_1.integTest)('cdk drift --fail throws when drift is detected', (0, lib_1.withDefaultFixture)(async (fixture) => { await fixture.cdkDeploy('driftable', {}); // Assert that, right after deploying, there is no drift (because we just deployed it) const drift = await fixture.cdk(['drift', '--fail', fixture.fullStackName('driftable')], { verbose: false }); expect(drift).toContain('No drift detected'); // Get the Lambda, we want to now make it drift const response = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStackResourcesCommand({ StackName: fixture.fullStackName('driftable'), })); const lambdaResource = response.StackResources?.find(resource => resource.ResourceType === 'AWS::Lambda::Function'); if (!lambdaResource || !lambdaResource.PhysicalResourceId) { throw new Error('Could not find Lambda function in stack resources'); } const functionName = lambdaResource.PhysicalResourceId; // Update the Lambda function, introducing drift await fixture.aws.lambda.send(new client_lambda_1.UpdateFunctionConfigurationCommand({ FunctionName: functionName, Description: 'I\'m slowly drifting (drifting away)', })); // Wait for the stack update to complete await waitForLambdaUpdateComplete(fixture, functionName); await expect(fixture.cdk(['drift', '--fail', fixture.fullStackName('driftable')], { verbose: false })).rejects.toThrow('exited with error'); })); async function waitForLambdaUpdateComplete(fixture, functionName) { const delaySeconds = 5; const timeout = 30_000; // timeout after 30s const deadline = Date.now() + timeout; while (true) { const response = await fixture.aws.lambda.send(new client_lambda_1.GetFunctionCommand({ FunctionName: functionName, })); const lastUpdateStatus = response.Configuration?.LastUpdateStatus; if (lastUpdateStatus === 'Successful') { return; // Update completed successfully } if (lastUpdateStatus === 'Failed') { throw new Error('Lambda function update failed'); } if (Date.now() > deadline) { throw new Error(`Timed out after ${timeout / 1000} seconds.`); } // Wait before checking again await (0, lib_1.sleep)(delaySeconds * 1000); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kcmlmdC0tLWZhaWwtdGhyb3dzLXdoZW4tZHJpZnQtaXMtZGV0ZWN0ZWQuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWNkay1kcmlmdC0tLWZhaWwtdGhyb3dzLXdoZW4tZHJpZnQtaXMtZGV0ZWN0ZWQuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEVBQStFO0FBQy9FLDBEQUFnRztBQUNoRyxzQ0FBb0U7QUFFcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLElBQUEsZUFBUyxFQUNQLGdEQUFnRCxFQUNoRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXpDLHNGQUFzRjtJQUN0RixNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRTdHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUU3QywrQ0FBK0M7SUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3BELElBQUkscURBQTZCLENBQUM7UUFDaEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO0tBQzlDLENBQUMsQ0FDSCxDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQ2xELFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksS0FBSyx1QkFBdUIsQ0FDOUQsQ0FBQztJQUNGLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztJQUV2RCxnREFBZ0Q7SUFDaEQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzNCLElBQUksa0RBQWtDLENBQUM7UUFDckMsWUFBWSxFQUFFLFlBQVk7UUFDMUIsV0FBVyxFQUFFLHNDQUFzQztLQUNwRCxDQUFDLENBQ0gsQ0FBQztJQUVGLHdDQUF3QztJQUN4QyxNQUFNLDJCQUEyQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUV6RCxNQUFNLE1BQU0sQ0FDVixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDekYsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUVGLEtBQUssVUFBVSwyQkFBMkIsQ0FBQyxPQUFZLEVBQUUsWUFBb0I7SUFDM0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQjtJQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXRDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDNUMsSUFBSSxrQ0FBa0IsQ0FBQztZQUNyQixZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFDLENBQ0gsQ0FBQztRQUVGLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQztRQUVsRSxJQUFJLGdCQUFnQixLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxnQ0FBZ0M7UUFDMUMsQ0FBQztRQUVELElBQUksZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLE1BQU0sSUFBQSxXQUFLLEVBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgR2V0RnVuY3Rpb25Db21tYW5kLCBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHNsZWVwLCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgZHJpZnQgLS1mYWlsIHRocm93cyB3aGVuIGRyaWZ0IGlzIGRldGVjdGVkJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RyaWZ0YWJsZScsIHt9KTtcblxuICAgIC8vIEFzc2VydCB0aGF0LCByaWdodCBhZnRlciBkZXBsb3lpbmcsIHRoZXJlIGlzIG5vIGRyaWZ0IChiZWNhdXNlIHdlIGp1c3QgZGVwbG95ZWQgaXQpXG4gICAgY29uc3QgZHJpZnQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RyaWZ0JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnZHJpZnRhYmxlJyldLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuXG4gICAgZXhwZWN0KGRyaWZ0KS50b0NvbnRhaW4oJ05vIGRyaWZ0IGRldGVjdGVkJyk7XG5cbiAgICAvLyBHZXQgdGhlIExhbWJkYSwgd2Ugd2FudCB0byBub3cgbWFrZSBpdCBkcmlmdFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdkcmlmdGFibGUnKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgbGFtYmRhUmVzb3VyY2UgPSByZXNwb25zZS5TdGFja1Jlc291cmNlcz8uZmluZChcbiAgICAgIHJlc291cmNlID0+IHJlc291cmNlLlJlc291cmNlVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgKTtcbiAgICBpZiAoIWxhbWJkYVJlc291cmNlIHx8ICFsYW1iZGFSZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgTGFtYmRhIGZ1bmN0aW9uIGluIHN0YWNrIHJlc291cmNlcycpO1xuICAgIH1cbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBsYW1iZGFSZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWQ7XG5cbiAgICAvLyBVcGRhdGUgdGhlIExhbWJkYSBmdW5jdGlvbiwgaW50cm9kdWNpbmcgZHJpZnRcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5sYW1iZGEuc2VuZChcbiAgICAgIG5ldyBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kKHtcbiAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgIERlc2NyaXB0aW9uOiAnSVxcJ20gc2xvd2x5IGRyaWZ0aW5nIChkcmlmdGluZyBhd2F5KScsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gV2FpdCBmb3IgdGhlIHN0YWNrIHVwZGF0ZSB0byBjb21wbGV0ZVxuICAgIGF3YWl0IHdhaXRGb3JMYW1iZGFVcGRhdGVDb21wbGV0ZShmaXh0dXJlLCBmdW5jdGlvbk5hbWUpO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZml4dHVyZS5jZGsoWydkcmlmdCcsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RyaWZ0YWJsZScpXSwgeyB2ZXJib3NlOiBmYWxzZSB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgfSksXG4pO1xuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yTGFtYmRhVXBkYXRlQ29tcGxldGUoZml4dHVyZTogYW55LCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWxheVNlY29uZHMgPSA1O1xuICBjb25zdCB0aW1lb3V0ID0gMzBfMDAwOyAvLyB0aW1lb3V0IGFmdGVyIDMwc1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5sYW1iZGEuc2VuZChcbiAgICAgIG5ldyBHZXRGdW5jdGlvbkNvbW1hbmQoe1xuICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBsYXN0VXBkYXRlU3RhdHVzID0gcmVzcG9uc2UuQ29uZmlndXJhdGlvbj8uTGFzdFVwZGF0ZVN0YXR1cztcblxuICAgIGlmIChsYXN0VXBkYXRlU3RhdHVzID09PSAnU3VjY2Vzc2Z1bCcpIHtcbiAgICAgIHJldHVybjsgLy8gVXBkYXRlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICB9XG5cbiAgICBpZiAobGFzdFVwZGF0ZVN0YXR1cyA9PT0gJ0ZhaWxlZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTGFtYmRhIGZ1bmN0aW9uIHVwZGF0ZSBmYWlsZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoRGF0ZS5ub3coKSA+IGRlYWRsaW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRpbWVkIG91dCBhZnRlciAke3RpbWVvdXQgLyAxMDAwfSBzZWNvbmRzLmApO1xuICAgIH1cblxuICAgIC8vIFdhaXQgYmVmb3JlIGNoZWNraW5nIGFnYWluXG4gICAgYXdhaXQgc2xlZXAoZGVsYXlTZWNvbmRzICogMTAwMCk7XG4gIH1cbn1cbiJdfQ==