@aws-cdk-testing/cli-integ
Version:
Integration tests for the AWS CDK CLI
43 lines • 7.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getStackNameFromArn = getStackNameFromArn;
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
const lib_1 = require("../../../lib");
const regions_1 = require("../../../lib/regions");
(0, lib_1.integTest)('cdk refactor - detects refactoring changes and executes the refactor', (0, lib_1.withSpecificFixture)('refactoring', async (fixture) => {
// First, deploy the stacks
await fixture.cdkDeploy('bucket-stack');
const stackArn = await fixture.cdkDeploy('basic', {
modEnv: {
BASIC_QUEUE_LOGICAL_ID: 'OldName',
},
});
// Then see if the refactoring tool detects the change
const stdErr = await fixture.cdkRefactor({
options: ['--unstable=refactor', '--force'],
allowErrExit: true,
// Making sure the synthesized stack has a queue with
// the new name so that a refactor is detected
modEnv: {
BASIC_QUEUE_LOGICAL_ID: 'NewName',
},
});
expect(stdErr).toMatch('Stack refactor complete');
const stackDescription = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStackResourcesCommand({
StackName: getStackNameFromArn(stackArn),
}));
const resources = Object.fromEntries((stackDescription.StackResources ?? []).map((resource) => [resource.LogicalResourceId, resource]));
expect(resources.NewName57B171FE).toBeDefined();
// CloudFormation may complete the refactoring, while the stack is still in the "UPDATE_IN_PROGRESS" state.
// Give it a couple of seconds to finish the update.
await new Promise((resolve) => setTimeout(resolve, 2000));
}, { aws: { regions: regions_1.STACK_REFACTORING_REGIONS } }));
function getStackNameFromArn(stackArn) {
// Example ARN: arn:aws:cloudformation:region:account-id:stack/stack-name/guid
const arnParts = stackArn.split(':');
const resource = arnParts[5]; // "stack/stack-name/guid"
const resourceParts = resource.split('/');
// The stack name is the second part: ["stack", "stack-name", "guid"]
return resourceParts[1];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLW5vLWFtYmlndWl0aWVzLWV4ZWN1dGlvbi5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstcmVmYWN0b3Itbm8tYW1iaWd1aXRpZXMtZXhlY3V0aW9uLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdEQSxrREFPQztBQXZERCwwRUFBbUc7QUFDbkcsc0NBQThEO0FBQzlELGtEQUFpRTtBQUVqRSxJQUFBLGVBQVMsRUFDUCxzRUFBc0UsRUFDdEUsSUFBQSx5QkFBbUIsRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELDJCQUEyQjtJQUMzQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtRQUNoRCxNQUFNLEVBQUU7WUFDTixzQkFBc0IsRUFBRSxTQUFTO1NBQ2xDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsc0RBQXNEO0lBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN2QyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLENBQUM7UUFDM0MsWUFBWSxFQUFFLElBQUk7UUFDbEIscURBQXFEO1FBQ3JELDhDQUE4QztRQUM5QyxNQUFNLEVBQUU7WUFDTixzQkFBc0IsRUFBRSxTQUFTO1NBQ2xDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBRWxELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzVELElBQUkscURBQTZCLENBQUM7UUFDaEMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztLQUN6QyxDQUFDLENBQ0gsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDekMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFrQixFQUFFLFFBQVEsQ0FBNEIsQ0FDakYsQ0FDRixDQUFDO0lBRUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUVoRCwyR0FBMkc7SUFDM0csb0RBQW9EO0lBQ3BELE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsbUNBQXlCLEVBQUUsRUFBRSxDQUFDLENBQ3BELENBQUM7QUFFRixTQUFnQixtQkFBbUIsQ0FBQyxRQUFnQjtJQUNsRCw4RUFBOEU7SUFDOUUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7SUFDeEQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxxRUFBcUU7SUFDckUsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kLCB0eXBlIFN0YWNrUmVzb3VyY2UgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoU3BlY2lmaWNGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCB7IFNUQUNLX1JFRkFDVE9SSU5HX1JFR0lPTlMgfSBmcm9tICcuLi8uLi8uLi9saWIvcmVnaW9ucyc7XG5cbmludGVnVGVzdChcbiAgJ2NkayByZWZhY3RvciAtIGRldGVjdHMgcmVmYWN0b3JpbmcgY2hhbmdlcyBhbmQgZXhlY3V0ZXMgdGhlIHJlZmFjdG9yJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncmVmYWN0b3JpbmcnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEZpcnN0LCBkZXBsb3kgdGhlIHN0YWNrc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidWNrZXQtc3RhY2snKTtcbiAgICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdiYXNpYycsIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBCQVNJQ19RVUVVRV9MT0dJQ0FMX0lEOiAnT2xkTmFtZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gVGhlbiBzZWUgaWYgdGhlIHJlZmFjdG9yaW5nIHRvb2wgZGV0ZWN0cyB0aGUgY2hhbmdlXG4gICAgY29uc3Qgc3RkRXJyID0gYXdhaXQgZml4dHVyZS5jZGtSZWZhY3Rvcih7XG4gICAgICBvcHRpb25zOiBbJy0tdW5zdGFibGU9cmVmYWN0b3InLCAnLS1mb3JjZSddLFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgLy8gTWFraW5nIHN1cmUgdGhlIHN5bnRoZXNpemVkIHN0YWNrIGhhcyBhIHF1ZXVlIHdpdGhcbiAgICAgIC8vIHRoZSBuZXcgbmFtZSBzbyB0aGF0IGEgcmVmYWN0b3IgaXMgZGV0ZWN0ZWRcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBCQVNJQ19RVUVVRV9MT0dJQ0FMX0lEOiAnTmV3TmFtZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0ZEVycikudG9NYXRjaCgnU3RhY2sgcmVmYWN0b3IgY29tcGxldGUnKTtcblxuICAgIGNvbnN0IHN0YWNrRGVzY3JpcHRpb24gPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBnZXRTdGFja05hbWVGcm9tQXJuKHN0YWNrQXJuKSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCByZXNvdXJjZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAoc3RhY2tEZXNjcmlwdGlvbi5TdGFja1Jlc291cmNlcyA/PyBbXSkubWFwKFxuICAgICAgICAocmVzb3VyY2UpID0+IFtyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCEsIHJlc291cmNlXSBhcyBbc3RyaW5nLCBTdGFja1Jlc291cmNlXSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXNvdXJjZXMuTmV3TmFtZTU3QjE3MUZFKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgLy8gQ2xvdWRGb3JtYXRpb24gbWF5IGNvbXBsZXRlIHRoZSByZWZhY3RvcmluZywgd2hpbGUgdGhlIHN0YWNrIGlzIHN0aWxsIGluIHRoZSBcIlVQREFURV9JTl9QUk9HUkVTU1wiIHN0YXRlLlxuICAgIC8vIEdpdmUgaXQgYSBjb3VwbGUgb2Ygc2Vjb25kcyB0byBmaW5pc2ggdGhlIHVwZGF0ZS5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDAwKSk7XG4gIH0sIHsgYXdzOiB7IHJlZ2lvbnM6IFNUQUNLX1JFRkFDVE9SSU5HX1JFR0lPTlMgfSB9KSxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja05hbWVGcm9tQXJuKHN0YWNrQXJuOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBFeGFtcGxlIEFSTjogYXJuOmF3czpjbG91ZGZvcm1hdGlvbjpyZWdpb246YWNjb3VudC1pZDpzdGFjay9zdGFjay1uYW1lL2d1aWRcbiAgY29uc3QgYXJuUGFydHMgPSBzdGFja0Fybi5zcGxpdCgnOicpO1xuICBjb25zdCByZXNvdXJjZSA9IGFyblBhcnRzWzVdOyAvLyBcInN0YWNrL3N0YWNrLW5hbWUvZ3VpZFwiXG4gIGNvbnN0IHJlc291cmNlUGFydHMgPSByZXNvdXJjZS5zcGxpdCgnLycpO1xuICAvLyBUaGUgc3RhY2sgbmFtZSBpcyB0aGUgc2Vjb25kIHBhcnQ6IFtcInN0YWNrXCIsIFwic3RhY2stbmFtZVwiLCBcImd1aWRcIl1cbiAgcmV0dXJuIHJlc291cmNlUGFydHNbMV07XG59XG4iXX0=