@aws-cdk-testing/cli-integ
Version:
Integration tests for the AWS CDK CLI
51 lines • 8.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const client_ssm_1 = require("@aws-sdk/client-ssm");
const lib_1 = require("../../../lib");
/**
* Regression test for https://github.com/aws/aws-cdk-cli/issues/641
*
* When a resource's name (or any property) is resolved at deploy time from an SSM parameter,
* the synthesized CloudFormation template is identical regardless of the parameter's value.
* A template-only diff therefore reports "no differences", but the change set that
* `--method=change-set` creates *does* know the value changed.
*
* This test deploys a queue whose name comes from an SSM parameter, changes the parameter
* out-of-band, and asserts that the change-set diff surfaces the (replacing) change while the
* template-only diff does not.
*/
(0, lib_1.integTest)('cdk diff --method=change-set detects SSM-parameter-driven changes that template diff misses', (0, lib_1.withDefaultFixture)(async (fixture) => {
const parameterName = `/cdk-integ/${fixture.randomString}/queue-name`;
const queueNameV1 = `cdktest-${fixture.randomString}-q1`;
const queueNameV2 = `cdktest-${fixture.randomString}-q2`;
const stackName = fixture.fullStackName('ssm-resolve-queue');
// GIVEN - an SSM parameter with an initial value, and a deployed stack that names its queue after it
await fixture.aws.ssm.send(new client_ssm_1.PutParameterCommand({
Name: parameterName,
Type: 'String',
Value: queueNameV1,
}));
fixture.aws.addCleanup(() => fixture.aws.ssm.send(new client_ssm_1.DeleteParameterCommand({ Name: parameterName })));
await fixture.cdkDeploy('ssm-resolve-queue', {
modEnv: { SSM_PARAMETER_NAME: parameterName },
});
// WHEN - the SSM parameter value changes out-of-band (the CDK app/template is unchanged)
await fixture.aws.ssm.send(new client_ssm_1.PutParameterCommand({
Name: parameterName,
Type: 'String',
Value: queueNameV2,
Overwrite: true,
}));
// THEN - a template-only diff sees nothing, because the template is byte-for-byte identical
const templateDiff = await fixture.cdk(['diff', '--method=template', stackName], {
modEnv: { SSM_PARAMETER_NAME: parameterName },
});
expect(templateDiff).toContain('There were no differences');
// ...but the change-set diff surfaces the queue change (a replacement, since QueueName is immutable)
const changeSetDiff = await fixture.cdk(['diff', '--method=change-set', stackName], {
modEnv: { SSM_PARAMETER_NAME: parameterName },
});
expect(changeSetDiff).not.toContain('There were no differences');
expect(changeSetDiff).toContain('AWS::SQS::Queue');
}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kaWZmLS0tbWV0aG9kLWNoYW5nZS1zZXQtZGV0ZWN0cy1zc20tcGFyYW1ldGVyLWRyaXZlbi1jaGFuZ2VzLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1jZGstZGlmZi0tLW1ldGhvZC1jaGFuZ2Utc2V0LWRldGVjdHMtc3NtLXBhcmFtZXRlci1kcml2ZW4tY2hhbmdlcy5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFBa0Y7QUFDbEYsc0NBQTZEO0FBRTdEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsSUFBQSxlQUFTLEVBQ1AsNkZBQTZGLEVBQzdGLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25DLE1BQU0sYUFBYSxHQUFHLGNBQWMsT0FBTyxDQUFDLFlBQVksYUFBYSxDQUFDO0lBQ3RFLE1BQU0sV0FBVyxHQUFHLFdBQVcsT0FBTyxDQUFDLFlBQVksS0FBSyxDQUFDO0lBQ3pELE1BQU0sV0FBVyxHQUFHLFdBQVcsT0FBTyxDQUFDLFlBQVksS0FBSyxDQUFDO0lBQ3pELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUU3RCxxR0FBcUc7SUFDckcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxnQ0FBbUIsQ0FBQztRQUNqRCxJQUFJLEVBQUUsYUFBYTtRQUNuQixJQUFJLEVBQUUsUUFBUTtRQUNkLEtBQUssRUFBRSxXQUFXO0tBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksbUNBQXNCLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFO1FBQzNDLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRTtLQUM5QyxDQUFDLENBQUM7SUFFSCx5RkFBeUY7SUFDekYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxnQ0FBbUIsQ0FBQztRQUNqRCxJQUFJLEVBQUUsYUFBYTtRQUNuQixJQUFJLEVBQUUsUUFBUTtRQUNkLEtBQUssRUFBRSxXQUFXO1FBQ2xCLFNBQVMsRUFBRSxJQUFJO0tBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBRUosNEZBQTRGO0lBQzVGLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUMvRSxNQUFNLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUU7S0FDOUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBRTVELHFHQUFxRztJQUNyRyxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbEYsTUFBTSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFO0tBQzlDLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDakUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWxldGVQYXJhbWV0ZXJDb21tYW5kLCBQdXRQYXJhbWV0ZXJDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNzbSc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhEZWZhdWx0Rml4dHVyZSB9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbi8qKlxuICogUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGstY2xpL2lzc3Vlcy82NDFcbiAqXG4gKiBXaGVuIGEgcmVzb3VyY2UncyBuYW1lIChvciBhbnkgcHJvcGVydHkpIGlzIHJlc29sdmVkIGF0IGRlcGxveSB0aW1lIGZyb20gYW4gU1NNIHBhcmFtZXRlcixcbiAqIHRoZSBzeW50aGVzaXplZCBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSBpcyBpZGVudGljYWwgcmVnYXJkbGVzcyBvZiB0aGUgcGFyYW1ldGVyJ3MgdmFsdWUuXG4gKiBBIHRlbXBsYXRlLW9ubHkgZGlmZiB0aGVyZWZvcmUgcmVwb3J0cyBcIm5vIGRpZmZlcmVuY2VzXCIsIGJ1dCB0aGUgY2hhbmdlIHNldCB0aGF0XG4gKiBgLS1tZXRob2Q9Y2hhbmdlLXNldGAgY3JlYXRlcyAqZG9lcyoga25vdyB0aGUgdmFsdWUgY2hhbmdlZC5cbiAqXG4gKiBUaGlzIHRlc3QgZGVwbG95cyBhIHF1ZXVlIHdob3NlIG5hbWUgY29tZXMgZnJvbSBhbiBTU00gcGFyYW1ldGVyLCBjaGFuZ2VzIHRoZSBwYXJhbWV0ZXJcbiAqIG91dC1vZi1iYW5kLCBhbmQgYXNzZXJ0cyB0aGF0IHRoZSBjaGFuZ2Utc2V0IGRpZmYgc3VyZmFjZXMgdGhlIChyZXBsYWNpbmcpIGNoYW5nZSB3aGlsZSB0aGVcbiAqIHRlbXBsYXRlLW9ubHkgZGlmZiBkb2VzIG5vdC5cbiAqL1xuaW50ZWdUZXN0KFxuICAnY2RrIGRpZmYgLS1tZXRob2Q9Y2hhbmdlLXNldCBkZXRlY3RzIFNTTS1wYXJhbWV0ZXItZHJpdmVuIGNoYW5nZXMgdGhhdCB0ZW1wbGF0ZSBkaWZmIG1pc3NlcycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBgL2Nkay1pbnRlZy8ke2ZpeHR1cmUucmFuZG9tU3RyaW5nfS9xdWV1ZS1uYW1lYDtcbiAgICBjb25zdCBxdWV1ZU5hbWVWMSA9IGBjZGt0ZXN0LSR7Zml4dHVyZS5yYW5kb21TdHJpbmd9LXExYDtcbiAgICBjb25zdCBxdWV1ZU5hbWVWMiA9IGBjZGt0ZXN0LSR7Zml4dHVyZS5yYW5kb21TdHJpbmd9LXEyYDtcbiAgICBjb25zdCBzdGFja05hbWUgPSBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3NzbS1yZXNvbHZlLXF1ZXVlJyk7XG5cbiAgICAvLyBHSVZFTiAtIGFuIFNTTSBwYXJhbWV0ZXIgd2l0aCBhbiBpbml0aWFsIHZhbHVlLCBhbmQgYSBkZXBsb3llZCBzdGFjayB0aGF0IG5hbWVzIGl0cyBxdWV1ZSBhZnRlciBpdFxuICAgIGF3YWl0IGZpeHR1cmUuYXdzLnNzbS5zZW5kKG5ldyBQdXRQYXJhbWV0ZXJDb21tYW5kKHtcbiAgICAgIE5hbWU6IHBhcmFtZXRlck5hbWUsXG4gICAgICBUeXBlOiAnU3RyaW5nJyxcbiAgICAgIFZhbHVlOiBxdWV1ZU5hbWVWMSxcbiAgICB9KSk7XG4gICAgZml4dHVyZS5hd3MuYWRkQ2xlYW51cCgoKSA9PiBmaXh0dXJlLmF3cy5zc20uc2VuZChuZXcgRGVsZXRlUGFyYW1ldGVyQ29tbWFuZCh7IE5hbWU6IHBhcmFtZXRlck5hbWUgfSkpKTtcblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdzc20tcmVzb2x2ZS1xdWV1ZScsIHtcbiAgICAgIG1vZEVudjogeyBTU01fUEFSQU1FVEVSX05BTUU6IHBhcmFtZXRlck5hbWUgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU4gLSB0aGUgU1NNIHBhcmFtZXRlciB2YWx1ZSBjaGFuZ2VzIG91dC1vZi1iYW5kICh0aGUgQ0RLIGFwcC90ZW1wbGF0ZSBpcyB1bmNoYW5nZWQpXG4gICAgYXdhaXQgZml4dHVyZS5hd3Muc3NtLnNlbmQobmV3IFB1dFBhcmFtZXRlckNvbW1hbmQoe1xuICAgICAgTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIFR5cGU6ICdTdHJpbmcnLFxuICAgICAgVmFsdWU6IHF1ZXVlTmFtZVYyLFxuICAgICAgT3ZlcndyaXRlOiB0cnVlLFxuICAgIH0pKTtcblxuICAgIC8vIFRIRU4gLSBhIHRlbXBsYXRlLW9ubHkgZGlmZiBzZWVzIG5vdGhpbmcsIGJlY2F1c2UgdGhlIHRlbXBsYXRlIGlzIGJ5dGUtZm9yLWJ5dGUgaWRlbnRpY2FsXG4gICAgY29uc3QgdGVtcGxhdGVEaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tbWV0aG9kPXRlbXBsYXRlJywgc3RhY2tOYW1lXSwge1xuICAgICAgbW9kRW52OiB7IFNTTV9QQVJBTUVURVJfTkFNRTogcGFyYW1ldGVyTmFtZSB9LFxuICAgIH0pO1xuICAgIGV4cGVjdCh0ZW1wbGF0ZURpZmYpLnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuXG4gICAgLy8gLi4uYnV0IHRoZSBjaGFuZ2Utc2V0IGRpZmYgc3VyZmFjZXMgdGhlIHF1ZXVlIGNoYW5nZSAoYSByZXBsYWNlbWVudCwgc2luY2UgUXVldWVOYW1lIGlzIGltbXV0YWJsZSlcbiAgICBjb25zdCBjaGFuZ2VTZXREaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tbWV0aG9kPWNoYW5nZS1zZXQnLCBzdGFja05hbWVdLCB7XG4gICAgICBtb2RFbnY6IHsgU1NNX1BBUkFNRVRFUl9OQU1FOiBwYXJhbWV0ZXJOYW1lIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KGNoYW5nZVNldERpZmYpLm5vdC50b0NvbnRhaW4oJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXMnKTtcbiAgICBleHBlY3QoY2hhbmdlU2V0RGlmZikudG9Db250YWluKCdBV1M6OlNRUzo6UXVldWUnKTtcbiAgfSksXG4pO1xuIl19