@aws-cdk-testing/cli-integ 3.30.2 → 3.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/lib/aws.d.ts +2 -0
  2. package/lib/aws.js +4 -1
  3. package/lib/regions.d.ts +5 -1
  4. package/lib/regions.js +18 -3
  5. package/npm-shrinkwrap.json +1409 -1384
  6. package/package.json +22 -21
  7. package/resources/cdk-apps/app/app.js +33 -2
  8. package/resources/cdk-apps/diagnose-app/app.js +77 -0
  9. package/resources/cdk-apps/diagnose-app/cdk.json +7 -0
  10. package/tests/cli-integ-tests/deploy/cdk-import-existing-resources-error-message-includes-construct-paths.integtest.js +2 -2
  11. package/tests/cli-integ-tests/deploy/cdk-two-step-deploy-prepare-then-execute-change-set.integtest.d.ts +1 -0
  12. package/tests/cli-integ-tests/deploy/cdk-two-step-deploy-prepare-then-execute-change-set.integtest.js +36 -0
  13. package/tests/cli-integ-tests/diagnose/cdk-diagnose-changeset-failure.integtest.d.ts +1 -0
  14. package/tests/cli-integ-tests/diagnose/cdk-diagnose-changeset-failure.integtest.js +43 -0
  15. package/tests/cli-integ-tests/diagnose/cdk-diagnose-deployment-failure.integtest.d.ts +1 -0
  16. package/tests/cli-integ-tests/diagnose/cdk-diagnose-deployment-failure.integtest.js +20 -0
  17. package/tests/cli-integ-tests/diagnose/cdk-diagnose-early-validation-failure.integtest.d.ts +1 -0
  18. package/tests/cli-integ-tests/diagnose/cdk-diagnose-early-validation-failure.integtest.js +26 -0
  19. package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-caches-template.integtest.d.ts +1 -0
  20. package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-caches-template.integtest.js +73 -0
  21. package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-supports-cloudcontrol-based-resources.integtest.js +3 -2
  22. package/tests/cli-integ-tests/orphan/cdk-orphan-detaches-resource.integtest.d.ts +1 -0
  23. package/tests/cli-integ-tests/orphan/cdk-orphan-detaches-resource.integtest.js +72 -0
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
4
+ const yaml = require("yaml");
5
+ const lib_1 = require("../../../lib");
6
+ (0, lib_1.integTest)('cdk orphan detaches a resource from the stack without deleting it', (0, lib_1.withDefaultFixture)(async (fixture) => {
7
+ const stackName = fixture.fullStackName('orphanable');
8
+ // Deploy the stack with a DynamoDB table + Lambda consumer
9
+ await fixture.cdkDeploy('orphanable');
10
+ // Get outputs
11
+ const describeResponse = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStacksCommand({ StackName: stackName }));
12
+ const outputs = describeResponse.Stacks?.[0]?.Outputs ?? [];
13
+ const tableName = outputs.find((o) => o.OutputKey === 'TableName')?.OutputValue;
14
+ expect(tableName).toBeDefined();
15
+ try {
16
+ // Verify the table resource exists in the template before orphaning
17
+ const templateBefore = await fixture.aws.cloudFormation.send(new client_cloudformation_1.GetTemplateCommand({ StackName: stackName }));
18
+ const templateBodyBefore = yaml.parse(templateBefore.TemplateBody);
19
+ expect(templateBodyBefore.Resources).toHaveProperty('MyTable794EDED1');
20
+ // Put an item in the table before orphan
21
+ await fixture.aws.dynamoDb.putItem({
22
+ TableName: tableName,
23
+ Item: { PK: { S: 'before-orphan' } },
24
+ });
25
+ // Orphan the table
26
+ const orphanOutput = await fixture.cdk([
27
+ 'orphan',
28
+ `${stackName}/MyTable`,
29
+ '--unstable=orphan',
30
+ '--yes',
31
+ ]);
32
+ // Verify the output contains a resource mapping for import
33
+ expect(orphanOutput).toContain('resource-mapping-inline');
34
+ expect(orphanOutput).toContain('TableName');
35
+ // Verify the template after orphan: table gone, Lambda env vars replaced with literals
36
+ const templateAfter = await fixture.aws.cloudFormation.send(new client_cloudformation_1.GetTemplateCommand({ StackName: stackName }));
37
+ const templateBody = yaml.parse(templateAfter.TemplateBody);
38
+ expect(templateBody.Resources).not.toHaveProperty('MyTable794EDED1');
39
+ expect(templateBody).toMatchObject({
40
+ Resources: expect.objectContaining({
41
+ Consumer8D6BE417: expect.objectContaining({
42
+ Type: 'AWS::Lambda::Function',
43
+ Properties: expect.objectContaining({
44
+ Environment: {
45
+ Variables: {
46
+ TABLE_NAME: expect.stringContaining('MyTable'),
47
+ TABLE_ARN: expect.stringContaining('arn:aws:dynamodb'),
48
+ },
49
+ },
50
+ }),
51
+ }),
52
+ }),
53
+ });
54
+ // Verify the table still exists and data is intact (strongly consistent read)
55
+ const getItemResult = await fixture.aws.dynamoDb.getItem({
56
+ TableName: tableName,
57
+ Key: { PK: { S: 'before-orphan' } },
58
+ ConsistentRead: true,
59
+ });
60
+ expect(getItemResult.Item?.PK?.S).toBe('before-orphan');
61
+ }
62
+ finally {
63
+ // Clean up the retained table to avoid leaking resources
64
+ try {
65
+ await fixture.aws.dynamoDb.deleteTable({ TableName: tableName });
66
+ }
67
+ catch (e) {
68
+ // Ignore
69
+ }
70
+ }
71
+ }));
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW9ycGhhbi1kZXRhY2hlcy1yZXNvdXJjZS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstb3JwaGFuLWRldGFjaGVzLXJlc291cmNlLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBFQUEyRjtBQUMzRiw2QkFBNkI7QUFDN0Isc0NBQTZEO0FBRTdELElBQUEsZUFBUyxFQUNQLG1FQUFtRSxFQUNuRSxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXRELDJEQUEyRDtJQUMzRCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFdEMsY0FBYztJQUNkLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzVELElBQUksNkNBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FDcEQsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDNUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDaEYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRWhDLElBQUksQ0FBQztRQUNILG9FQUFvRTtRQUNwRSxNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDMUQsSUFBSSwwQ0FBa0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVB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bW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICd5YW1sJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIG9ycGhhbiBkZXRhY2hlcyBhIHJlc291cmNlIGZyb20gdGhlIHN0YWNrIHdpdGhvdXQgZGVsZXRpbmcgaXQnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ29ycGhhbmFibGUnKTtcblxuICAgIC8vIERlcGxveSB0aGUgc3RhY2sgd2l0aCBhIER5bmFtb0RCIHRhYmxlICsgTGFtYmRhIGNvbnN1bWVyXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ29ycGhhbmFibGUnKTtcblxuICAgIC8vIEdldCBvdXRwdXRzXG4gICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHsgU3RhY2tOYW1lOiBzdGFja05hbWUgfSksXG4gICAgKTtcbiAgICBjb25zdCBvdXRwdXRzID0gZGVzY3JpYmVSZXNwb25zZS5TdGFja3M/LlswXT8uT3V0cHV0cyA/PyBbXTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBvdXRwdXRzLmZpbmQoKG8pID0+IG8uT3V0cHV0S2V5ID09PSAnVGFibGVOYW1lJyk/Lk91dHB1dFZhbHVlO1xuICAgIGV4cGVjdCh0YWJsZU5hbWUpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gVmVyaWZ5IHRoZSB0YWJsZSByZXNvdXJjZSBleGlzdHMgaW4gdGhlIHRlbXBsYXRlIGJlZm9yZSBvcnBoYW5pbmdcbiAgICAgIGNvbnN0IHRlbXBsYXRlQmVmb3JlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IEdldFRlbXBsYXRlQ29tbWFuZCh7IFN0YWNrTmFtZTogc3RhY2tOYW1lIH0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlQm9keUJlZm9yZSA9IHlhbWwucGFyc2UodGVtcGxhdGVCZWZvcmUuVGVtcGxhdGVCb2R5ISk7XG4gICAgICBleHBlY3QodGVtcGxhdGVCb2R5QmVmb3JlLlJlc291cmNlcykudG9IYXZlUHJvcGVydHkoJ015VGFibGU3OTRFREVEMScpO1xuXG4gICAgICAvLyBQdXQgYW4gaXRlbSBpbiB0aGUgdGFibGUgYmVmb3JlIG9ycGhhblxuICAgICAgYXdhaXQgZml4dHVyZS5hd3MuZHluYW1vRGIucHV0SXRlbSh7XG4gICAgICAgIFRhYmxlTmFtZTogdGFibGVOYW1lISxcbiAgICAgICAgSXRlbTogeyBQSzogeyBTOiAnYmVmb3JlLW9ycGhhbicgfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9ycGhhbiB0aGUgdGFibGVcbiAgICAgIGNvbnN0IG9ycGhhbk91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFtcbiAgICAgICAgJ29ycGhhbicsXG4gICAgICAgIGAke3N0YWNrTmFtZX0vTXlUYWJsZWAsXG4gICAgICAgICctLXVuc3RhYmxlPW9ycGhhbicsXG4gICAgICAgICctLXllcycsXG4gICAgICBdKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoZSBvdXRwdXQgY29udGFpbnMgYSByZXNvdXJjZSBtYXBwaW5nIGZvciBpbXBvcnRcbiAgICAgIGV4cGVjdChvcnBoYW5PdXRwdXQpLnRvQ29udGFpbigncmVzb3VyY2UtbWFwcGluZy1pbmxpbmUnKTtcbiAgICAgIGV4cGVjdChvcnBoYW5PdXRwdXQpLnRvQ29udGFpbignVGFibGVOYW1lJyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdGVtcGxhdGUgYWZ0ZXIgb3JwaGFuOiB0YWJsZSBnb25lLCBMYW1iZGEgZW52IHZhcnMgcmVwbGFjZWQgd2l0aCBsaXRlcmFsc1xuICAgICAgY29uc3QgdGVtcGxhdGVBZnRlciA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgIG5ldyBHZXRUZW1wbGF0ZUNvbW1hbmQoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZUJvZHkgPSB5YW1sLnBhcnNlKHRlbXBsYXRlQWZ0ZXIuVGVtcGxhdGVCb2R5ISk7XG5cbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZUJvZHkuUmVzb3VyY2VzKS5ub3QudG9IYXZlUHJvcGVydHkoJ015VGFibGU3OTRFREVEMScpO1xuICAgICAgZXhwZWN0KHRlbXBsYXRlQm9keSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIFJlc291cmNlczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIENvbnN1bWVyOEQ2QkU0MTc6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICAgICAgUHJvcGVydGllczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIFZhcmlhYmxlczoge1xuICAgICAgICAgICAgICAgICAgVEFCTEVfTkFNRTogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ015VGFibGUnKSxcbiAgICAgICAgICAgICAgICAgIFRBQkxFX0FSTjogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ2Fybjphd3M6ZHluYW1vZGInKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdGFibGUgc3RpbGwgZXhpc3RzIGFuZCBkYXRhIGlzIGludGFjdCAoc3Ryb25nbHkgY29uc2lzdGVudCByZWFkKVxuICAgICAgY29uc3QgZ2V0SXRlbVJlc3VsdCA9IGF3YWl0IGZpeHR1cmUuYXdzLmR5bmFtb0RiLmdldEl0ZW0oe1xuICAgICAgICBUYWJsZU5hbWU6IHRhYmxlTmFtZSEsXG4gICAgICAgIEtleTogeyBQSzogeyBTOiAnYmVmb3JlLW9ycGhhbicgfSB9LFxuICAgICAgICBDb25zaXN0ZW50UmVhZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGdldEl0ZW1SZXN1bHQuSXRlbT8uUEs/LlMpLnRvQmUoJ2JlZm9yZS1vcnBoYW4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYW4gdXAgdGhlIHJldGFpbmVkIHRhYmxlIHRvIGF2b2lkIGxlYWtpbmcgcmVzb3VyY2VzXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmF3cy5keW5hbW9EYi5kZWxldGVUYWJsZSh7IFRhYmxlTmFtZTogdGFibGVOYW1lISB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWdub3JlXG4gICAgICB9XG4gICAgfVxuICB9KSxcbik7XG4iXX0=