UNPKG

@aws-cdk-testing/cli-integ

Version:

Integration tests for the AWS CDK CLI

72 lines 11.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const client_cloudformation_1 = require("@aws-sdk/client-cloudformation"); const yaml = require("yaml"); const lib_1 = require("../../../lib"); (0, lib_1.integTest)('cdk orphan detaches a resource from the stack without deleting it', (0, lib_1.withDefaultFixture)(async (fixture) => { const stackName = fixture.fullStackName('orphanable'); // Deploy the stack with a DynamoDB table + Lambda consumer await fixture.cdkDeploy('orphanable'); // Get outputs const describeResponse = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: stackName })); const outputs = describeResponse.Stacks?.[0]?.Outputs ?? []; const tableName = outputs.find((o) => o.OutputKey === 'TableName')?.OutputValue; expect(tableName).toBeDefined(); try { // Verify the table resource exists in the template before orphaning const templateBefore = await fixture.aws.cloudFormation.send(new client_cloudformation_1.GetTemplateCommand({ StackName: stackName })); const templateBodyBefore = yaml.parse(templateBefore.TemplateBody); expect(templateBodyBefore.Resources).toHaveProperty('MyTable794EDED1'); // Put an item in the table before orphan await fixture.aws.dynamoDb.putItem({ TableName: tableName, Item: { PK: { S: 'before-orphan' } }, }); // Orphan the table const orphanOutput = await fixture.cdk([ 'orphan', `${stackName}/MyTable`, '--unstable=orphan', '--yes', ]); // Verify the output contains a resource mapping for import expect(orphanOutput).toContain('resource-mapping-inline'); expect(orphanOutput).toContain('TableName'); // Verify the template after orphan: table gone, Lambda env vars replaced with literals const templateAfter = await fixture.aws.cloudFormation.send(new client_cloudformation_1.GetTemplateCommand({ StackName: stackName })); const templateBody = yaml.parse(templateAfter.TemplateBody); expect(templateBody.Resources).not.toHaveProperty('MyTable794EDED1'); expect(templateBody).toMatchObject({ Resources: expect.objectContaining({ Consumer8D6BE417: expect.objectContaining({ Type: 'AWS::Lambda::Function', Properties: expect.objectContaining({ Environment: { Variables: { TABLE_NAME: expect.stringContaining('MyTable'), TABLE_ARN: expect.stringContaining('arn:aws:dynamodb'), }, }, }), }), }), }); // Verify the table still exists and data is intact (strongly consistent read) const getItemResult = await fixture.aws.dynamoDb.getItem({ TableName: tableName, Key: { PK: { S: 'before-orphan' } }, ConsistentRead: true, }); expect(getItemResult.Item?.PK?.S).toBe('before-orphan'); } finally { // Clean up the retained table to avoid leaking resources try { await fixture.aws.dynamoDb.deleteTable({ TableName: tableName }); } catch (e) { // Ignore } } })); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW9ycGhhbi1kZXRhY2hlcy1yZXNvdXJjZS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstb3JwaGFuLWRldGFjaGVzLXJlc291cmNlLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBFQUEyRjtBQUMzRiw2QkFBNkI7QUFDN0Isc0NBQTZEO0FBRTdELElBQUEsZUFBUyxFQUNQLG1FQUFtRSxFQUNuRSxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXRELDJEQUEyRDtJQUMzRCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFdEMsY0FBYztJQUNkLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzVELElBQUksNkNBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FDcEQsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDNUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDaEYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRWhDLElBQUksQ0FBQztRQUNILG9FQUFvRTtRQUNwRSxNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDMUQsSUFBSSwwQ0FBa0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVB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bW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICd5YW1sJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIG9ycGhhbiBkZXRhY2hlcyBhIHJlc291cmNlIGZyb20gdGhlIHN0YWNrIHdpdGhvdXQgZGVsZXRpbmcgaXQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ29ycGhhbmFibGUnKTtcblxuICAgIC8vIERlcGxveSB0aGUgc3RhY2sgd2l0aCBhIER5bmFtb0RCIHRhYmxlICsgTGFtYmRhIGNvbnN1bWVyXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ29ycGhhbmFibGUnKTtcblxuICAgIC8vIEdldCBvdXRwdXRzXG4gICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBzdGFja05hbWUgfSksXG4gICAgKTtcbiAgICBjb25zdCBvdXRwdXRzID0gZGVzY3JpYmVSZXNwb25zZS5TdGFja3M/LlswXT8uT3V0cHV0cyA/PyBbXTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBvdXRwdXRzLmZpbmQoKG8pID0+IG8uT3V0cHV0S2V5ID09PSAnVGFibGVOYW1lJyk/Lk91dHB1dFZhbHVlO1xuICAgIGV4cGVjdCh0YWJsZU5hbWUpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gVmVyaWZ5IHRoZSB0YWJsZSByZXNvdXJjZSBleGlzdHMgaW4gdGhlIHRlbXBsYXRlIGJlZm9yZSBvcnBoYW5pbmdcbiAgICAgIGNvbnN0IHRlbXBsYXRlQmVmb3JlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IEdldFRlbXBsYXRlQ29tbWFuZCh7IFN0YWNrTmFtZTogc3RhY2tOYW1lIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlQm9keUJlZm9yZSA9IHlhbWwucGFyc2UodGVtcGxhdGVCZWZvcmUuVGVtcGxhdGVCb2R5ISk7XG4gICAgICBleHBlY3QodGVtcGxhdGVCb2R5QmVmb3JlLlJlc291cmNlcykudG9IYXZlUHJvcGVydHkoJ015VGFibGU3OTRFREVEMScpO1xuXG4gICAgICAvLyBQdXQgYW4gaXRlbSBpbiB0aGUgdGFibGUgYmVmb3JlIG9ycGhhblxuICAgICAgYXdhaXQgZml4dHVyZS5hd3MuZHluYW1vRGIucHV0SXRlbSh7XG4gICAgICAgIFRhYmxlTmFtZTogdGFibGVOYW1lISxcbiAgICAgICAgSXRlbTogeyBQSzogeyBTOiAnYmVmb3JlLW9ycGhhbicgfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9ycGhhbiB0aGUgdGFibGVcbiAgICAgIGNvbnN0IG9ycGhhbk91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFtcbiAgICAgICAgJ29ycGhhbicsXG4gICAgICAgIGAke3N0YWNrTmFtZX0vTXlUYWJsZWAsXG4gICAgICAgICctLXVuc3RhYmxlPW9ycGhhbicsXG4gICAgICAgICctLXllcycsXG4gICAgICBdKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoZSBvdXRwdXQgY29udGFpbnMgYSByZXNvdXJjZSBtYXBwaW5nIGZvciBpbXBvcnRcbiAgICAgIGV4cGVjdChvcnBoYW5PdXRwdXQpLnRvQ29udGFpbigncmVzb3VyY2UtbWFwcGluZy1pbmxpbmUnKTtcbiAgICAgIGV4cGVjdChvcnBoYW5PdXRwdXQpLnRvQ29udGFpbignVGFibGVOYW1lJyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdGVtcGxhdGUgYWZ0ZXIgb3JwaGFuOiB0YWJsZSBnb25lLCBMYW1iZGEgZW52IHZhcnMgcmVwbGFjZWQgd2l0aCBsaXRlcmFsc1xuICAgICAgY29uc3QgdGVtcGxhdGVBZnRlciA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBHZXRUZW1wbGF0ZUNvbW1hbmQoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZUJvZHkgPSB5YW1sLnBhcnNlKHRlbXBsYXRlQWZ0ZXIuVGVtcGxhdGVCb2R5ISk7XG5cbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZUJvZHkuUmVzb3VyY2VzKS5ub3QudG9IYXZlUHJvcGVydHkoJ015VGFibGU3OTRFREVEMScpO1xuICAgICAgZXhwZWN0KHRlbXBsYXRlQm9keSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIFJlc291cmNlczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIENvbnN1bWVyOEQ2QkU0MTc6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICAgICAgUHJvcGVydGllczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIFZhcmlhYmxlczoge1xuICAgICAgICAgICAgICAgICAgVEFCTEVfTkFNRTogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ015VGFibGUnKSxcbiAgICAgICAgICAgICAgICAgIFRBQkxFX0FSTjogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ2Fybjphd3M6ZHluYW1vZGInKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdGFibGUgc3RpbGwgZXhpc3RzIGFuZCBkYXRhIGlzIGludGFjdCAoc3Ryb25nbHkgY29uc2lzdGVudCByZWFkKVxuICAgICAgY29uc3QgZ2V0SXRlbVJlc3VsdCA9IGF3YWl0IGZpeHR1cmUuYXdzLmR5bmFtb0RiLmdldEl0ZW0oe1xuICAgICAgICBUYWJsZU5hbWU6IHRhYmxlTmFtZSEsXG4gICAgICAgIEtleTogeyBQSzogeyBTOiAnYmVmb3JlLW9ycGhhbicgfSB9LFxuICAgICAgICBDb25zaXN0ZW50UmVhZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGdldEl0ZW1SZXN1bHQuSXRlbT8uUEs/LlMpLnRvQmUoJ2JlZm9yZS1vcnBoYW4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYW4gdXAgdGhlIHJldGFpbmVkIHRhYmxlIHRvIGF2b2lkIGxlYWtpbmcgcmVzb3VyY2VzXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5keW5hbW9EYi5kZWxldGVUYWJsZSh7IFRhYmxlTmFtZTogdGFibGVOYW1lISB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWdub3JlXG4gICAgICB9XG4gICAgfVxuICB9KSxcbik7XG4iXX0=