Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Improve test-child-process-silent

  • Loading branch information...
AndreasMadsen authored and ry committed Jan 4, 2012
1 parent b28e700 commit 787f62de8c98235a16288fb2b53912eddf59fada
Showing with 61 additions and 33 deletions.
  1. +61 −33 test/simple/test-child-process-silent.js
@@ -21,57 +21,85 @@

var common = require('../common');
var assert = require('assert');
var fork = require('child_process').fork;
var childProcess = require('child_process');

var isChild = process.argv[2] === 'child';

if (isChild) {
console.log('LOG: a stdout message');
console.error('LOG: a stderr message');
// Child pipe test
if (process.argv[2] === 'pipetest') {
process.stdout.write('stdout message');
process.stderr.write('stderr message');

} else if (process.argv[2] === 'ipctest') {
// Child IPC test
process.send('message from child');
process.once('message', function () {
process.on('message', function() {
process.send('got message from master');
});

} else if (process.argv[2] === 'parent') {
// Parent | start child pipe test

var child = childProcess.fork(process.argv[1], ['pipetest'], {silent: true});

// Allow child process to self terminate
child._channel.close();
child._channel = null;

child.on('exit', function() {
process.exit(0);
});

} else {
// testcase | start parent && child IPC test

// testing: is stderr and stdout piped to parent
var parent = childProcess.spawn(process.execPath, [process.argv[1], 'parent']);

var checks = {
stdoutNotPiped: false,
stderrNotPiped: false,
childSending: false,
childReciveing: false
};

var child = fork(process.argv[1], ['child'], { silent: true });
child.on('message', function (message) {
if (checks.childSending === false) {
checks.childSending = (message === 'message from child');
//got any stderr or std data
var stdoutData = false;
parent.stdout.on('data', function() {
stdoutData = true;
});
var stderrData = false;
parent.stdout.on('data', function() {
stderrData = true;
});

// testing: do message system work when using silent
var child = childProcess.fork(process.argv[1], ['ipctest'], {silent: true});

// Manual pipe so we will get errors
child.stderr.pipe(process.stderr, {end: false});
child.stdout.pipe(process.stdout, {end: false});

var childSending = false;
var childReciveing = false;
child.on('message', function(message) {
if (childSending === false) {
childSending = (message === 'message from child');
}

if (checks.childReciveing === false) {
checks.childReciveing = (message === 'got message from master');
if (childReciveing === false) {
childReciveing = (message === 'got message from master');
}

if (checks.childReciveing === true) {
if (childReciveing === true) {
child.kill();
}
});

checks.stdoutNotPiped = (child.stdout && child.stdout.readable === true);
checks.stderrNotPiped = (child.stderr && child.stderr.readable === true);

child.send('message to child');

//Check all values
process.once('exit', function() {
// Check all values
process.on('exit', function() {
// clean up
child.kill();
parent.kill();

//Check message system
assert.ok(checks.childSending, 'The child was able to send a message');
assert.ok(checks.childReciveing, 'The child was able to receive a message');
// Check std(out|err) pipes
assert.ok(!stdoutData, 'The stdout socket was piped to parent');
assert.ok(!stderrData, 'The stderr socket was piped to parent');

//Check std(out|err) pipes
assert.ok(checks.stdoutNotPiped, 'The stdout socket was piped to parent');
assert.ok(checks.stdoutNotPiped, 'The stderr socket was piped to parent');
// Check message system
assert.ok(childSending, 'The child was able to send a message');
assert.ok(childReciveing, 'The child was able to receive a message');
});
}

0 comments on commit 787f62d

Please sign in to comment.
You can’t perform that action at this time.