0
0
mirror of https://github.com/nodejs/node.git synced 2024-12-01 16:10:02 +01:00
nodejs/test/pummel/test-exec.js
isaacs 3e1b1dd4a9 Remove excessive copyright/license boilerplate
The copyright and license notice is already in the LICENSE file.  There
is no justifiable reason to also require that it be included in every
file, since the individual files are not individually distributed except
as part of the entire package.
2015-01-12 15:30:28 -08:00

103 lines
2.7 KiB
JavaScript

var common = require('../common');
var assert = require('assert');
var exec = require('child_process').exec;
if (process.platform !== 'win32') {
// Unix.
var SLEEP3_COMMAND = "sleep 3";
} else {
// Windows: `choice` is a command built into cmd.exe. Use another cmd process
// to create a process tree, so we can catch bugs related to it.
var SLEEP3_COMMAND = "cmd /c choice /t 3 /c X /d X";
}
var success_count = 0;
var error_count = 0;
exec(process.execPath + ' -p -e process.versions',
function(err, stdout, stderr) {
if (err) {
error_count++;
console.log('error!: ' + err.code);
console.log('stdout: ' + JSON.stringify(stdout));
console.log('stderr: ' + JSON.stringify(stderr));
assert.equal(false, err.killed);
} else {
success_count++;
console.dir(stdout);
}
});
exec('thisisnotavalidcommand', function(err, stdout, stderr) {
if (err) {
error_count++;
assert.equal('', stdout);
assert.equal(true, err.code != 0);
assert.equal(false, err.killed);
assert.strictEqual(null, err.signal);
console.log('error code: ' + err.code);
console.log('stdout: ' + JSON.stringify(stdout));
console.log('stderr: ' + JSON.stringify(stderr));
} else {
success_count++;
console.dir(stdout);
assert.equal(true, stdout != '');
}
});
var sleeperStart = new Date();
exec(SLEEP3_COMMAND, { timeout: 50 }, function(err, stdout, stderr) {
var diff = (new Date()) - sleeperStart;
console.log('\'sleep 3\' with timeout 50 took %d ms', diff);
assert.ok(diff < 500);
assert.ok(err);
assert.ok(err.killed);
assert.equal(err.signal, 'SIGTERM');
});
var startSleep3 = new Date();
var killMeTwice = exec(SLEEP3_COMMAND, {timeout: 1000}, killMeTwiceCallback);
process.nextTick(function() {
console.log('kill pid %d', killMeTwice.pid);
// make sure there is no race condition in starting the process
// the PID SHOULD exist directly following the exec() call.
assert.equal('number', typeof killMeTwice._handle.pid);
// Kill the process
killMeTwice.kill();
});
function killMeTwiceCallback(err, stdout, stderr) {
var diff = (new Date()) - startSleep3;
// We should have already killed this process. Assert that the timeout still
// works and that we are getting the proper callback parameters.
assert.ok(err);
assert.ok(err.killed);
assert.equal(err.signal, 'SIGTERM');
// the timeout should still be in effect
console.log('\'sleep 3\' was already killed. Took %d ms', diff);
assert.ok(diff < 1500);
}
exec('python -c "print 200000*\'C\'"', {maxBuffer: 1000},
function(err, stdout, stderr) {
assert.ok(err);
assert.ok(/maxBuffer/.test(err.message));
});
process.on('exit', function() {
assert.equal(1, success_count);
assert.equal(1, error_count);
});