Browse Source

test: harden test-child-process-fork-regr-gh-2847

test-child-process-fork-regr-gh-2847 could fail depending
on timing and how messages were packed into tcp packets.
If all of the requests fit into one packet then the test
worked otherwise, otherwise errors could occur.  This PR
modifies the test to be tolerant while still validating that
some of the connection can be made succesfully

Reviewed-By: James M Snell <jasnell@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/3459
process-exit-stdio-flushing
Michael Dawson 9 years ago
committed by James M Snell
parent
commit
e9e837c64c
  1. 24
      test/parallel/test-child-process-fork-regr-gh-2847.js

24
test/parallel/test-child-process-fork-regr-gh-2847.js

@ -7,6 +7,9 @@ const cluster = require('cluster');
const net = require('net'); const net = require('net');
const util = require('util'); const util = require('util');
var connectcount = 0;
var sendcount = 0;
if (!cluster.isMaster) { if (!cluster.isMaster) {
// Exit on first received handle to leave the queue non-empty in master // Exit on first received handle to leave the queue non-empty in master
process.on('message', function() { process.on('message', function() {
@ -25,6 +28,21 @@ var server = net.createServer(function(s) {
function send(callback) { function send(callback) {
var s = net.connect(common.PORT, function() { var s = net.connect(common.PORT, function() {
worker.send({}, s, callback); worker.send({}, s, callback);
connectcount++;
});
// Errors can happen if the connections
// are still happening while the server has been closed.
// This can happen depending on how the messages are
// bundled into packets. If they all make it into the first
// one then no errors will occur, otherwise the server
// may have been closed by the time the later ones make
// it to the server side.
// We ignore any errors that occur after some connections
// get through
s.on('error', function(err) {
if (connectcount < 3)
console.log(err);
}); });
} }
@ -36,5 +54,9 @@ var server = net.createServer(function(s) {
// Queue up several handles, to make `process.disconnect()` wait // Queue up several handles, to make `process.disconnect()` wait
for (var i = 0; i < 100; i++) for (var i = 0; i < 100; i++)
send(); send(function(err) {
if (err && sendcount < 3)
console.log(err);
sendcount++;
});
}); });

Loading…
Cancel
Save