0
0
mirror of https://github.com/nodejs/node.git synced 2024-11-30 23:43:09 +01:00
nodejs/test/sequential/test-net-GH-5504.js
Rich Trott 11136bf334 test: extend timeout in Debug mode
Debug mode slows execution speed. There is work afoot to enable Debug
mode runs on the continuous integration infrastructure for the project.
Some tests are timing out, such as test-net-GH-5504.js.

This change doubles the timeout returned from `common.platformTimeout()`
when running in Debug mode. It also removes an unused variable from the
aforementioned test-net-GH-5504.js.

PR-URL: https://github.com/nodejs/node/pull/4431
Reviewed-By: Johan Bergström <bugs@bergstroem.nu>
2015-12-29 19:11:10 -08:00

106 lines
2.6 KiB
JavaScript

'use strict';
var common = require('../common');
// this test only fails with CentOS 6.3 using kernel version 2.6.32
// On other linuxes and darwin, the `read` call gets an ECONNRESET in
// that case. On sunos, the `write` call fails with EPIPE.
//
// However, old CentOS will occasionally send an EOF instead of a
// ECONNRESET or EPIPE when the client has been destroyed abruptly.
//
// Make sure we don't keep trying to write or read more in that case.
switch (process.argv[2]) {
case 'server': return server();
case 'client': return client();
case undefined: return parent();
default: throw new Error('wtf');
}
function server() {
var net = require('net');
var content = new Buffer(64 * 1024 * 1024);
content.fill('#');
net.createServer(function(socket) {
this.close();
socket.on('end', function() {
console.error('end');
});
socket.on('_socketEnd', function() {
console.error('_socketEnd');
});
socket.write(content);
}).listen(common.PORT, function() {
console.log('listening');
});
}
function client() {
var net = require('net');
var client = net.connect({
host: 'localhost',
port: common.PORT
}, function() {
client.destroy();
});
}
function parent() {
var spawn = require('child_process').spawn;
var node = process.execPath;
var assert = require('assert');
var serverExited = false;
var clientExited = false;
var serverListened = false;
process.on('exit', function() {
assert(serverExited);
assert(clientExited);
assert(serverListened);
console.log('ok');
});
setTimeout(function() {
if (s) s.kill();
if (c) c.kill();
setTimeout(function() {
throw new Error('hang');
});
}, common.platformTimeout(2000)).unref();
var s = spawn(node, [__filename, 'server'], {
env: Object.assign(process.env, {
NODE_DEBUG: 'net'
})
});
var c;
wrap(s.stderr, process.stderr, 'SERVER 2>');
wrap(s.stdout, process.stdout, 'SERVER 1>');
s.on('exit', function(c) {
console.error('server exited', c);
serverExited = true;
});
s.stdout.once('data', function() {
serverListened = true;
c = spawn(node, [__filename, 'client']);
wrap(c.stderr, process.stderr, 'CLIENT 2>');
wrap(c.stdout, process.stdout, 'CLIENT 1>');
c.on('exit', function(c) {
console.error('client exited', c);
clientExited = true;
});
});
function wrap(inp, out, w) {
inp.setEncoding('utf8');
inp.on('data', function(c) {
c = c.trim();
if (!c) return;
out.write(w + c.split('\n').join('\n' + w) + '\n');
});
}
}