@aws-cdk-testing/cli-integ
Version:
Integration tests for the AWS CDK CLI
59 lines • 12.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const path = require("path");
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
const lib_1 = require("../../lib");
jest.setTimeout(2 * 60 * 60000); // Includes the time to acquire locks, worst-case single-threaded runtime
(0, lib_1.integTest)('test resource import with construct that requires bundling', (0, lib_1.withDefaultFixture)(async (fixture) => {
// GIVEN
const outputsFile = path.join(fixture.integTestDir, 'outputs', 'outputs.json');
await fs_1.promises.mkdir(path.dirname(outputsFile), { recursive: true });
// First, create a stack that includes a NodeJSFunction lambda and one bucket that will be removed from the stack but NOT deleted from AWS.
await fixture.cdkDeploy('importable-stack', {
modEnv: { INCLUDE_NODEJS_FUNCTION_LAMBDA: '1', INCLUDE_SINGLE_BUCKET: '1', RETAIN_SINGLE_BUCKET: '1' },
options: ['--outputs-file', outputsFile],
});
try {
// Second, now the bucket we will remove is in the stack and has a logicalId. We can now make the resource mapping file.
// This resource mapping file will be used to tell the import operation what bucket to bring into the stack.
const fullStackName = fixture.fullStackName('importable-stack');
const outputs = JSON.parse((await fs_1.promises.readFile(outputsFile, { encoding: 'utf-8' })).toString());
const bucketLogicalId = outputs[fullStackName].BucketLogicalId;
const bucketName = outputs[fullStackName].BucketName;
const bucketResourceMap = {
[bucketLogicalId]: {
BucketName: bucketName,
},
};
const mappingFile = path.join(fixture.integTestDir, 'outputs', 'mapping.json');
await fs_1.promises.writeFile(mappingFile, JSON.stringify(bucketResourceMap), { encoding: 'utf-8' });
// Third, remove the bucket from the stack, but don't delete the bucket from AWS.
await fixture.cdkDeploy('importable-stack', {
modEnv: { INCLUDE_NODEJS_FUNCTION_LAMBDA: '1', INCLUDE_SINGLE_BUCKET: '0', RETAIN_SINGLE_BUCKET: '0' },
});
const cfnTemplateBeforeImport = await fixture.aws.cloudFormation.send(new client_cloudformation_1.GetTemplateCommand({ StackName: fullStackName }));
expect(cfnTemplateBeforeImport.TemplateBody).not.toContain(bucketLogicalId);
// WHEN
await fixture.cdk(['import', '--resource-mapping', mappingFile, fixture.fullStackName('importable-stack')], {
modEnv: { INCLUDE_NODEJS_FUNCTION_LAMBDA: '1', INCLUDE_SINGLE_BUCKET: '1', RETAIN_SINGLE_BUCKET: '0' },
});
// THEN
const describeStacksResponse = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: fullStackName }));
const cfnTemplateAfterImport = await fixture.aws.cloudFormation.send(new client_cloudformation_1.GetTemplateCommand({ StackName: fullStackName }));
// If bundling is skipped during import for NodeJSFunction lambda, then the operation should fail and exit
expect(describeStacksResponse.Stacks[0].StackStatus).toEqual('IMPORT_COMPLETE');
// If the import operation is successful, the template should contain the imported bucket
expect(cfnTemplateAfterImport.TemplateBody).toContain(bucketLogicalId);
}
finally {
// Clean up the resources we created
await fixture.cdkDestroy('importable-stack');
}
}));
/**
* Create a queue, orphan that queue, then import the queue.
*
* We want to test with a large template to make sure large templates can work with import.
*/
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRlc3QtcmVzb3VyY2UtaW1wb3J0LXdpdGgtY29uc3RydWN0LXRoYXQtcmVxdWlyZXMtYnVuZGxpbmcuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLXRlc3QtcmVzb3VyY2UtaW1wb3J0LXdpdGgtY29uc3RydWN0LXRoYXQtcmVxdWlyZXMtYnVuZGxpbmcuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkJBQW9DO0FBQ3BDLDZCQUE2QjtBQUM3QiwwRUFBMkY7QUFDM0YsbUNBQTBEO0FBRTFELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCw0REFBNEQsRUFDNUQsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsUUFBUTtJQUNSLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDL0UsTUFBTSxhQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUvRCwySUFBMkk7SUFDM0ksTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFO1FBQzFDLE1BQU0sRUFBRSxFQUFFLDhCQUE4QixFQUFFLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ3RHLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQztLQUN6QyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUM7UUFDSCx3SEFBd0g7UUFDeEgsNEdBQTRHO1FBQzVHLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxhQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMvRixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQy9ELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDckQsTUFBTSxpQkFBaUIsR0FBRztZQUN4QixDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUNqQixVQUFVLEVBQUUsVUFBVTthQUN2QjtTQUNGLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sYUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFMUYsaUZBQWlGO1FBQ2pGLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRTtZQUMxQyxNQUFNLEVBQUUsRUFBRSw4QkFBOEIsRUFBRSxHQUFHLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtTQUN2RyxDQUFDLENBQUM7UUFDSCxNQUFNLHVCQUF1QixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNuRSxJQUFJLDBDQUFrQixDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQ3JELENBQUM7UUFDRixNQUFNLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUU1RSxPQUFPO1FBQ1AsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRTtZQUMxRyxNQUFNLEVBQUUsRUFBRSw4QkFBOEIsRUFBRSxHQUFHLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtTQUN2RyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDbEUsSUFBSSw2Q0FBcUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUN4RCxDQUFDO1FBQ0YsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDbEUsSUFBSSwwQ0FBa0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUNyRCxDQUFDO1FBRUYsMEdBQTBHO1FBQzFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFakYseUZBQXlGO1FBQ3pGLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekUsQ0FBQztZQUFTLENBQUM7UUFDVCxvQ0FBb0M7UUFDcEMsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDL0MsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUNILENBQUM7QUFFRjs7OztHQUlHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRGVzY3JpYmVTdGFja3NDb21tYW5kLCBHZXRUZW1wbGF0ZUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICd0ZXN0IHJlc291cmNlIGltcG9ydCB3aXRoIGNvbnN0cnVjdCB0aGF0IHJlcXVpcmVzIGJ1bmRsaW5nJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBGaXJzdCwgY3JlYXRlIGEgc3RhY2sgdGhhdCBpbmNsdWRlcyBhIE5vZGVKU0Z1bmN0aW9uIGxhbWJkYSBhbmQgb25lIGJ1Y2tldCB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjayBidXQgTk9UIGRlbGV0ZWQgZnJvbSBBV1MuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydGFibGUtc3RhY2snLCB7XG4gICAgICBtb2RFbnY6IHsgSU5DTFVERV9OT0RFSlNfRlVOQ1RJT05fTEFNQkRBOiAnMScsIElOQ0xVREVfU0lOR0xFX0JVQ0tFVDogJzEnLCBSRVRBSU5fU0lOR0xFX0JVQ0tFVDogJzEnIH0sXG4gICAgICBvcHRpb25zOiBbJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGVdLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNlY29uZCwgbm93IHRoZSBidWNrZXQgd2Ugd2lsbCByZW1vdmUgaXMgaW4gdGhlIHN0YWNrIGFuZCBoYXMgYSBsb2dpY2FsSWQuIFdlIGNhbiBub3cgbWFrZSB0aGUgcmVzb3VyY2UgbWFwcGluZyBmaWxlLlxuICAgICAgLy8gVGhpcyByZXNvdXJjZSBtYXBwaW5nIGZpbGUgd2lsbCBiZSB1c2VkIHRvIHRlbGwgdGhlIGltcG9ydCBvcGVyYXRpb24gd2hhdCBidWNrZXQgdG8gYnJpbmcgaW50byB0aGUgc3RhY2suXG4gICAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpbXBvcnRhYmxlLXN0YWNrJyk7XG4gICAgICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICAgICAgY29uc3QgYnVja2V0TG9naWNhbElkID0gb3V0cHV0c1tmdWxsU3RhY2tOYW1lXS5CdWNrZXRMb2dpY2FsSWQ7XG4gICAgICBjb25zdCBidWNrZXROYW1lID0gb3V0cHV0c1tmdWxsU3RhY2tOYW1lXS5CdWNrZXROYW1lO1xuICAgICAgY29uc3QgYnVja2V0UmVzb3VyY2VNYXAgPSB7XG4gICAgICAgIFtidWNrZXRMb2dpY2FsSWRdOiB7XG4gICAgICAgICAgQnVja2V0TmFtZTogYnVja2V0TmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXBwaW5nRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnbWFwcGluZy5qc29uJyk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUobWFwcGluZ0ZpbGUsIEpTT04uc3RyaW5naWZ5KGJ1Y2tldFJlc291cmNlTWFwKSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcblxuICAgICAgLy8gVGhpcmQsIHJlbW92ZSB0aGUgYnVja2V0IGZyb20gdGhlIHN0YWNrLCBidXQgZG9uJ3QgZGVsZXRlIHRoZSBidWNrZXQgZnJvbSBBV1MuXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaW1wb3J0YWJsZS1zdGFjaycsIHtcbiAgICAgICAgbW9kRW52OiB7IElOQ0xVREVfTk9ERUpTX0ZVTkNUSU9OX0xBTUJEQTogJzEnLCBJTkNMVURFX1NJTkdMRV9CVUNLRVQ6ICcwJywgUkVUQUlOX1NJTkdMRV9CVUNLRVQ6ICcwJyB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjZm5UZW1wbGF0ZUJlZm9yZUltcG9ydCA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBHZXRUZW1wbGF0ZUNvbW1hbmQoeyBTdGFja05hbWU6IGZ1bGxTdGFja05hbWUgfSksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNmblRlbXBsYXRlQmVmb3JlSW1wb3J0LlRlbXBsYXRlQm9keSkubm90LnRvQ29udGFpbihidWNrZXRMb2dpY2FsSWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ2ltcG9ydCcsICctLXJlc291cmNlLW1hcHBpbmcnLCBtYXBwaW5nRmlsZSwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpbXBvcnRhYmxlLXN0YWNrJyldLCB7XG4gICAgICAgIG1vZEVudjogeyBJTkNMVURFX05PREVKU19GVU5DVElPTl9MQU1CREE6ICcxJywgSU5DTFVERV9TSU5HTEVfQlVDS0VUOiAnMScsIFJFVEFJTl9TSU5HTEVfQlVDS0VUOiAnMCcgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBjZm5UZW1wbGF0ZUFmdGVySW1wb3J0ID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IEdldFRlbXBsYXRlQ29tbWFuZCh7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIElmIGJ1bmRsaW5nIGlzIHNraXBwZWQgZHVyaW5nIGltcG9ydCBmb3IgTm9kZUpTRnVuY3Rpb24gbGFtYmRhLCB0aGVuIHRoZSBvcGVyYXRpb24gc2hvdWxkIGZhaWwgYW5kIGV4aXRcbiAgICAgIGV4cGVjdChkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcyFbMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0lNUE9SVF9DT01QTEVURScpO1xuXG4gICAgICAvLyBJZiB0aGUgaW1wb3J0IG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUgdGVtcGxhdGUgc2hvdWxkIGNvbnRhaW4gdGhlIGltcG9ydGVkIGJ1Y2tldFxuICAgICAgZXhwZWN0KGNmblRlbXBsYXRlQWZ0ZXJJbXBvcnQuVGVtcGxhdGVCb2R5KS50b0NvbnRhaW4oYnVja2V0TG9naWNhbElkKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYW4gdXAgdGhlIHJlc291cmNlcyB3ZSBjcmVhdGVkXG4gICAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2ltcG9ydGFibGUtc3RhY2snKTtcbiAgICB9XG4gIH0pLFxuKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBxdWV1ZSwgb3JwaGFuIHRoYXQgcXVldWUsIHRoZW4gaW1wb3J0IHRoZSBxdWV1ZS5cbiAqXG4gKiBXZSB3YW50IHRvIHRlc3Qgd2l0aCBhIGxhcmdlIHRlbXBsYXRlIHRvIG1ha2Ugc3VyZSBsYXJnZSB0ZW1wbGF0ZXMgY2FuIHdvcmsgd2l0aCBpbXBvcnQuXG4gKi9cbiJdfQ==