@aws-cdk-testing/cli-integ
Version:
Integration tests for the AWS CDK CLI
92 lines • 13.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.integTest = integTest;
exports.randomString = randomString;
const fs = require("fs");
const path = require("path");
const corking_1 = require("./corking");
const SKIP_TESTS = fs.readFileSync(path.join(__dirname, '..', 'skip-tests.txt'), { encoding: 'utf-8' })
.split('\n')
.map(x => x.trim())
.filter(x => x && !x.startsWith('#'));
if (SKIP_TESTS.length > 0) {
process.stderr.write(`ℹ️ Skipping tests: ${JSON.stringify(SKIP_TESTS)}\n`);
}
// Whether we want to stop after the first failure, for quicker debugging (hopefully).
const FAIL_FAST = process.env.FAIL_FAST === 'true';
// Keep track of whether the suite has failed. If so, we stop running.
let failed = false;
/**
* A wrapper for jest's 'test' which takes regression-disabled tests into account and prints a banner
*/
function integTest(name, callback, timeoutMillis) {
const runner = shouldSkip(name) ? test.skip : test;
runner(name, async () => {
const output = new corking_1.MemoryStream();
output.write('================================================================\n');
output.write(`${name}\n`);
output.write('================================================================\n');
const now = Date.now();
process.stderr.write(`[INTEG TEST::${name}] Starting (pid ${process.pid})...\n`);
try {
if (FAIL_FAST && failed) {
throw new Error('FAIL_FAST requested and currently failing. Stopping test early.');
}
return await callback({
output,
randomString: randomString(),
name,
log(s) {
output.write(`${s}\n`);
},
});
}
catch (e) {
failed = true;
// Print the buffered output, only if the test fails.
output.write(e.message);
output.write(e.stack);
process.stderr.write(`[INTEG TEST::${name}] Failed: ${e}\n`);
const isGitHub = !!process.env.GITHUB_RUN_ID;
if (isGitHub) {
// GitHub Actions compatible output formatting
// https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#setting-an-error-message
let written = process.stderr.write(`::error title=Failed ${name}::${e.message}\n`);
if (!written) {
// Wait for drain
await new Promise((ok) => process.stderr.once('drain', ok));
}
// Print output only if the test fails. Use 'console.log' so the output is buffered by
// jest and prints without a stack trace (if verbose: false).
written = process.stdout.write([
`::group::Failure details: ${name} (click to expand)\n`,
`${output.buffer().toString()}\n`,
'::endgroup::\n',
].join(''));
if (!written) {
// Wait for drain
await new Promise((ok) => process.stdout.once('drain', ok));
}
}
else {
// Use 'console.log' so the output is buffered by
// jest and prints without a stack trace (if verbose: false).
// eslint-disable-next-line no-console
console.log(output.buffer().toString());
}
throw e;
}
finally {
const duration = Date.now() - now;
process.stderr.write(`[INTEG TEST::${name}] Done (${duration} ms).\n`);
}
}, timeoutMillis);
}
function shouldSkip(testName) {
return SKIP_TESTS.includes(testName);
}
function randomString() {
// Crazy
return Math.random().toString(36).replace(/[^a-z0-9]+/g, '');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWctdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVnLXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE2QkEsOEJBdUVDO0FBTUQsb0NBR0M7QUE3R0QseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qix1Q0FBeUM7QUFFekMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztLQUNwRyxLQUFLLENBQUMsSUFBSSxDQUFDO0tBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ2xCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUV4QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFFRCxzRkFBc0Y7QUFDdEYsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDO0FBRW5ELHNFQUFzRTtBQUN0RSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFTbkI7O0dBRUc7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLElBQVksRUFDWixRQUFpRCxFQUNqRCxhQUFzQjtJQUV0QixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUVuRCxN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Q0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxXQUFXLFFBQVEsU0FBUyxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsUUFBZ0I7SUFDbEMsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxTQUFnQixZQUFZO0lBQzFCLFFBQVE7SUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IE1lbW9yeVN0cmVhbSB9IGZyb20gJy4vY29ya2luZyc7XG5cbmNvbnN0IFNLSVBfVEVTVFMgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3NraXAtdGVzdHMudHh0JyksIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSlcbiAgLnNwbGl0KCdcXG4nKVxuICAubWFwKHggPT4geC50cmltKCkpXG4gIC5maWx0ZXIoeCA9PiB4ICYmICF4LnN0YXJ0c1dpdGgoJyMnKSk7XG5cbmlmIChTS0lQX1RFU1RTLmxlbmd0aCA+IDApIHtcbiAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYOKEue+4jyBTa2lwcGluZyB0ZXN0czogJHtKU09OLnN0cmluZ2lmeShTS0lQX1RFU1RTKX1cXG5gKTtcbn1cblxuLy8gV2hldGhlciB3ZSB3YW50IHRvIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IGZhaWx1cmUsIGZvciBxdWlja2VyIGRlYnVnZ2luZyAoaG9wZWZ1bGx5KS5cbmNvbnN0IEZBSUxfRkFTVCA9IHByb2Nlc3MuZW52LkZBSUxfRkFTVCA9PT0gJ3RydWUnO1xuXG4vLyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlIHN1aXRlIGhhcyBmYWlsZWQuIElmIHNvLCB3ZSBzdG9wIHJ1bm5pbmcuXG5sZXQgZmFpbGVkID0gZmFsc2U7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdENvbnRleHQge1xuICByZWFkb25seSByYW5kb21TdHJpbmc6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBvdXRwdXQ6IE5vZGVKUy5Xcml0YWJsZVN0cmVhbTtcbiAgbG9nKHM6IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qKlxuICogQSB3cmFwcGVyIGZvciBqZXN0J3MgJ3Rlc3QnIHdoaWNoIHRha2VzIHJlZ3Jlc3Npb24tZGlzYWJsZWQgdGVzdHMgaW50byBhY2NvdW50IGFuZCBwcmludHMgYSBiYW5uZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVnVGVzdChcbiAgbmFtZTogc3RyaW5nLFxuICBjYWxsYmFjazogKGNvbnRleHQ6IFRlc3RDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+LFxuICB0aW1lb3V0TWlsbGlzPzogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGNvbnN0IHJ1bm5lciA9IHNob3VsZFNraXAobmFtZSkgPyB0ZXN0LnNraXAgOiB0ZXN0O1xuXG4gIHJ1bm5lcihuYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IE1lbW9yeVN0cmVhbSgpO1xuXG4gICAgb3V0cHV0LndyaXRlKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuJyk7XG4gICAgb3V0cHV0LndyaXRlKGAke25hbWV9XFxuYCk7XG4gICAgb3V0cHV0LndyaXRlKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuJyk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBbSU5URUcgVEVTVDo6JHtuYW1lfV0gU3RhcnRpbmcgKHBpZCAke3Byb2Nlc3MucGlkfSkuLi5cXG5gKTtcbiAgICB0cnkge1xuICAgICAgaWYgKEZBSUxfRkFTVCAmJiBmYWlsZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGQUlMX0ZBU1QgcmVxdWVzdGVkIGFuZCBjdXJyZW50bHkgZmFpbGluZy4gU3RvcHBpbmcgdGVzdCBlYXJseS4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKHtcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICByYW5kb21TdHJpbmc6IHJhbmRvbVN0cmluZygpLFxuICAgICAgICBuYW1lLFxuICAgICAgICBsb2coczogc3RyaW5nKSB7XG4gICAgICAgICAgb3V0cHV0LndyaXRlKGAke3N9XFxuYCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGZhaWxlZCA9IHRydWU7XG5cbiAgICAgIC8vIFByaW50IHRoZSBidWZmZXJlZCBvdXRwdXQsIG9ubHkgaWYgdGhlIHRlc3QgZmFpbHMuXG4gICAgICBvdXRwdXQud3JpdGUoZS5tZXNzYWdlKTtcbiAgICAgIG91dHB1dC53cml0ZShlLnN0YWNrKTtcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBbSU5URUcgVEVTVDo6JHtuYW1lfV0gRmFpbGVkOiAke2V9XFxuYCk7XG5cbiAgICAgIGNvbnN0IGlzR2l0SHViID0gISFwcm9jZXNzLmVudi5HSVRIVUJfUlVOX0lEO1xuXG4gICAgICBpZiAoaXNHaXRIdWIpIHtcbiAgICAgICAgLy8gR2l0SHViIEFjdGlvbnMgY29tcGF0aWJsZSBvdXRwdXQgZm9ybWF0dGluZ1xuICAgICAgICAvLyBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3dyaXRpbmctd29ya2Zsb3dzL2Nob29zaW5nLXdoYXQteW91ci13b3JrZmxvdy1kb2VzL3dvcmtmbG93LWNvbW1hbmRzLWZvci1naXRodWItYWN0aW9ucyNzZXR0aW5nLWFuLWVycm9yLW1lc3NhZ2VcbiAgICAgICAgbGV0IHdyaXR0ZW4gPSBwcm9jZXNzLnN0ZGVyci53cml0ZShgOjplcnJvciB0aXRsZT1GYWlsZWQgJHtuYW1lfTo6JHtlLm1lc3NhZ2V9XFxuYCk7XG4gICAgICAgIGlmICghd3JpdHRlbikge1xuICAgICAgICAgIC8vIFdhaXQgZm9yIGRyYWluXG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKG9rKSA9PiBwcm9jZXNzLnN0ZGVyci5vbmNlKCdkcmFpbicsIG9rKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmludCBvdXRwdXQgb25seSBpZiB0aGUgdGVzdCBmYWlscy4gVXNlICdjb25zb2xlLmxvZycgc28gdGhlIG91dHB1dCBpcyBidWZmZXJlZCBieVxuICAgICAgICAvLyBqZXN0IGFuZCBwcmludHMgd2l0aG91dCBhIHN0YWNrIHRyYWNlIChpZiB2ZXJib3NlOiBmYWxzZSkuXG4gICAgICAgIHdyaXR0ZW4gPSBwcm9jZXNzLnN0ZG91dC53cml0ZShbXG4gICAgICAgICAgYDo6Z3JvdXA6OkZhaWx1cmUgZGV0YWlsczogJHtuYW1lfSAoY2xpY2sgdG8gZXhwYW5kKVxcbmAsXG4gICAgICAgICAgYCR7b3V0cHV0LmJ1ZmZlcigpLnRvU3RyaW5nKCl9XFxuYCxcbiAgICAgICAgICAnOjplbmRncm91cDo6XFxuJyxcbiAgICAgICAgXS5qb2luKCcnKSk7XG4gICAgICAgIGlmICghd3JpdHRlbikge1xuICAgICAgICAgIC8vIFdhaXQgZm9yIGRyYWluXG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKG9rKSA9PiBwcm9jZXNzLnN0ZG91dC5vbmNlKCdkcmFpbicsIG9rKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVzZSAnY29uc29sZS5sb2cnIHNvIHRoZSBvdXRwdXQgaXMgYnVmZmVyZWQgYnlcbiAgICAgICAgLy8gamVzdCBhbmQgcHJpbnRzIHdpdGhvdXQgYSBzdGFjayB0cmFjZSAoaWYgdmVyYm9zZTogZmFsc2UpLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmxvZyhvdXRwdXQuYnVmZmVyKCkudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBub3c7XG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgW0lOVEVHIFRFU1Q6OiR7bmFtZX1dIERvbmUgKCR7ZHVyYXRpb259IG1zKS5cXG5gKTtcbiAgICB9XG4gIH0sIHRpbWVvdXRNaWxsaXMpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRTa2lwKHRlc3ROYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIFNLSVBfVEVTVFMuaW5jbHVkZXModGVzdE5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKCkge1xuICAvLyBDcmF6eVxuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXowLTldKy9nLCAnJyk7XG59XG4iXX0=