|
|
|
'use strict';
|
|
|
|
var common = require('../common');
|
|
|
|
var assert = require('assert');
|
|
|
|
var net = require('net');
|
|
|
|
var msg = 'test';
|
|
|
|
var stopped = true;
|
|
|
|
var server1 = net.createServer({pauseOnConnect: true}, function(socket) {
|
|
|
|
socket.on('data', function(data) {
|
|
|
|
if (stopped) {
|
|
|
|
assert(false, 'data event should not have happened yet');
|
|
|
|
}
|
|
|
|
|
|
|
|
assert.equal(data.toString(), msg, 'invalid data received');
|
|
|
|
socket.end();
|
|
|
|
server1.close();
|
|
|
|
});
|
|
|
|
|
|
|
|
setTimeout(function() {
|
|
|
|
// After 50(ish) ms, the other socket should have already read the data.
|
|
|
|
assert.equal(read, true);
|
|
|
|
assert.equal(socket.bytesRead, 0, 'no data should have been read yet');
|
|
|
|
|
|
|
|
socket.resume();
|
|
|
|
stopped = false;
|
|
|
|
}, common.platformTimeout(50));
|
|
|
|
});
|
|
|
|
|
|
|
|
// read is a timing check, as server1's timer should fire after server2's
|
|
|
|
// connection receives the data. Note that this could be race-y.
|
|
|
|
var read = false;
|
|
|
|
var server2 = net.createServer({pauseOnConnect: false}, function(socket) {
|
|
|
|
socket.on('data', function(data) {
|
|
|
|
read = true;
|
|
|
|
|
|
|
|
assert.equal(data.toString(), msg, 'invalid data received');
|
|
|
|
socket.end();
|
|
|
|
server2.close();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
server1.listen(common.PORT, function() {
|
|
|
|
net.createConnection({port: common.PORT}).write(msg);
|
|
|
|
});
|
|
|
|
|
|
|
|
server2.listen(common.PORT + 1, function() {
|
|
|
|
net.createConnection({port: common.PORT + 1}).write(msg);
|
|
|
|
});
|
|
|
|
|
|
|
|
process.on('exit', function() {
|
|
|
|
assert.equal(stopped, false);
|
|
|
|
assert.equal(read, true);
|
|
|
|
});
|