UNPKG

@aws-cdk/integ-runner

Version:

CDK Integration Testing Tool

100 lines 14.4 kB
"use strict"; 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