@aws-cdk-testing/cli-integ
Version:
Integration tests for the AWS CDK CLI
98 lines • 12.6 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
const child_process = __importStar(require("child_process"));
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const watch_helpers_1 = require("./watch-helpers");
const lib_1 = require("../../../lib");
jest.setTimeout(5 * 60 * 1000); // 5 minutes for watch tests
// Regression test for https://github.com/aws/aws-cdk-cli/issues/1647:
// a user-supplied glob scoped to a subdirectory (e.g. 'src/**/*.ts') must
// detect changes to files nested inside that directory. The chokidar v4
// `ignored` callback also gates directory traversal, so an earlier bug pruned
// the 'src' directory (which does not itself match the file glob) before any
// nested file could be discovered - watch then silently observed nothing.
(0, lib_1.integTest)('cdk watch detects file changes with a directory-scoped glob pattern', (0, lib_1.withDefaultFixture)(async (fixture) => {
// Create a watched file nested inside a subdirectory, matched by 'src/**/*.ts'.
const srcDir = path.join(fixture.integTestDir, 'src');
fs.mkdirSync(srcDir, { recursive: true });
const testFile = path.join(srcDir, 'watch-test-file.ts');
fs.writeFileSync(testFile, 'export const initial = true;');
// Update cdk.json with a watch glob scoped to the 'src' directory.
const cdkJsonPath = path.join(fixture.integTestDir, 'cdk.json');
const cdkJson = JSON.parse(fs.readFileSync(cdkJsonPath, 'utf-8'));
cdkJson.watch = {
include: ['src/**/*.ts'],
};
fs.writeFileSync(cdkJsonPath, JSON.stringify(cdkJson, null, 2));
await fixture.cli.makeCliAvailable();
let output = '';
// Start cdk watch
const watchProcess = child_process.spawn('cdk', [
'watch', '--hotswap', '-v', fixture.fullStackName('test-1'),
], {
cwd: fixture.integTestDir,
stdio: 'pipe',
env: { ...process.env, ...fixture.cdkShellEnv() },
});
try {
watchProcess.stdout?.on('data', (data) => {
output += data.toString();
fixture.log(data.toString());
});
watchProcess.stderr?.on('data', (data) => {
output += data.toString();
fixture.log(data.toString());
});
await (0, watch_helpers_1.waitForOutput)(() => output, "Triggering initial 'cdk deploy'");
fixture.log('✓ Watch start detected');
await (0, watch_helpers_1.waitForOutput)(() => output, 'deployment time');
fixture.log('✓ Initial deployment completed');
// Modify the nested file to trigger a watch event. Before the fix the
// 'src' directory was pruned, so this change was never detected.
fs.writeFileSync(testFile, 'export const modified = true;');
await (0, watch_helpers_1.waitForOutput)(() => output, 'Detected change to');
fixture.log('✓ Watch detected change to file nested under a directory-scoped glob');
// Wait for the second deployment to complete (2 occurrences of 'deployment time')
await (0, watch_helpers_1.waitForCondition)(() => (output.match(/deployment time/g) || []).length >= 2);
fixture.log('✓ Second deployment completed');
}
finally {
(0, watch_helpers_1.safeKillProcess)(watchProcess);
}
expect.assertions(4);
}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXdhdGNoLWRldGVjdHMtZmlsZS1jaGFuZ2VzLXdpdGgtZGlyZWN0b3J5LXNjb3BlZC1nbG9iLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay13YXRjaC1kZXRlY3RzLWZpbGUtY2hhbmdlcy13aXRoLWRpcmVjdG9yeS1zY29wZWQtZ2xvYi5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2REFBK0M7QUFDL0MsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtREFBbUY7QUFDbkYsc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtBQUU1RCxzRUFBc0U7QUFDdEUsMEVBQTBFO0FBQzFFLHdFQUF3RTtBQUN4RSw4RUFBOEU7QUFDOUUsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSxJQUFBLGVBQVMsRUFDUCxxRUFBcUUsRUFDckUsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsZ0ZBQWdGO0lBQ2hGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RCxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDekQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUUzRCxtRUFBbUU7SUFDbkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVB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ZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB3YWl0Rm9yT3V0cHV0LCB3YWl0Rm9yQ29uZGl0aW9uLCBzYWZlS2lsbFByb2Nlc3MgfSBmcm9tICcuL3dhdGNoLWhlbHBlcnMnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoNSAqIDYwICogMTAwMCk7IC8vIDUgbWludXRlcyBmb3Igd2F0Y2ggdGVzdHNcblxuLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGstY2xpL2lzc3Vlcy8xNjQ3OlxuLy8gYSB1c2VyLXN1cHBsaWVkIGdsb2Igc2NvcGVkIHRvIGEgc3ViZGlyZWN0b3J5IChlLmcuICdzcmMvKiovKi50cycpIG11c3Rcbi8vIGRldGVjdCBjaGFuZ2VzIHRvIGZpbGVzIG5lc3RlZCBpbnNpZGUgdGhhdCBkaXJlY3RvcnkuIFRoZSBjaG9raWRhciB2NFxuLy8gYGlnbm9yZWRgIGNhbGxiYWNrIGFsc28gZ2F0ZXMgZGlyZWN0b3J5IHRyYXZlcnNhbCwgc28gYW4gZWFybGllciBidWcgcHJ1bmVkXG4vLyB0aGUgJ3NyYycgZGlyZWN0b3J5ICh3aGljaCBkb2VzIG5vdCBpdHNlbGYgbWF0Y2ggdGhlIGZpbGUgZ2xvYikgYmVmb3JlIGFueVxuLy8gbmVzdGVkIGZpbGUgY291bGQgYmUgZGlzY292ZXJlZCAtIHdhdGNoIHRoZW4gc2lsZW50bHkgb2JzZXJ2ZWQgbm90aGluZy5cbmludGVnVGVzdChcbiAgJ2NkayB3YXRjaCBkZXRlY3RzIGZpbGUgY2hhbmdlcyB3aXRoIGEgZGlyZWN0b3J5LXNjb3BlZCBnbG9iIHBhdHRlcm4nLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBDcmVhdGUgYSB3YXRjaGVkIGZpbGUgbmVzdGVkIGluc2lkZSBhIHN1YmRpcmVjdG9yeSwgbWF0Y2hlZCBieSAnc3JjLyoqLyoudHMnLlxuICAgIGNvbnN0IHNyY0RpciA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ3NyYycpO1xuICAgIGZzLm1rZGlyU3luYyhzcmNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHRlc3RGaWxlID0gcGF0aC5qb2luKHNyY0RpciwgJ3dhdGNoLXRlc3QtZmlsZS50cycpO1xuICAgIGZzLndyaXRlRmlsZVN5bmModGVzdEZpbGUsICdleHBvcnQgY29uc3QgaW5pdGlhbCA9IHRydWU7Jyk7XG5cbiAgICAvLyBVcGRhdGUgY2RrLmpzb24gd2l0aCBhIHdhdGNoIGdsb2Igc2NvcGVkIHRvIHRoZSAnc3JjJyBkaXJlY3RvcnkuXG4gICAgY29uc3QgY2RrSnNvblBhdGggPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpO1xuICAgIGNvbnN0IGNka0pzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjZGtKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgIGNka0pzb24ud2F0Y2ggPSB7XG4gICAgICBpbmNsdWRlOiBbJ3NyYy8qKi8qLnRzJ10sXG4gICAgfTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGNka0pzb25QYXRoLCBKU09OLnN0cmluZ2lmeShjZGtKc29uLCBudWxsLCAyKSk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNsaS5tYWtlQ2xpQXZhaWxhYmxlKCk7XG5cbiAgICBsZXQgb3V0cHV0ID0gJyc7XG5cbiAgICAvLyBTdGFydCBjZGsgd2F0Y2hcbiAgICBjb25zdCB3YXRjaFByb2Nlc3MgPSBjaGlsZF9wcm9jZXNzLnNwYXduKCdjZGsnLCBbXG4gICAgICAnd2F0Y2gnLCAnLS1ob3Rzd2FwJywgJy12JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKSxcbiAgICBdLCB7XG4gICAgICBjd2Q6IGZpeHR1cmUuaW50ZWdUZXN0RGlyLFxuICAgICAgc3RkaW86ICdwaXBlJyxcbiAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgLi4uZml4dHVyZS5jZGtTaGVsbEVudigpIH0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgd2F0Y2hQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICBvdXRwdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBmaXh0dXJlLmxvZyhkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG4gICAgICB3YXRjaFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIG91dHB1dCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGZpeHR1cmUubG9nKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FpdEZvck91dHB1dCgoKSA9PiBvdXRwdXQsIFwiVHJpZ2dlcmluZyBpbml0aWFsICdjZGsgZGVwbG95J1wiKTtcbiAgICAgIGZpeHR1cmUubG9nKCfinJMgV2F0Y2ggc3RhcnQgZGV0ZWN0ZWQnKTtcblxuICAgICAgYXdhaXQgd2FpdEZvck91dHB1dCgoKSA9PiBvdXRwdXQsICdkZXBsb3ltZW50IHRpbWUnKTtcbiAgICAgIGZpeHR1cmUubG9nKCfinJMgSW5pdGlhbCBkZXBsb3ltZW50IGNvbXBsZXRlZCcpO1xuXG4gICAgICAvLyBNb2RpZnkgdGhlIG5lc3RlZCBmaWxlIHRvIHRyaWdnZXIgYSB3YXRjaCBldmVudC4gQmVmb3JlIHRoZSBmaXggdGhlXG4gICAgICAvLyAnc3JjJyBkaXJlY3Rvcnkgd2FzIHBydW5lZCwgc28gdGhpcyBjaGFuZ2Ugd2FzIG5ldmVyIGRldGVjdGVkLlxuICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZXN0RmlsZSwgJ2V4cG9ydCBjb25zdCBtb2RpZmllZCA9IHRydWU7Jyk7XG5cbiAgICAgIGF3YWl0IHdhaXRGb3JPdXRwdXQoKCkgPT4gb3V0cHV0LCAnRGV0ZWN0ZWQgY2hhbmdlIHRvJyk7XG4gICAgICBmaXh0dXJlLmxvZygn4pyTIFdhdGNoIGRldGVjdGVkIGNoYW5nZSB0byBmaWxlIG5lc3RlZCB1bmRlciBhIGRpcmVjdG9yeS1zY29wZWQgZ2xvYicpO1xuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgc2Vjb25kIGRlcGxveW1lbnQgdG8gY29tcGxldGUgKDIgb2NjdXJyZW5jZXMgb2YgJ2RlcGxveW1lbnQgdGltZScpXG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+IChvdXRwdXQubWF0Y2goL2RlcGxveW1lbnQgdGltZS9nKSB8fCBbXSkubGVuZ3RoID49IDIpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBTZWNvbmQgZGVwbG95bWVudCBjb21wbGV0ZWQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2FmZUtpbGxQcm9jZXNzKHdhdGNoUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgZXhwZWN0LmFzc2VydGlvbnMoNCk7XG4gIH0pLFxuKTtcbiJdfQ==