@aws-cdk/integ-runner
Version:
CDK Integration Testing Tool
105 lines • 11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WorkList = void 0;
exports.exec = exec;
exports.flatten = flatten;
exports.chain = chain;
exports.chunks = chunks;
exports.promiseWithResolvers = promiseWithResolvers;
// Helper functions for CDK Exec
const child_process_1 = require("child_process");
/**
* Our own execute function which doesn't use shells and strings.
*/
function exec(commandLine, options = {}) {
const proc = (0, child_process_1.spawnSync)(commandLine[0], commandLine.slice(1), {
stdio: ['ignore', 'pipe', options.verbose ? 'inherit' : 'pipe'], // inherit STDERR in verbose mode
env: {
...process.env,
...options.env,
},
cwd: options.cwd,
});
if (proc.error) {
throw proc.error;
}
if (proc.status !== 0) {
if (process.stderr) { // will be 'null' in verbose mode
process.stderr.write(proc.stderr);
}
throw new Error(`Command exited with ${proc.status ? `status ${proc.status}` : `signal ${proc.signal}`}`);
}
const output = proc.stdout.toString('utf-8').trim();
return output;
}
/**
* Flatten a list of lists into a list of elements
*/
function flatten(xs) {
return Array.prototype.concat.apply([], xs);
}
/**
* Chain commands
*/
function chain(commands) {
return commands.filter(c => !!c).join(' && ');
}
/**
* Split command to chunks by space
*/
function chunks(command) {
const result = command.match(/(?:[^\s"]+|"[^"]*")+/g);
return result ?? [];
}
/**
* A class holding a set of items which are being crossed off in time
*
* If it takes too long to cross off a new item, print the list.
*/
class WorkList {
constructor(items, options = {}) {
this.items = items;
this.options = options;
this.remaining = new Set(this.items);
this.timeout = options.timeout ?? 60000;
this.scheduleTimer();
}
crossOff(item) {
this.remaining.delete(item);
this.stopTimer();
if (this.remaining.size > 0) {
this.scheduleTimer();
}
}
done() {
this.remaining.clear();
this.stopTimer();
}
stopTimer() {
if (this.timer) {
clearTimeout(this.timer);
this.timer = undefined;
}
}
scheduleTimer() {
this.timer = setTimeout(() => this.report(), this.timeout);
}
report() {
this.options.onTimeout?.(this.remaining);
}
}
exports.WorkList = WorkList;
/**
* A backport of Promiser.withResolvers
*
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers
*/
function promiseWithResolvers() {
let resolve, reject;
const promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
return { promise, resolve: resolve, reject: reject };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxvQkF1QkM7QUFLRCwwQkFFQztBQUtELHNCQUVDO0FBS0Qsd0JBR0M7QUFpRUQsb0RBT0M7QUEzSEQsZ0NBQWdDO0FBQ2hDLGlEQUEwQztBQUUxQzs7R0FFRztBQUNILFNBQWdCLElBQUksQ0FBQyxXQUFxQixFQUFFLFVBQTBELEVBQUc7SUFDdkcsTUFBTSxJQUFJLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzNELEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxpQ0FBaUM7UUFDbEcsR0FBRyxFQUFFO1lBQ0gsR0FBRyxPQUFPLENBQUMsR0FBRztZQUNkLEdBQUcsT0FBTyxDQUFDLEdBQUc7U0FDZjtRQUNELEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztLQUNqQixDQUFDLENBQUM7SUFFSCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsaUNBQWlDO1lBQ3JELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxD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LCJzb3VyY2VzQ29udGVudCI6WyIvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBDREsgRXhlY1xuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5cbi8qKlxuICogT3VyIG93biBleGVjdXRlIGZ1bmN0aW9uIHdoaWNoIGRvZXNuJ3QgdXNlIHNoZWxscyBhbmQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZExpbmU6IHN0cmluZ1tdLCBvcHRpb25zOiB7IGN3ZD86IHN0cmluZzsgdmVyYm9zZT86IGJvb2xlYW47IGVudj86IGFueSB9ID0geyB9KTogYW55IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjb21tYW5kTGluZVswXSwgY29tbWFuZExpbmUuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsIG9wdGlvbnMudmVyYm9zZSA/ICdpbmhlcml0JyA6ICdwaXBlJ10sIC8vIGluaGVyaXQgU1RERVJSIGluIHZlcmJvc2UgbW9kZVxuICAgIGVudjoge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAuLi5vcHRpb25zLmVudixcbiAgICB9LFxuICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gIH0pO1xuXG4gIGlmIChwcm9jLmVycm9yKSB7XG4gICAgdGhyb3cgcHJvYy5lcnJvcjtcbiAgfVxuICBpZiAocHJvYy5zdGF0dXMgIT09IDApIHtcbiAgICBpZiAocHJvY2Vzcy5zdGRlcnIpIHsgLy8gd2lsbCBiZSAnbnVsbCcgaW4gdmVyYm9zZSBtb2RlXG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShwcm9jLnN0ZGVycik7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBleGl0ZWQgd2l0aCAke3Byb2Muc3RhdHVzID8gYHN0YXR1cyAke3Byb2Muc3RhdHVzfWAgOiBgc2lnbmFsICR7cHJvYy5zaWduYWx9YH1gKTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IHByb2Muc3Rkb3V0LnRvU3RyaW5nKCd1dGYtOCcpLnRyaW0oKTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBsaXN0IG9mIGxpc3RzIGludG8gYSBsaXN0IG9mIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPFQ+KHhzOiBUW11bXSk6IFRbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB4cyk7XG59XG5cbi8qKlxuICogQ2hhaW4gY29tbWFuZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluKGNvbW1hbmRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjb21tYW5kcy5maWx0ZXIoYyA9PiAhIWMpLmpvaW4oJyAmJiAnKTtcbn1cblxuLyoqXG4gKiBTcGxpdCBjb21tYW5kIHRvIGNodW5rcyBieSBzcGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2h1bmtzKGNvbW1hbmQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0ID0gY29tbWFuZC5tYXRjaCgvKD86W15cXHNcIl0rfFwiW15cIl0qXCIpKy9nKTtcbiAgcmV0dXJuIHJlc3VsdCA/PyBbXTtcbn1cblxuLyoqXG4gKiBBIGNsYXNzIGhvbGRpbmcgYSBzZXQgb2YgaXRlbXMgd2hpY2ggYXJlIGJlaW5nIGNyb3NzZWQgb2ZmIGluIHRpbWVcbiAqXG4gKiBJZiBpdCB0YWtlcyB0b28gbG9uZyB0byBjcm9zcyBvZmYgYSBuZXcgaXRlbSwgcHJpbnQgdGhlIGxpc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrTGlzdDxBPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtYWluaW5nID0gbmV3IFNldCh0aGlzLml0ZW1zKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgdGltZXI/OiBOb2RlSlMuVGltZW91dDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGl0ZW1zOiBBW10sIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogV29ya0xpc3RPcHRpb25zPEE+ID0ge30pIHtcbiAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPz8gNjBfMDAwO1xuICAgIHRoaXMuc2NoZWR1bGVUaW1lcigpO1xuICB9XG5cbiAgcHVibGljIGNyb3NzT2ZmKGl0ZW06IEEpIHtcbiAgICB0aGlzLnJlbWFpbmluZy5kZWxldGUoaXRlbSk7XG4gICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICBpZiAodGhpcy5yZW1haW5pbmcuc2l6ZSA+IDApIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVUaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkb25lKCkge1xuICAgIHRoaXMucmVtYWluaW5nLmNsZWFyKCk7XG4gICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFRpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICB0aGlzLnRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVUaW1lcigpIHtcbiAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlcG9ydCgpLCB0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnQoKSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVGltZW91dD8uKHRoaXMucmVtYWluaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtMaXN0T3B0aW9uczxBPiB7XG4gIC8qKlxuICAgKiBXaGVuIHRvIHJlcGx5IHdpdGggcmVtYWluaW5nIGl0ZW1zXG4gICAqXG4gICAqIEBkZWZhdWx0IDYwMDAwXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGltZW91dCBoaXRzXG4gICAqL1xuICByZWFkb25seSBvblRpbWVvdXQ/OiAoeDogU2V0PEE+KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgYmFja3BvcnQgb2YgUHJvbWlzZXIud2l0aFJlc29sdmVyc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvUHJvbWlzZS93aXRoUmVzb2x2ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlV2l0aFJlc29sdmVyczxBPigpOiBQcm9taXNlQW5kUmVzb2x2ZXJzPEE+IHtcbiAgbGV0IHJlc29sdmU6IFByb21pc2VBbmRSZXNvbHZlcnM8QT5bJ3Jlc29sdmUnXSwgcmVqZWN0OiBQcm9taXNlQW5kUmVzb2x2ZXJzPEE+WydyZWplY3QnXTtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPEE+KChyZXMsIHJlaikgPT4ge1xuICAgIHJlc29sdmUgPSByZXM7XG4gICAgcmVqZWN0ID0gcmVqO1xuICB9KTtcbiAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzb2x2ZSEsIHJlamVjdDogcmVqZWN0ISB9O1xufVxuXG5pbnRlcmZhY2UgUHJvbWlzZUFuZFJlc29sdmVyczxBPiB7XG4gIHByb21pc2U6IFByb21pc2U8QT47XG4gIHJlc29sdmU6ICh2YWx1ZTogQSkgPT4gdm9pZDtcbiAgcmVqZWN0OiAocmVhc29uOiBhbnkpID0+IHZvaWQ7XG59XG4iXX0=