@aws-cdk-testing/cli-integ
Version:
Integration tests for the AWS CDK CLI
98 lines • 11.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Process = void 0;
const child = require("child_process");
const pty = require("node-pty");
class Process {
/**
* Spawn a process with a TTY attached.
*/
static spawnTTY(command, args, options = {}) {
const process = pty.spawn(command, args, {
name: 'xterm-color',
...options,
});
return new PtyProcess(process);
}
/**
* Spawn a process without a forcing a TTY.
*/
static spawn(command, args, options = {}) {
const process = child.spawn(command, args, {
shell: true,
stdio: ['ignore', 'pipe', 'pipe'],
...options,
});
return new NonPtyProcess(process);
}
}
exports.Process = Process;
class PtyProcess {
process;
constructor(process) {
this.process = process;
}
endStdin(_) {
// not needed because all streams are the same in tty.
}
onError(_) {
// not needed because the pty.spawn will simply fail in this case.
}
onStdout(callback) {
this.process.onData((e) => callback(Buffer.from(e)));
}
onStderr(_callback) {
// https://github.com/microsoft/node-pty/issues/71
throw new Error('Cannot register callback for \'stderr\'. A tty does not have separate output and error channels');
}
onExit(callback) {
this.process.onExit((e) => {
callback(e.exitCode);
});
}
writeStdin(data) {
// in a pty all streams are the same
this.process.write(data);
}
}
class NonPtyProcess {
process;
constructor(process) {
this.process = process;
}
onError(callback) {
this.process.once('error', callback);
}
onStdout(callback) {
this.assertDefined('stdout', this.process.stdout);
this.process.stdout.on('data', callback);
}
onStderr(callback) {
this.assertDefined('stderr', this.process.stderr);
this.process.stderr.on('data', callback);
}
onExit(callback) {
this.process.on('close', callback);
}
writeStdin(content) {
this.assertDefined('stdin', this.process.stdin);
this.process.stdin.write(content);
}
endStdin(delay) {
if (this.process.stdin == null) {
throw new Error('No stdin defined for process');
}
if (delay) {
setTimeout(() => this.process.stdin.end(), delay);
}
else {
this.process.stdin.end();
}
}
assertDefined(name, stream) {
if (stream == null) {
throw new Error(`No ${name} defined for child process`);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQXVDO0FBRXZDLGdDQUFnQztBQTJDaEMsTUFBYSxPQUFPO0lBQ2xCOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFlLEVBQUUsSUFBYyxFQUFFLFVBQTRELEVBQUU7UUFDcEgsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ3ZDLElBQUksRUFBRSxhQUFhO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFlLEVBQUUsSUFBYyxFQUFFLFVBQThCLEVBQUU7UUFDbkYsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ3pDLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7WUFDakMsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUF2QkQsMEJBdUJDO0FBRUQsTUFBTSxVQUFVO0lBQ3NCO0lBQXBDLFlBQW9DLE9BQWlCO1FBQWpCLFlBQU8sR0FBUCxPQUFPLENBQVU7SUFDckQsQ0FBQztJQUVNLFFBQVEsQ0FBQyxDQUFVO1FBQ3hCLHNEQUFzRDtJQUN4RCxDQUFDO0lBRU0sT0FBTyxDQUFDLENBQXlCO1FBQ3RDLGtFQUFrRTtJQUNwRSxDQUFDO0lBRU0sUUFBUSxDQUFDLFFBQWlDO1FBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVNLFFBQVEsQ0FBQyxTQUFrQztRQUNoRCxrREFBa0Q7UUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpR0FBaUcsQ0FBQyxDQUFDO0lBQ3JILENBQUM7SUFFTSxNQUFNLENBQUMsUUFBb0M7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4QixRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFZO1FBQzVCLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGFBQWE7SUFDbUI7SUFBcEMsWUFBb0MsT0FBMkI7UUFBM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7SUFDL0QsQ0FBQztJQUVNLE9BQU8sQ0FBQyxRQUFnQztRQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxRQUFpQztRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLFFBQVEsQ0FBQyxRQUFpQztRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxRQUFvQztRQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUFlO1FBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYztRQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRU0sYUFBYSxDQUFDLElBQW1DLEVBQUUsTUFBK0M7UUFDdkcsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksNEJBQTRCLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hpbGQgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWRhYmxlLCBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgKiBhcyBwdHkgZnJvbSAnbm9kZS1wdHknO1xuXG4vKipcbiAqIElQcm9jZXNzIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB3b3JrIHdpdGggYSBzdWJwcm9jZXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQcm9jZXNzIHtcblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gYSBjaHVuayBpcyB3cml0dGVuIHRvIHN0ZG91dC5cbiAgICovXG4gIG9uU3Rkb3V0KGNhbGxiYWNrOiAoY2h1bms6IEJ1ZmZlcikgPT4gdm9pZCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIGEgY2h1bmsgaXMgd3JpdHRlbiB0byBzdGRlcnIuXG4gICAqL1xuICBvblN0ZGVycihjYWxsYmFjazogKGNodW5rOiBCdWZmZXIpID0+IHZvaWQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgcHJvY2VzcyBleGlzdHMuXG4gICAqL1xuICBvbkV4aXQoY2FsbGJhY2s6IChleGl0Q29kZTogbnVtYmVyKSA9PiB2b2lkKTogdm9pZDtcblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGlmIHRoZSBwcm9jZXNzIGZhaWxlZCB0byBzdGFydC5cbiAgICovXG4gIG9uRXJyb3IoY2FsbGJhY2s6IChlcnJvcjogRXJyb3IpID0+IHZvaWQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgcHJvY2VzcyBzdGRpbiBzdHJlYW0uXG4gICAqL1xuICB3cml0ZVN0ZGluKGRhdGE6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNpbmdhbCB0aGF0IG5vIG1vcmUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gdG8gc3RkaW4uIEluIG5vbiB0dHkgcHJvY2VzcyB5b3UgbXVzdFxuICAgKiBjYWxsIHRoaXMgbWV0aG9kIHRvIG1ha2Ugc3VyZSB0aGUgcHJvY2VzcyBleGl0cy5cbiAgICpcbiAgICogQHBhcmFtIGRlbGF5IC0gb3B0aW9uYWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgc2lnbmFsIGlzIHNlbnQuXG4gICAqXG4gICAqL1xuICBlbmRTdGRpbihkZWxheT86IG51bWJlcik6IHZvaWQ7XG5cbn1cblxuZXhwb3J0IGNsYXNzIFByb2Nlc3Mge1xuICAvKipcbiAgICogU3Bhd24gYSBwcm9jZXNzIHdpdGggYSBUVFkgYXR0YWNoZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNwYXduVFRZKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM6IHB0eS5JUHR5Rm9ya09wdGlvbnMgfCBwdHkuSVdpbmRvd3NQdHlGb3JrT3B0aW9ucyA9IHt9KTogSVByb2Nlc3Mge1xuICAgIGNvbnN0IHByb2Nlc3MgPSBwdHkuc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgICAgbmFtZTogJ3h0ZXJtLWNvbG9yJyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQdHlQcm9jZXNzKHByb2Nlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwYXduIGEgcHJvY2VzcyB3aXRob3V0IGEgZm9yY2luZyBhIFRUWS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3Bhd24oY29tbWFuZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9uczogY2hpbGQuU3Bhd25PcHRpb25zID0ge30pOiBJUHJvY2VzcyB7XG4gICAgY29uc3QgcHJvY2VzcyA9IGNoaWxkLnNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IE5vblB0eVByb2Nlc3MocHJvY2Vzcyk7XG4gIH1cbn1cblxuY2xhc3MgUHR5UHJvY2VzcyBpbXBsZW1lbnRzIElQcm9jZXNzIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvY2VzczogcHR5LklQdHkpIHtcbiAgfVxuXG4gIHB1YmxpYyBlbmRTdGRpbihfPzogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gbm90IG5lZWRlZCBiZWNhdXNlIGFsbCBzdHJlYW1zIGFyZSB0aGUgc2FtZSBpbiB0dHkuXG4gIH1cblxuICBwdWJsaWMgb25FcnJvcihfOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgLy8gbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBwdHkuc3Bhd24gd2lsbCBzaW1wbHkgZmFpbCBpbiB0aGlzIGNhc2UuXG4gIH1cblxuICBwdWJsaWMgb25TdGRvdXQoY2FsbGJhY2s6IChjaHVuazogQnVmZmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5wcm9jZXNzLm9uRGF0YSgoZSkgPT4gY2FsbGJhY2soQnVmZmVyLmZyb20oZSkpKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN0ZGVycihfY2FsbGJhY2s6IChjaHVuazogQnVmZmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9ub2RlLXB0eS9pc3N1ZXMvNzFcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZWdpc3RlciBjYWxsYmFjayBmb3IgXFwnc3RkZXJyXFwnLiBBIHR0eSBkb2VzIG5vdCBoYXZlIHNlcGFyYXRlIG91dHB1dCBhbmQgZXJyb3IgY2hhbm5lbHMnKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkV4aXQoY2FsbGJhY2s6IChleGl0Q29kZTogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5wcm9jZXNzLm9uRXhpdCgoZSkgPT4ge1xuICAgICAgY2FsbGJhY2soZS5leGl0Q29kZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVTdGRpbihkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBpbiBhIHB0eSBhbGwgc3RyZWFtcyBhcmUgdGhlIHNhbWVcbiAgICB0aGlzLnByb2Nlc3Mud3JpdGUoZGF0YSk7XG4gIH1cbn1cblxuY2xhc3MgTm9uUHR5UHJvY2VzcyBpbXBsZW1lbnRzIElQcm9jZXNzIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvY2VzczogY2hpbGQuQ2hpbGRQcm9jZXNzKSB7XG4gIH1cblxuICBwdWJsaWMgb25FcnJvcihjYWxsYmFjazogKGVycm9yOiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMucHJvY2Vzcy5vbmNlKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN0ZG91dChjYWxsYmFjazogKGNodW5rOiBCdWZmZXIpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmFzc2VydERlZmluZWQoJ3N0ZG91dCcsIHRoaXMucHJvY2Vzcy5zdGRvdXQpO1xuICAgIHRoaXMucHJvY2Vzcy5zdGRvdXQub24oJ2RhdGEnLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgb25TdGRlcnIoY2FsbGJhY2s6IChjaHVuazogQnVmZmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5hc3NlcnREZWZpbmVkKCdzdGRlcnInLCB0aGlzLnByb2Nlc3Muc3RkZXJyKTtcbiAgICB0aGlzLnByb2Nlc3Muc3RkZXJyLm9uKCdkYXRhJywgY2FsbGJhY2spO1xuICB9XG5cbiAgcHVibGljIG9uRXhpdChjYWxsYmFjazogKGV4aXRDb2RlOiBudW1iZXIpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3Mub24oJ2Nsb3NlJywgY2FsbGJhY2spO1xuICB9XG5cbiAgcHVibGljIHdyaXRlU3RkaW4oY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hc3NlcnREZWZpbmVkKCdzdGRpbicsIHRoaXMucHJvY2Vzcy5zdGRpbik7XG4gICAgdGhpcy5wcm9jZXNzLnN0ZGluLndyaXRlKGNvbnRlbnQpO1xuICB9XG5cbiAgcHVibGljIGVuZFN0ZGluKGRlbGF5PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvY2Vzcy5zdGRpbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHN0ZGluIGRlZmluZWQgZm9yIHByb2Nlc3MnKTtcbiAgICB9XG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucHJvY2Vzcy5zdGRpbiEuZW5kKCksIGRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9jZXNzLnN0ZGluIS5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0RGVmaW5lZChuYW1lOiAnc3RkaW4nIHwgJ3N0ZG91dCcgfCAnc3RkZXJyJywgc3RyZWFtPzogUmVhZGFibGUgfCBXcml0YWJsZSB8IHVuZGVmaW5lZCB8IG51bGwpOiBhc3NlcnRzIHN0cmVhbSB7XG4gICAgaWYgKHN0cmVhbSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICR7bmFtZX0gZGVmaW5lZCBmb3IgY2hpbGQgcHJvY2Vzc2ApO1xuICAgIH1cbiAgfVxufVxuIl19