UNPKG

@aws-cdk-testing/cli-integ

Version:

Integration tests for the AWS CDK CLI

69 lines 11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getStackInfoFromArn = getStackInfoFromArn; const fs = require("node:fs"); const os = require("node:os"); const path = require("node:path"); 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, overriding ambiguities', (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', ADDITIONAL_QUEUE_LOGICAL_ID: 'AdditionalOldName', }, }); const stackInfo = getStackInfoFromArn(stackArn); const stackName = stackInfo.name; const overrides = { environments: [ { account: stackInfo.account, region: stackInfo.region, resources: { [`${stackName}/OldName/Resource`]: `${stackName}/NewName/Resource`, [`${stackName}/AdditionalOldName/Resource`]: `${stackName}/AdditionalNewName/Resource`, }, }, ], }; const overridesPath = path.join(os.tmpdir(), `overrides-${Date.now()}.json`); fs.writeFileSync(overridesPath, JSON.stringify(overrides)); // Then see if the refactoring tool detects the change const stdErr = await fixture.cdkRefactor({ options: ['--unstable=refactor', '--force', `--override-file=${overridesPath}`], 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', ADDITIONAL_QUEUE_LOGICAL_ID: 'AdditionalNewName', }, }); expect(stdErr).toMatch('Stack refactor complete'); const stackDescription = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStackResourcesCommand({ StackName: stackName, })); const resources = Object.fromEntries((stackDescription.StackResources ?? []).map((resource) => [resource.LogicalResourceId, resource])); expect(resources.AdditionalNewNameE2FC5A4C).toBeDefined(); 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 getStackInfoFromArn(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 { region: arnParts[3], account: arnParts[4], name: resourceParts[1], }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLXdpdGgtYW1iaWd1aXRpZXMtZXhlY3V0aW9uLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1yZWZhY3Rvci13aXRoLWFtYmlndWl0aWVzLWV4ZWN1dGlvbi5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnRkEsa0RBV0M7QUEzRkQsOEJBQThCO0FBQzlCLDhCQUE4QjtBQUM5QixrQ0FBa0M7QUFFbEMsMEVBQStFO0FBQy9FLHNDQUE4RDtBQUM5RCxrREFBaUU7QUFFakUsSUFBQSxlQUFTLEVBQ1AsOEZBQThGLEVBQzlGLElBQUEseUJBQW1CLEVBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuRCwyQkFBMkI7SUFDM0IsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7UUFDaEQsTUFBTSxFQUFFO1lBQ04sc0JBQXNCLEVBQUUsU0FBUztZQUNqQywyQkFBMkIsRUFBRSxtQkFBbUI7U0FDakQ7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBRWpDLE1BQU0sU0FBUyxHQUFHO1FBQ2hCLFlBQVksRUFBRTtZQUNaO2dCQUNFLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztnQkFDMUIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN4QixTQUFTLEVBQUU7b0JBQ1QsQ0FBQyxHQUFHLFNBQVMsbUJBQW1CLENBQUMsRUFBRSxHQUFHLFNBQVMsbUJBQW1CO29CQUNsRSxDQUFDLEdBQUcsU0FBUyw2QkFBNkIsQ0FBQyxFQUFFLEdBQUcsU0FBUyw2QkFBNkI7aUJBQ3ZGO2FBQ0Y7U0FDRjtLQUNGLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0UsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRTNELHNEQUFzRDtJQUN0RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDdkMsT0FBTyxFQUFFLENBQUMscUJBQXFCLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixhQUFhLEVBQUUsQ0FBQztRQUMvRSxZQUFZLEVBQUUsSUFBSTtRQUNsQixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLE1BQU0sRUFBRTtZQUNOLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsMkJBQTJCLEVBQUUsbUJBQW1CO1NBQ2pEO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBRWxELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzVELElBQUkscURBQTZCLENBQUM7UUFDaEMsU0FBUyxFQUFFLFNBQVM7S0FDckIsQ0FBQyxDQUNILENBQUM7SUFFRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUNsQyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ3pDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBa0IsRUFBRSxRQUFRLENBQTRCLENBQ2pGLENBQ0YsQ0FBQztJQUVGLE1BQU0sQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxRCxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRWhELDJHQUEyRztJQUMzRyxvREFBb0Q7SUFDcEQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxtQ0FBeUIsRUFBRSxFQUFFLENBQUMsQ0FDcEQsQ0FBQztBQVFGLFNBQWdCLG1CQUFtQixDQUFDLFFBQWdCO0lBQ2xELDhFQUE4RTtJQUM5RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUN4RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLHFFQUFxRTtJQUNyRSxPQUFPO1FBQ0wsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDdkIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBTdGFja1Jlc291cmNlIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aFNwZWNpZmljRml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5pbXBvcnQgeyBTVEFDS19SRUZBQ1RPUklOR19SRUdJT05TIH0gZnJvbSAnLi4vLi4vLi4vbGliL3JlZ2lvbnMnO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgcmVmYWN0b3IgLSBkZXRlY3RzIHJlZmFjdG9yaW5nIGNoYW5nZXMgYW5kIGV4ZWN1dGVzIHRoZSByZWZhY3Rvciwgb3ZlcnJpZGluZyBhbWJpZ3VpdGllcycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JlZmFjdG9yaW5nJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBGaXJzdCwgZGVwbG95IHRoZSBzdGFja3NcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYnVja2V0LXN0YWNrJyk7XG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYmFzaWMnLCB7XG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgQkFTSUNfUVVFVUVfTE9HSUNBTF9JRDogJ09sZE5hbWUnLFxuICAgICAgICBBRERJVElPTkFMX1FVRVVFX0xPR0lDQUxfSUQ6ICdBZGRpdGlvbmFsT2xkTmFtZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhY2tJbmZvID0gZ2V0U3RhY2tJbmZvRnJvbUFybihzdGFja0Fybik7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gc3RhY2tJbmZvLm5hbWU7XG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSB7XG4gICAgICBlbnZpcm9ubWVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHN0YWNrSW5mby5hY2NvdW50LFxuICAgICAgICAgIHJlZ2lvbjogc3RhY2tJbmZvLnJlZ2lvbixcbiAgICAgICAgICByZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIFtgJHtzdGFja05hbWV9L09sZE5hbWUvUmVzb3VyY2VgXTogYCR7c3RhY2tOYW1lfS9OZXdOYW1lL1Jlc291cmNlYCxcbiAgICAgICAgICAgIFtgJHtzdGFja05hbWV9L0FkZGl0aW9uYWxPbGROYW1lL1Jlc291cmNlYF06IGAke3N0YWNrTmFtZX0vQWRkaXRpb25hbE5ld05hbWUvUmVzb3VyY2VgLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCBvdmVycmlkZXNQYXRoID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCBgb3ZlcnJpZGVzLSR7RGF0ZS5ub3coKX0uanNvbmApO1xuICAgIGZzLndyaXRlRmlsZVN5bmMob3ZlcnJpZGVzUGF0aCwgSlNPTi5zdHJpbmdpZnkob3ZlcnJpZGVzKSk7XG5cbiAgICAvLyBUaGVuIHNlZSBpZiB0aGUgcmVmYWN0b3JpbmcgdG9vbCBkZXRlY3RzIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBzdGRFcnIgPSBhd2FpdCBmaXh0dXJlLmNka1JlZmFjdG9yKHtcbiAgICAgIG9wdGlvbnM6IFsnLS11bnN0YWJsZT1yZWZhY3RvcicsICctLWZvcmNlJywgYC0tb3ZlcnJpZGUtZmlsZT0ke292ZXJyaWRlc1BhdGh9YF0sXG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICAvLyBNYWtpbmcgc3VyZSB0aGUgc3ludGhlc2l6ZWQgc3RhY2sgaGFzIGEgcXVldWUgd2l0aFxuICAgICAgLy8gdGhlIG5ldyBuYW1lIHNvIHRoYXQgYSByZWZhY3RvciBpcyBkZXRlY3RlZFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEJBU0lDX1FVRVVFX0xPR0lDQUxfSUQ6ICdOZXdOYW1lJyxcbiAgICAgICAgQURESVRJT05BTF9RVUVVRV9MT0dJQ0FMX0lEOiAnQWRkaXRpb25hbE5ld05hbWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChzdGRFcnIpLnRvTWF0Y2goJ1N0YWNrIHJlZmFjdG9yIGNvbXBsZXRlJyk7XG5cbiAgICBjb25zdCBzdGFja0Rlc2NyaXB0aW9uID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc291cmNlcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIChzdGFja0Rlc2NyaXB0aW9uLlN0YWNrUmVzb3VyY2VzID8/IFtdKS5tYXAoXG4gICAgICAgIChyZXNvdXJjZSkgPT4gW3Jlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkISwgcmVzb3VyY2VdIGFzIFtzdHJpbmcsIFN0YWNrUmVzb3VyY2VdLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc291cmNlcy5BZGRpdGlvbmFsTmV3TmFtZUUyRkM1QTRDKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChyZXNvdXJjZXMuTmV3TmFtZTU3QjE3MUZFKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgLy8gQ2xvdWRGb3JtYXRpb24gbWF5IGNvbXBsZXRlIHRoZSByZWZhY3RvcmluZywgd2hpbGUgdGhlIHN0YWNrIGlzIHN0aWxsIGluIHRoZSBcIlVQREFURV9JTl9QUk9HUkVTU1wiIHN0YXRlLlxuICAgIC8vIEdpdmUgaXQgYSBjb3VwbGUgb2Ygc2Vjb25kcyB0byBmaW5pc2ggdGhlIHVwZGF0ZS5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDAwKSk7XG4gIH0sIHsgYXdzOiB7IHJlZ2lvbnM6IFNUQUNLX1JFRkFDVE9SSU5HX1JFR0lPTlMgfSB9KSxcbik7XG5cbmludGVyZmFjZSBTdGFja0luZm8ge1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja0luZm9Gcm9tQXJuKHN0YWNrQXJuOiBzdHJpbmcpOiBTdGFja0luZm8ge1xuICAvLyBFeGFtcGxlIEFSTjogYXJuOmF3czpjbG91ZGZvcm1hdGlvbjpyZWdpb246YWNjb3VudC1pZDpzdGFjay9zdGFjay1uYW1lL2d1aWRcbiAgY29uc3QgYXJuUGFydHMgPSBzdGFja0Fybi5zcGxpdCgnOicpO1xuICBjb25zdCByZXNvdXJjZSA9IGFyblBhcnRzWzVdOyAvLyBcInN0YWNrL3N0YWNrLW5hbWUvZ3VpZFwiXG4gIGNvbnN0IHJlc291cmNlUGFydHMgPSByZXNvdXJjZS5zcGxpdCgnLycpO1xuICAvLyBUaGUgc3RhY2sgbmFtZSBpcyB0aGUgc2Vjb25kIHBhcnQ6IFtcInN0YWNrXCIsIFwic3RhY2stbmFtZVwiLCBcImd1aWRcIl1cbiAgcmV0dXJuIHtcbiAgICByZWdpb246IGFyblBhcnRzWzNdLFxuICAgIGFjY291bnQ6IGFyblBhcnRzWzRdLFxuICAgIG5hbWU6IHJlc291cmNlUGFydHNbMV0sXG4gIH07XG59XG4iXX0=