@aws-cdk-testing/cli-integ
Version:
Integration tests for the AWS CDK CLI
50 lines • 8.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
const client_lambda_1 = require("@aws-sdk/client-lambda");
const drift_helpers_1 = require("./drift_helpers");
const lib_1 = require("../../../lib");
(0, lib_1.integTest)('cdk drift', (0, lib_1.withDefaultFixture)(async (fixture) => {
await fixture.cdkDeploy('driftable', {});
// Assert that, right after deploying, there is no drift (because we just deployed it)
const drift = await fixture.cdk(['drift', fixture.fullStackName('driftable')], { verbose: false });
expect(drift).toMatch(/Stack.*driftable/); // can't just .toContain because of formatting
expect(drift).toContain('No drift detected');
expect(drift).toContain('✨ Number of resources with drift: 0');
expect(drift).not.toContain('unchecked'); // should not see unchecked resources unless verbose
// Get the Lambda, we want to now make it drift
const response = await fixture.aws.cloudFormation.send(new client_cloudformation_1.DescribeStackResourcesCommand({
StackName: fixture.fullStackName('driftable'),
}));
const lambdaResource = response.StackResources?.find(resource => resource.ResourceType === 'AWS::Lambda::Function');
if (!lambdaResource || !lambdaResource.PhysicalResourceId) {
throw new Error('Could not find Lambda function in stack resources');
}
const functionName = lambdaResource.PhysicalResourceId;
// Update the Lambda function, introducing drift
await fixture.aws.lambda.send(new client_lambda_1.UpdateFunctionConfigurationCommand({
FunctionName: functionName,
Description: 'I\'m slowly drifting (drifting away)',
}));
// Wait for the stack update to complete
await (0, drift_helpers_1.waitForLambdaUpdateComplete)(fixture, functionName);
const driftAfterModification = await fixture.cdk(['drift', fixture.fullStackName('driftable')], { verbose: false });
const expectedMatches = [
/Stack.*driftable/,
/[-].*This is my function!/m,
/[+].*I'm slowly drifting \(drifting away\)/m,
];
const expectedSubstrings = [
'1 resource has drifted', // num resources drifted
'✨ Number of resources with drift: 1',
'AWS::Lambda::Function', // the lambda should be marked drifted
'/Description', // the resources that have drifted
];
for (const expectedMatch of expectedMatches) {
expect(driftAfterModification).toMatch(expectedMatch);
}
for (const expectedSubstring of expectedSubstrings) {
expect(driftAfterModification).toContain(expectedSubstring);
}
}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNkay1kcmlmdC5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstY2RrLWRyaWZ0LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBFQUErRTtBQUMvRSwwREFBNEU7QUFDNUUsbURBQThEO0FBQzlELHNDQUE2RDtBQUU3RCxJQUFBLGVBQVMsRUFDUCxXQUFXLEVBQ1gsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV6QyxzRkFBc0Y7SUFDdEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5HLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLDhDQUE4QztJQUN6RixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDN0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsb0RBQW9EO0lBRTlGLCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDcEQsSUFBSSxxREFBNkIsQ0FBQztRQUNoQyxTQUFTLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7S0FDOUMsQ0FBQyxDQUNILENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxFQUFFLElBQUksQ0FDbEQsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxLQUFLLHVCQUF1QixDQUM5RCxDQUFDO0lBQ0YsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLGtCQUFrQixDQUFDO0lBRXZELGdEQUFnRDtJQUNoRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDM0IsSUFBSSxrREFBa0MsQ0FBQztRQUNyQyxZQUFZLEVBQUUsWUFBWTtRQUMxQixXQUFXLEVBQUUsc0NBQXNDO0tBQ3BELENBQUMsQ0FDSCxDQUFDO0lBRUYsd0NBQXdDO0lBQ3hDLE1BQU0sSUFBQSwyQ0FBMkIsRUFBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFekQsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFcEgsTUFBTSxlQUFlLEdBQUc7UUFDdEIsa0JBQWtCO1FBQ2xCLDRCQUE0QjtRQUM1Qiw2Q0FBNkM7S0FDOUMsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLEdBQUc7UUFDekIsd0JBQXdCLEVBQUUsd0JBQXdCO1FBQ2xELHNDQUFzQztRQUN0Qyx1QkFBdUIsRUFBRSxzQ0FBc0M7UUFDL0QsY0FBYyxFQUFFLGtDQUFrQztLQUNuRCxDQUFDO0lBQ0YsS0FBSyxNQUFNLGFBQWEsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELEtBQUssTUFBTSxpQkFBaUIsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlELENBQUM7QUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1sYW1iZGEnO1xuaW1wb3J0IHsgd2FpdEZvckxhbWJkYVVwZGF0ZUNvbXBsZXRlIH0gZnJvbSAnLi9kcmlmdF9oZWxwZXJzJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW50ZWdUZXN0KFxuICAnY2RrIGRyaWZ0JyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RyaWZ0YWJsZScsIHt9KTtcblxuICAgIC8vIEFzc2VydCB0aGF0LCByaWdodCBhZnRlciBkZXBsb3lpbmcsIHRoZXJlIGlzIG5vIGRyaWZ0IChiZWNhdXNlIHdlIGp1c3QgZGVwbG95ZWQgaXQpXG4gICAgY29uc3QgZHJpZnQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RyaWZ0JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdkcmlmdGFibGUnKV0sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG5cbiAgICBleHBlY3QoZHJpZnQpLnRvTWF0Y2goL1N0YWNrLipkcmlmdGFibGUvKTsgLy8gY2FuJ3QganVzdCAudG9Db250YWluIGJlY2F1c2Ugb2YgZm9ybWF0dGluZ1xuICAgIGV4cGVjdChkcmlmdCkudG9Db250YWluKCdObyBkcmlmdCBkZXRlY3RlZCcpO1xuICAgIGV4cGVjdChkcmlmdCkudG9Db250YWluKCfinKggIE51bWJlciBvZiByZXNvdXJjZXMgd2l0aCBkcmlmdDogMCcpO1xuICAgIGV4cGVjdChkcmlmdCkubm90LnRvQ29udGFpbigndW5jaGVja2VkJyk7IC8vIHNob3VsZCBub3Qgc2VlIHVuY2hlY2tlZCByZXNvdXJjZXMgdW5sZXNzIHZlcmJvc2VcblxuICAgIC8vIEdldCB0aGUgTGFtYmRhLCB3ZSB3YW50IHRvIG5vdyBtYWtlIGl0IGRyaWZ0XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kKHtcbiAgICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2RyaWZ0YWJsZScpLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBsYW1iZGFSZXNvdXJjZSA9IHJlc3BvbnNlLlN0YWNrUmVzb3VyY2VzPy5maW5kKFxuICAgICAgcmVzb3VyY2UgPT4gcmVzb3VyY2UuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICApO1xuICAgIGlmICghbGFtYmRhUmVzb3VyY2UgfHwgIWxhbWJkYVJlc291cmNlLlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBMYW1iZGEgZnVuY3Rpb24gaW4gc3RhY2sgcmVzb3VyY2VzJyk7XG4gICAgfVxuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGxhbWJkYVJlc291cmNlLlBoeXNpY2FsUmVzb3VyY2VJZDtcblxuICAgIC8vIFVwZGF0ZSB0aGUgTGFtYmRhIGZ1bmN0aW9uLCBpbnRyb2R1Y2luZyBkcmlmdFxuICAgIGF3YWl0IGZpeHR1cmUuYXdzLmxhbWJkYS5zZW5kKFxuICAgICAgbmV3IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmQoe1xuICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgRGVzY3JpcHRpb246ICdJXFwnbSBzbG93bHkgZHJpZnRpbmcgKGRyaWZ0aW5nIGF3YXkpJyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBXYWl0IGZvciB0aGUgc3RhY2sgdXBkYXRlIHRvIGNvbXBsZXRlXG4gICAgYXdhaXQgd2FpdEZvckxhbWJkYVVwZGF0ZUNvbXBsZXRlKGZpeHR1cmUsIGZ1bmN0aW9uTmFtZSk7XG5cbiAgICBjb25zdCBkcmlmdEFmdGVyTW9kaWZpY2F0aW9uID0gYXdhaXQgZml4dHVyZS5jZGsoWydkcmlmdCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnZHJpZnRhYmxlJyldLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRNYXRjaGVzID0gW1xuICAgICAgL1N0YWNrLipkcmlmdGFibGUvLFxuICAgICAgL1stXS4qVGhpcyBpcyBteSBmdW5jdGlvbiEvbSxcbiAgICAgIC9bK10uKkknbSBzbG93bHkgZHJpZnRpbmcgXFwoZHJpZnRpbmcgYXdheVxcKS9tLFxuICAgIF07XG4gICAgY29uc3QgZXhwZWN0ZWRTdWJzdHJpbmdzID0gW1xuICAgICAgJzEgcmVzb3VyY2UgaGFzIGRyaWZ0ZWQnLCAvLyBudW0gcmVzb3VyY2VzIGRyaWZ0ZWRcbiAgICAgICfinKggIE51bWJlciBvZiByZXNvdXJjZXMgd2l0aCBkcmlmdDogMScsXG4gICAgICAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywgLy8gdGhlIGxhbWJkYSBzaG91bGQgYmUgbWFya2VkIGRyaWZ0ZWRcbiAgICAgICcvRGVzY3JpcHRpb24nLCAvLyB0aGUgcmVzb3VyY2VzIHRoYXQgaGF2ZSBkcmlmdGVkXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IGV4cGVjdGVkTWF0Y2ggb2YgZXhwZWN0ZWRNYXRjaGVzKSB7XG4gICAgICBleHBlY3QoZHJpZnRBZnRlck1vZGlmaWNhdGlvbikudG9NYXRjaChleHBlY3RlZE1hdGNoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBleHBlY3RlZFN1YnN0cmluZyBvZiBleHBlY3RlZFN1YnN0cmluZ3MpIHtcbiAgICAgIGV4cGVjdChkcmlmdEFmdGVyTW9kaWZpY2F0aW9uKS50b0NvbnRhaW4oZXhwZWN0ZWRTdWJzdHJpbmcpO1xuICAgIH1cbiAgfSksXG4pO1xuIl19