@aws-cdk/integ-runner
Version:
CDK Integration Testing Tool
100 lines • 14.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.runIntegrationTests = runIntegrationTests;
exports.runIntegrationTestsInParallel = runIntegrationTestsInParallel;
const common_1 = require("./common");
const logger = require("../logger");
const utils_1 = require("../utils");
/**
* Run Integration tests.
*/
async function runIntegrationTests(options) {
logger.highlight('\nRunning integration tests for failed tests...\n');
logger.print('Running in parallel across %sregions: %s', options.profiles ? `profiles ${options.profiles.join(', ')} and ` : '', options.regions.join(', '));
const totalTests = options.tests.length;
const responses = await runIntegrationTestsInParallel(options);
logger.highlight('\nTest Results: \n');
(0, common_1.printSummary)(totalTests, responses.failedTests.length);
return {
success: responses.failedTests.length === 0,
metrics: responses.metrics,
};
}
/**
* Returns a list of AccountWorkers based on the list of regions and profiles
* given to the CLI.
*/
function getAccountWorkers(regions, profiles) {
const workers = [];
function pushWorker(profile) {
for (const region of regions) {
workers.push({
region,
profile,
});
}
}
if (profiles && profiles.length > 0) {
for (const profile of profiles ?? []) {
pushWorker(profile);
}
}
else {
pushWorker();
}
return workers;
}
/**
* Runs a set of integration tests in parallel across a list of AWS regions.
* Only a single test can be run at a time in a given region. Once a region
* is done running a test, the next test will be pulled from the queue
*/
async function runIntegrationTestsInParallel(options) {
const queue = options.tests;
const results = {
metrics: [],
failedTests: [],
};
const accountWorkers = getAccountWorkers(options.regions, options.profiles);
async function runTest(worker) {
const start = Date.now();
const tests = {};
do {
const test = queue.pop();
if (!test)
break;
const testStart = Date.now();
logger.highlight(`Running test ${test.fileName} in ${worker.profile ? worker.profile + '/' : ''}${worker.region}`);
const response = await options.pool.exec('integTestWorker', [{
watch: options.watch,
region: worker.region,
profile: worker.profile,
tests: [test],
clean: options.clean,
dryRun: options.dryRun,
verbosity: options.verbosity,
updateWorkflow: options.updateWorkflow,
engine: options.engine,
}], {
on: common_1.printResults,
});
results.failedTests.push(...(0, utils_1.flatten)(response));
tests[test.fileName] = (Date.now() - testStart) / 1000;
} while (queue.length > 0);
const metrics = {
region: worker.region,
profile: worker.profile,
duration: (Date.now() - start) / 1000,
tests,
};
if (Object.keys(tests).length > 0) {
results.metrics.push(metrics);
}
}
const workers = accountWorkers.map((worker) => runTest(worker));
// Workers are their own concurrency limits
// eslint-disable-next-line @cdklabs/promiseall-no-unbounded-parallelism
await Promise.all(workers);
return results;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWctdGVzdC13b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZy10ZXN0LXdvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStDQSxrREFlQztBQWlERCxzRUFtREM7QUFoS0QscUNBQXNEO0FBQ3RELG9DQUFvQztBQUVwQyxvQ0FBbUM7QUF1Q25DOztHQUVHO0FBQ0ksS0FBSyxVQUFVLG1CQUFtQixDQUFDLE9BQTRCO0lBQ3BFLE1BQU0sQ0FBQyxTQUFTLENBQUMsbURBQW1ELENBQUMsQ0FBQztJQUN0RSxNQUFNLENBQUMsS0FBSyxDQUNWLDBDQUEwQyxFQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFDLEVBQUUsRUFDckUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUV4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN2QyxJQUFBLHFCQUFZLEVBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkQsT0FBTztRQUNMLE9BQU8sRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQzNDLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztLQUMzQixDQUFDO0FBQ0osQ0FBQztBQW9CRDs7O0dBR0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLE9BQWlCLEVBQUUsUUFBbUI7SUFDL0QsTUFBTSxPQUFPLEdBQW9CLEVBQUUsQ0FBQztJQUNwQyxTQUFTLFVBQVUsQ0FBQyxP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QUFLO1NBQ04sQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSwyQ0FBMkM7SUFDM0Msd0VBQXdFO0lBQ3hFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ0JhdGNoUmVzcG9uc2UsIEludGVnVGVzdE9wdGlvbnMsIEludGVnUnVubmVyTWV0cmljcyB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IHByaW50UmVzdWx0cywgcHJpbnRTdW1tYXJ5IH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IEludGVnVGVzdEluZm8gfSBmcm9tICcuLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgZmxhdHRlbiB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBhbiBpbnRlZ3JhdGlvbiB0ZXN0IGJhdGNoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdUZXN0QmF0Y2hSZXF1ZXN0IGV4dGVuZHMgSW50ZWdUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIHJlZ2lvbiB0byBydW4gdGhpcyBiYXRjaCBpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0byB1c2Ugd2hlbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIGFsbCBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdFJ1bk9wdGlvbnMgZXh0ZW5kcyBJbnRlZ1Rlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpb25zIHRvIHJ1biB0aGUgaW50ZWdyYXRpb24gdGVzdHMgYWNyb3NzLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgcnVubmVyIHRvIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBpbiBwYXJhbGxlbFxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgQVdTIHByb2ZpbGVzLiBUaGlzIHdpbGwgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGByZWdpb25zYFxuICAgKiB0byBydW4gdGVzdHMgaW4gcGFyYWxsZWwgYWNyb3NzIGFjY291bnRzICsgcmVnaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHdvcmtlcnBvb2wgdG8gdXNlXG4gICAqL1xuICByZWFkb25seSBwb29sOiB3b3JrZXJwb29sLldvcmtlclBvb2w7XG59XG5cbi8qKlxuICogUnVuIEludGVncmF0aW9uIHRlc3RzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSW50ZWdyYXRpb25UZXN0cyhvcHRpb25zOiBJbnRlZ1Rlc3RSdW5PcHRpb25zKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljc1tdIH0+IHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuUnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgZmFpbGVkIHRlc3RzLi4uXFxuJyk7XG4gIGxvZ2dlci5wcmludChcbiAgICAnUnVubmluZyBpbiBwYXJhbGxlbCBhY3Jvc3MgJXNyZWdpb25zOiAlcycsXG4gICAgb3B0aW9ucy5wcm9maWxlcyA/IGBwcm9maWxlcyAke29wdGlvbnMucHJvZmlsZXMuam9pbignLCAnKX0gYW5kIGA6ICcnLFxuICAgIG9wdGlvbnMucmVnaW9ucy5qb2luKCcsICcpKTtcbiAgY29uc3QgdG90YWxUZXN0cyA9IG9wdGlvbnMudGVzdHMubGVuZ3RoO1xuXG4gIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IHJ1bkludGVncmF0aW9uVGVzdHNJblBhcmFsbGVsKG9wdGlvbnMpO1xuICBsb2dnZXIuaGlnaGxpZ2h0KCdcXG5UZXN0IFJlc3VsdHM6IFxcbicpO1xuICBwcmludFN1bW1hcnkodG90YWxUZXN0cywgcmVzcG9uc2VzLmZhaWxlZFRlc3RzLmxlbmd0aCk7XG4gIHJldHVybiB7XG4gICAgc3VjY2VzczogcmVzcG9uc2VzLmZhaWxlZFRlc3RzLmxlbmd0aCA9PT0gMCxcbiAgICBtZXRyaWNzOiByZXNwb25zZXMubWV0cmljcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgd29ya2VyIGZvciBhIHNpbmdsZSBhY2NvdW50ICsgcmVnaW9uXG4gKi9cbmludGVyZmFjZSBBY2NvdW50V29ya2VyIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhlIHdvcmtlciBzaG91bGQgcnVuIGluXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyBwcm9maWxlIHRoYXQgdGhlIHdvcmtlciBzaG91bGQgdXNlXG4gICAqIFRoaXMgd2lsbCBiZSBwYXNzZWQgYXMgdGhlICctLXByb2ZpbGUnIG9wdGlvbiB0byB0aGUgQ0RLIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgcHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBBY2NvdW50V29ya2VycyBiYXNlZCBvbiB0aGUgbGlzdCBvZiByZWdpb25zIGFuZCBwcm9maWxlc1xuICogZ2l2ZW4gdG8gdGhlIENMSS5cbiAqL1xuZnVuY3Rpb24gZ2V0QWNjb3VudFdvcmtlcnMocmVnaW9uczogc3RyaW5nW10sIHByb2ZpbGVzPzogc3RyaW5nW10pOiBBY2NvdW50V29ya2VyW10ge1xuICBjb25zdCB3b3JrZXJzOiBBY2NvdW50V29ya2VyW10gPSBbXTtcbiAgZnVuY3Rpb24gcHVzaFdvcmtlcihwcm9maWxlPzogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCByZWdpb24gb2YgcmVnaW9ucykge1xuICAgICAgd29ya2Vycy5wdXNoKHtcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICBwcm9maWxlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChwcm9maWxlcyAmJiBwcm9maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCBwcm9maWxlIG9mIHByb2ZpbGVzID8/IFtdKSB7XG4gICAgICBwdXNoV29ya2VyKHByb2ZpbGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwdXNoV29ya2VyKCk7XG4gIH1cbiAgcmV0dXJuIHdvcmtlcnM7XG59XG5cbi8qKlxuICogUnVucyBhIHNldCBvZiBpbnRlZ3JhdGlvbiB0ZXN0cyBpbiBwYXJhbGxlbCBhY3Jvc3MgYSBsaXN0IG9mIEFXUyByZWdpb25zLlxuICogT25seSBhIHNpbmdsZSB0ZXN0IGNhbiBiZSBydW4gYXQgYSB0aW1lIGluIGEgZ2l2ZW4gcmVnaW9uLiBPbmNlIGEgcmVnaW9uXG4gKiBpcyBkb25lIHJ1bm5pbmcgYSB0ZXN0LCB0aGUgbmV4dCB0ZXN0IHdpbGwgYmUgcHVsbGVkIGZyb20gdGhlIHF1ZXVlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5JbnRlZ3JhdGlvblRlc3RzSW5QYXJhbGxlbChcbiAgb3B0aW9uczogSW50ZWdUZXN0UnVuT3B0aW9ucyxcbik6IFByb21pc2U8SW50ZWdCYXRjaFJlc3BvbnNlPiB7XG4gIGNvbnN0IHF1ZXVlID0gb3B0aW9ucy50ZXN0cztcbiAgY29uc3QgcmVzdWx0czogSW50ZWdCYXRjaFJlc3BvbnNlID0ge1xuICAgIG1ldHJpY3M6IFtdLFxuICAgIGZhaWxlZFRlc3RzOiBbXSxcbiAgfTtcbiAgY29uc3QgYWNjb3VudFdvcmtlcnM6IEFjY291bnRXb3JrZXJbXSA9IGdldEFjY291bnRXb3JrZXJzKG9wdGlvbnMucmVnaW9ucywgb3B0aW9ucy5wcm9maWxlcyk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCh3b3JrZXI6IEFjY291bnRXb3JrZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHRlc3QgPSBxdWV1ZS5wb3AoKTtcbiAgICAgIGlmICghdGVzdCkgYnJlYWs7XG4gICAgICBjb25zdCB0ZXN0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgbG9nZ2VyLmhpZ2hsaWdodChgUnVubmluZyB0ZXN0ICR7dGVzdC5maWxlTmFtZX0gaW4gJHt3b3JrZXIucHJvZmlsZSA/IHdvcmtlci5wcm9maWxlICsgJy8nIDogJyd9JHt3b3JrZXIucmVnaW9ufWApO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IEludGVnVGVzdEluZm9bXVtdID0gYXdhaXQgb3B0aW9ucy5wb29sLmV4ZWMoJ2ludGVnVGVzdFdvcmtlcicsIFt7XG4gICAgICAgIHdhdGNoOiBvcHRpb25zLndhdGNoLFxuICAgICAgICByZWdpb246IHdvcmtlci5yZWdpb24sXG4gICAgICAgIHByb2ZpbGU6IHdvcmtlci5wcm9maWxlLFxuICAgICAgICB0ZXN0czogW3Rlc3RdLFxuICAgICAgICBjbGVhbjogb3B0aW9ucy5jbGVhbixcbiAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgdmVyYm9zaXR5OiBvcHRpb25zLnZlcmJvc2l0eSxcbiAgICAgICAgdXBkYXRlV29ya2Zsb3c6IG9wdGlvbnMudXBkYXRlV29ya2Zsb3csXG4gICAgICAgIGVuZ2luZTogb3B0aW9ucy5lbmdpbmUsXG4gICAgICB9XSwge1xuICAgICAgICBvbjogcHJpbnRSZXN1bHRzLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdHMuZmFpbGVkVGVzdHMucHVzaCguLi5mbGF0dGVuKHJlc3BvbnNlKSk7XG4gICAgICB0ZXN0c1t0ZXN0LmZpbGVOYW1lXSA9IChEYXRlLm5vdygpIC0gdGVzdFN0YXJ0KSAvIDEwMDA7XG4gICAgfSB3aGlsZSAocXVldWUubGVuZ3RoID4gMCk7XG4gICAgY29uc3QgbWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzID0ge1xuICAgICAgcmVnaW9uOiB3b3JrZXIucmVnaW9uLFxuICAgICAgcHJvZmlsZTogd29ya2VyLnByb2ZpbGUsXG4gICAgICBkdXJhdGlvbjogKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwLFxuICAgICAgdGVzdHMsXG4gICAgfTtcbiAgICBpZiAoT2JqZWN0LmtleXModGVzdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdHMubWV0cmljcy5wdXNoKG1ldHJpY3MpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdvcmtlcnMgPSBhY2NvdW50V29ya2Vycy5tYXAoKHdvcmtlcikgPT4gcnVuVGVzdCh3b3JrZXIpKTtcbiAgLy8gV29ya2VycyBhcmUgdGhlaXIgb3duIGNvbmN1cnJlbmN5IGxpbWl0c1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgYXdhaXQgUHJvbWlzZS5hbGwod29ya2Vycyk7XG4gIHJldHVybiByZXN1bHRzO1xufVxuIl19