UNPKG

@aws-cdk-testing/cli-integ

Version:

Integration tests for the AWS CDK CLI

48 lines 8.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getStackInfoFromArn = getStackInfoFromArn; 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 - moves a referenced resource to a different stack', (0, lib_1.withSpecificFixture)('refactoring', async (fixture) => { // First, deploy the stacks await fixture.cdkDeploy('bucket-stack'); const originalStackArn = await fixture.cdkDeploy('basic'); const originalStackInfo = getStackInfoFromArn(originalStackArn); const stackPrefix = originalStackInfo.name.replace(/-basic$/, ''); // 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: { BUCKET_IN_SEPARATE_STACK: 'true', }, }); expect(stdErr).toMatch('Stack refactor complete'); const stacks = await fixture.aws.cloudFormation.send(new client_cloudformation_1.ListStacksCommand()); const bucketStack = (stacks.StackSummaries ?? []).find((s) => s.StackName === `${stackPrefix}-bucket-stack`); expect(bucketStack).toBeDefined(); const stackDescription = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStackResourcesCommand({ StackName: bucketStack.StackName, })); const resources = Object.fromEntries((stackDescription.StackResources ?? []).map((resource) => [resource.LogicalResourceId, resource])); expect(resources.Bucket83908E77).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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXJlZmFjdG9yLW1vdmUtc2FtZS10by1kaWZmZXJlbnQtc3RhY2tzLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1yZWZhY3Rvci1tb3ZlLXNhbWUtdG8tZGlmZmVyZW50LXN0YWNrcy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwREEsa0RBV0M7QUFyRUQsMEVBQXNIO0FBQ3RILHNDQUE4RDtBQUM5RCxrREFBaUU7QUFFakUsSUFBQSxlQUFTLEVBQ1AsaUVBQWlFLEVBQ2pFLElBQUEseUJBQW1CLEVBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuRCwyQkFBMkI7SUFDM0IsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRSxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsRSxzREFBc0Q7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLFNBQVMsQ0FBQztRQUMzQyxZQUFZLEVBQUUsSUFBSTtRQUNsQixxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLE1BQU0sRUFBRTtZQUNOLHdCQUF3QixFQUFFLE1BQU07U0FDakM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFFbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSx5Q0FBaUIsRUFBRSxDQUFDLENBQUM7SUFFOUUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxHQUFHLFdBQVcsZUFBZSxDQUFDLENBQUM7SUFFN0csTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRWxDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzVELElBQUkscURBQTZCLENBQUM7UUFDaEMsU0FBUyxFQUFFLFdBQVksQ0FBQyxTQUFTO0tBQ2xDLENBQUMsQ0FDSCxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDbEMsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUN6QyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWtCLEVBQUUsUUFBUSxDQUE0QixDQUNqRixDQUNGLENBQUM7SUFFRixNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRS9DLDJHQUEyRztJQUMzRyxvREFBb0Q7SUFDcEQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxtQ0FBeUIsRUFBRSxFQUFFLENBQUMsQ0FDcEQsQ0FBQztBQVFGLFNBQWdCLG1CQUFtQixDQUFDLFFBQWdCO0lBQ2xELDhFQUE4RTtJQUM5RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUN4RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLHFFQUFxRTtJQUNyRSxPQUFPO1FBQ0wsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDdkIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCwgTGlzdFN0YWNrc0NvbW1hbmQsIHR5cGUgU3RhY2tSZXNvdXJjZSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuaW1wb3J0IHsgU1RBQ0tfUkVGQUNUT1JJTkdfUkVHSU9OUyB9IGZyb20gJy4uLy4uLy4uL2xpYi9yZWdpb25zJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIHJlZmFjdG9yIC0gbW92ZXMgYSByZWZlcmVuY2VkIHJlc291cmNlIHRvIGEgZGlmZmVyZW50IHN0YWNrJyxcbiAgd2l0aFNwZWNpZmljRml4dHVyZSgncmVmYWN0b3JpbmcnLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIEZpcnN0LCBkZXBsb3kgdGhlIHN0YWNrc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidWNrZXQtc3RhY2snKTtcbiAgICBjb25zdCBvcmlnaW5hbFN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Jhc2ljJyk7XG4gICAgY29uc3Qgb3JpZ2luYWxTdGFja0luZm8gPSBnZXRTdGFja0luZm9Gcm9tQXJuKG9yaWdpbmFsU3RhY2tBcm4pO1xuICAgIGNvbnN0IHN0YWNrUHJlZml4ID0gb3JpZ2luYWxTdGFja0luZm8ubmFtZS5yZXBsYWNlKC8tYmFzaWMkLywgJycpO1xuXG4gICAgLy8gVGhlbiBzZWUgaWYgdGhlIHJlZmFjdG9yaW5nIHRvb2wgZGV0ZWN0cyB0aGUgY2hhbmdlXG4gICAgY29uc3Qgc3RkRXJyID0gYXdhaXQgZml4dHVyZS5jZGtSZWZhY3Rvcih7XG4gICAgICBvcHRpb25zOiBbJy0tdW5zdGFibGU9cmVmYWN0b3InLCAnLS1mb3JjZSddLFxuICAgICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgICAgLy8gTWFraW5nIHN1cmUgdGhlIHN5bnRoZXNpemVkIHN0YWNrIGhhcyBhIHF1ZXVlIHdpdGhcbiAgICAgIC8vIHRoZSBuZXcgbmFtZSBzbyB0aGF0IGEgcmVmYWN0b3IgaXMgZGV0ZWN0ZWRcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBCVUNLRVRfSU5fU0VQQVJBVEVfU1RBQ0s6ICd0cnVlJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc3RkRXJyKS50b01hdGNoKCdTdGFjayByZWZhY3RvciBjb21wbGV0ZScpO1xuXG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChuZXcgTGlzdFN0YWNrc0NvbW1hbmQoKSk7XG5cbiAgICBjb25zdCBidWNrZXRTdGFjayA9IChzdGFja3MuU3RhY2tTdW1tYXJpZXMgPz8gW10pLmZpbmQoKHMpID0+IHMuU3RhY2tOYW1lID09PSBgJHtzdGFja1ByZWZpeH0tYnVja2V0LXN0YWNrYCk7XG5cbiAgICBleHBlY3QoYnVja2V0U3RhY2spLnRvQmVEZWZpbmVkKCk7XG5cbiAgICBjb25zdCBzdGFja0Rlc2NyaXB0aW9uID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFN0YWNrTmFtZTogYnVja2V0U3RhY2shLlN0YWNrTmFtZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCByZXNvdXJjZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAoc3RhY2tEZXNjcmlwdGlvbi5TdGFja1Jlc291cmNlcyA/PyBbXSkubWFwKFxuICAgICAgICAocmVzb3VyY2UpID0+IFtyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCEsIHJlc291cmNlXSBhcyBbc3RyaW5nLCBTdGFja1Jlc291cmNlXSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXNvdXJjZXMuQnVja2V0ODM5MDhFNzcpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAvLyBDbG91ZEZvcm1hdGlvbiBtYXkgY29tcGxldGUgdGhlIHJlZmFjdG9yaW5nLCB3aGlsZSB0aGUgc3RhY2sgaXMgc3RpbGwgaW4gdGhlIFwiVVBEQVRFX0lOX1BST0dSRVNTXCIgc3RhdGUuXG4gICAgLy8gR2l2ZSBpdCBhIGNvdXBsZSBvZiBzZWNvbmRzIHRvIGZpbmlzaCB0aGUgdXBkYXRlLlxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMDApKTtcbiAgfSwgeyBhd3M6IHsgcmVnaW9uczogU1RBQ0tfUkVGQUNUT1JJTkdfUkVHSU9OUyB9IH0pLFxuKTtcblxuaW50ZXJmYWNlIFN0YWNrSW5mbyB7XG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YWNrSW5mb0Zyb21Bcm4oc3RhY2tBcm46IHN0cmluZyk6IFN0YWNrSW5mbyB7XG4gIC8vIEV4YW1wbGUgQVJOOiBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOnJlZ2lvbjphY2NvdW50LWlkOnN0YWNrL3N0YWNrLW5hbWUvZ3VpZFxuICBjb25zdCBhcm5QYXJ0cyA9IHN0YWNrQXJuLnNwbGl0KCc6Jyk7XG4gIGNvbnN0IHJlc291cmNlID0gYXJuUGFydHNbNV07IC8vIFwic3RhY2svc3RhY2stbmFtZS9ndWlkXCJcbiAgY29uc3QgcmVzb3VyY2VQYXJ0cyA9IHJlc291cmNlLnNwbGl0KCcvJyk7XG4gIC8vIFRoZSBzdGFjayBuYW1lIGlzIHRoZSBzZWNvbmQgcGFydDogW1wic3RhY2tcIiwgXCJzdGFjay1uYW1lXCIsIFwiZ3VpZFwiXVxuICByZXR1cm4ge1xuICAgIHJlZ2lvbjogYXJuUGFydHNbM10sXG4gICAgYWNjb3VudDogYXJuUGFydHNbNF0sXG4gICAgbmFtZTogcmVzb3VyY2VQYXJ0c1sxXSxcbiAgfTtcbn1cblxuIl19