UNPKG

@aws-cdk-testing/cli-integ

Version:

Integration tests for the AWS CDK CLI

102 lines 12.4 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.getStackInfoFromArn = getStackInfoFromArn; const fs = __importStar(require("node:fs")); const os = __importStar(require("node:os")); const path = __importStar(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLXdpdGgtYW1iaWd1aXRpZXMtZXhlY3V0aW9uLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1yZWZhY3Rvci13aXRoLWFtYmlndWl0aWVzLWV4ZWN1dGlvbi5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnRkEsa0RBV0M7QUEzRkQsNENBQThCO0FBQzlCLDRDQUE4QjtBQUM5QixnREFBa0M7QUFFbEMsMEVBQStFO0FBQy9FLHNDQUE4RDtBQUM5RCxrREFBaUU7QUFFakUsSUFBQSxlQUFTLEVBQ1AsOEZBQThGLEVBQzlGLElBQUEseUJBQW1CLEVBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuRCwyQkFBMkI7SUFDM0IsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7UUFDaEQsTUFBTSxFQUFFO1lBQ04sc0JBQXNCLEVBQUUsU0FBUztZQUNqQywyQkFBMkIsRUFBRSxtQkFBbUI7U0FDakQ7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBRWpDLE1BQU0sU0FBUyxHQUFHO1FBQ2hCLFlBQVksRUFBRTtZQUNaO2dCQUNFLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztnQkFDMUIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN4QixTQUFTLEVBQUU7b0JBQ1QsQ0FBQyxHQUFHLFNBQVMsbUJBQW1CLENBQUMsRUFBRSxHQUFHLFNBQVMsbUJBQW1CO29CQUNsRSxDQUFDLEdBQUcsU0FBUyw2QkFBNkIsQ0FBQyxFQUFFLEdBQUcsU0FBUyw2QkFBNkI7aUJBQ3ZGO2FBQ0Y7U0FDRjtLQUNGLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0UsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRTNELHNEQUFzRDtJQUN0RCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDdkMsT0FBTyxFQUFFLENBQUMscUJBQXFCLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixhQUFhLEVBQUUsQ0FBQztRQUMvRSxZQUFZLEVBQUUsSUFBSTtRQUNsQixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLE1BQU0sRUFBRTtZQUNOLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsMkJBQTJCLEVBQUUsbUJBQW1CO1NBQ2pEO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBRWxELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzVELElBQUkscURBQTZCLENBQUM7UUFDaEMsU0FBUyxFQUFFLFNBQVM7S0FDckIsQ0FBQyxDQUNILENBQUM7SUFFRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUNsQyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ3pDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBa0IsRUFBRSxRQUFRLENBQTRCLENBQ2pGLENBQ0YsQ0FBQztJQUVGLE1BQU0sQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxRCxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRWhELDJHQUEyRztJQUMzRyxvREFBb0Q7SUFDcEQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxtQ0FBeUIsRUFBRSxFQUFFLENBQUMsQ0FDcEQsQ0FBQztBQVFGLFNBQWdCLG1CQUFtQixDQUFDLFFBQWdCO0lBQ2xELDhFQUE4RTtJQUM5RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUN4RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLHFFQUFxRTtJQUNyRSxPQUFPO1FBQ0wsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDdkIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBTdGFja1Jlc291cmNlIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aFNwZWNpZmljRml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5pbXBvcnQgeyBTVEFDS19SRUZBQ1RPUklOR19SRUdJT05TIH0gZnJvbSAnLi4vLi4vLi4vbGliL3JlZ2lvbnMnO1xuXG5pbnRlZ1Rlc3QoXG4gICdjZGsgcmVmYWN0b3IgLSBkZXRlY3RzIHJlZmFjdG9yaW5nIGNoYW5nZXMgYW5kIGV4ZWN1dGVzIHRoZSByZWZhY3Rvciwgb3ZlcnJpZGluZyBhbWJpZ3VpdGllcycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ3JlZmFjdG9yaW5nJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBGaXJzdCwgZGVwbG95IHRoZSBzdGFja3NcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYnVja2V0LXN0YWNrJyk7XG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYmFzaWMnLCB7XG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgQkFTSUNfUVVFVUVfTE9HSUNBTF9JRDogJ09sZE5hbWUnLFxuICAgICAgICBBRERJVElPTkFMX1FVRVVFX0xPR0lDQUxfSUQ6ICdBZGRpdGlvbmFsT2xkTmFtZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhY2tJbmZvID0gZ2V0U3RhY2tJbmZvRnJvbUFybihzdGFja0Fybik7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gc3RhY2tJbmZvLm5hbWU7XG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSB7XG4gICAgICBlbnZpcm9ubWVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjY291bnQ6IHN0YWNrSW5mby5hY2NvdW50LFxuICAgICAgICAgIHJlZ2lvbjogc3RhY2tJbmZvLnJlZ2lvbixcbiAgICAgICAgICByZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIFtgJHtzdGFja05hbWV9L09sZE5hbWUvUmVzb3VyY2VgXTogYCR7c3RhY2tOYW1lfS9OZXdOYW1lL1Jlc291cmNlYCxcbiAgICAgICAgICAgIFtgJHtzdGFja05hbWV9L0FkZGl0aW9uYWxPbGROYW1lL1Jlc291cmNlYF06IGAke3N0YWNrTmFtZX0vQWRkaXRpb25hbE5ld05hbWUvUmVzb3VyY2VgLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCBvdmVycmlkZXNQYXRoID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCBgb3ZlcnJpZGVzLSR7RGF0ZS5ub3coKX0uanNvbmApO1xuICAgIGZzLndyaXRlRmlsZVN5bmMob3ZlcnJpZGVzUGF0aCwgSlNPTi5zdHJpbmdpZnkob3ZlcnJpZGVzKSk7XG5cbiAgICAvLyBUaGVuIHNlZSBpZiB0aGUgcmVmYWN0b3JpbmcgdG9vbCBkZXRlY3RzIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBzdGRFcnIgPSBhd2FpdCBmaXh0dXJlLmNka1JlZmFjdG9yKHtcbiAgICAgIG9wdGlvbnM6IFsnLS11bnN0YWJsZT1yZWZhY3RvcicsICctLWZvcmNlJywgYC0tb3ZlcnJpZGUtZmlsZT0ke292ZXJyaWRlc1BhdGh9YF0sXG4gICAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgICAvLyBNYWtpbmcgc3VyZSB0aGUgc3ludGhlc2l6ZWQgc3RhY2sgaGFzIGEgcXVldWUgd2l0aFxuICAgICAgLy8gdGhlIG5ldyBuYW1lIHNvIHRoYXQgYSByZWZhY3RvciBpcyBkZXRlY3RlZFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEJBU0lDX1FVRVVFX0xPR0lDQUxfSUQ6ICdOZXdOYW1lJyxcbiAgICAgICAgQURESVRJT05BTF9RVUVVRV9MT0dJQ0FMX0lEOiAnQWRkaXRpb25hbE5ld05hbWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChzdGRFcnIpLnRvTWF0Y2goJ1N0YWNrIHJlZmFjdG9yIGNvbXBsZXRlJyk7XG5cbiAgICBjb25zdCBzdGFja0Rlc2NyaXB0aW9uID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc291cmNlcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIChzdGFja0Rlc2NyaXB0aW9uLlN0YWNrUmVzb3VyY2VzID8/IFtdKS5tYXAoXG4gICAgICAgIChyZXNvdXJjZSkgPT4gW3Jlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkISwgcmVzb3VyY2VdIGFzIFtzdHJpbmcsIFN0YWNrUmVzb3VyY2VdLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHJlc291cmNlcy5BZGRpdGlvbmFsTmV3TmFtZUUyRkM1QTRDKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChyZXNvdXJjZXMuTmV3TmFtZTU3QjE3MUZFKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgLy8gQ2xvdWRGb3JtYXRpb24gbWF5IGNvbXBsZXRlIHRoZSByZWZhY3RvcmluZywgd2hpbGUgdGhlIHN0YWNrIGlzIHN0aWxsIGluIHRoZSBcIlVQREFURV9JTl9QUk9HUkVTU1wiIHN0YXRlLlxuICAgIC8vIEdpdmUgaXQgYSBjb3VwbGUgb2Ygc2Vjb25kcyB0byBmaW5pc2ggdGhlIHVwZGF0ZS5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDAwKSk7XG4gIH0sIHsgYXdzOiB7IHJlZ2lvbnM6IFNUQUNLX1JFRkFDVE9SSU5HX1JFR0lPTlMgfSB9KSxcbik7XG5cbmludGVyZmFjZSBTdGFja0luZm8ge1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja0luZm9Gcm9tQXJuKHN0YWNrQXJuOiBzdHJpbmcpOiBTdGFja0luZm8ge1xuICAvLyBFeGFtcGxlIEFSTjogYXJuOmF3czpjbG91ZGZvcm1hdGlvbjpyZWdpb246YWNjb3VudC1pZDpzdGFjay9zdGFjay1uYW1lL2d1aWRcbiAgY29uc3QgYXJuUGFydHMgPSBzdGFja0Fybi5zcGxpdCgnOicpO1xuICBjb25zdCByZXNvdXJjZSA9IGFyblBhcnRzWzVdOyAvLyBcInN0YWNrL3N0YWNrLW5hbWUvZ3VpZFwiXG4gIGNvbnN0IHJlc291cmNlUGFydHMgPSByZXNvdXJjZS5zcGxpdCgnLycpO1xuICAvLyBUaGUgc3RhY2sgbmFtZSBpcyB0aGUgc2Vjb25kIHBhcnQ6IFtcInN0YWNrXCIsIFwic3RhY2stbmFtZVwiLCBcImd1aWRcIl1cbiAgcmV0dXJuIHtcbiAgICByZWdpb246IGFyblBhcnRzWzNdLFxuICAgIGFjY291bnQ6IGFyblBhcnRzWzRdLFxuICAgIG5hbWU6IHJlc291cmNlUGFydHNbMV0sXG4gIH07XG59XG4iXX0=