Skip to content

Commit baa0a3d

Browse files
TrottMyles Borins
authored and
Myles Borins
committed
test: fix race in test-net-server-pause-on-connect
A 50ms timeout results in a race condition. Instead, enforce expected order through callbacks. This has the side effect of speeding up the test in most situations. Ref: #4476 PR-URL: #4637 Reviewed-By: Johan Bergström <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 583f334 commit baa0a3d

File tree

1 file changed

+26
-27
lines changed

1 file changed

+26
-27
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,51 @@
11
'use strict';
2-
var common = require('../common');
3-
var assert = require('assert');
4-
var net = require('net');
5-
var msg = 'test';
2+
const common = require('../common');
3+
const assert = require('assert');
4+
const net = require('net');
5+
const msg = 'test';
66
var stopped = true;
7-
var server1 = net.createServer({pauseOnConnect: true}, function(socket) {
7+
var server1Sock;
8+
9+
10+
const server1ConnHandler = function(socket) {
811
socket.on('data', function(data) {
912
if (stopped) {
10-
assert(false, 'data event should not have happened yet');
13+
common.fail('data event should not have happened yet');
1114
}
1215

1316
assert.equal(data.toString(), msg, 'invalid data received');
1417
socket.end();
1518
server1.close();
1619
});
1720

18-
setTimeout(function() {
19-
// After 50(ish) ms, the other socket should have already read the data.
20-
assert.equal(read, true);
21-
assert.equal(socket.bytesRead, 0, 'no data should have been read yet');
21+
server1Sock = socket;
22+
};
2223

23-
socket.resume();
24-
stopped = false;
25-
}, common.platformTimeout(50));
26-
});
24+
const server1 = net.createServer({pauseOnConnect: true}, server1ConnHandler);
2725

28-
// read is a timing check, as server1's timer should fire after server2's
29-
// connection receives the data. Note that this could be race-y.
30-
var read = false;
31-
var server2 = net.createServer({pauseOnConnect: false}, function(socket) {
26+
const server2ConnHandler = function(socket) {
3227
socket.on('data', function(data) {
33-
read = true;
34-
3528
assert.equal(data.toString(), msg, 'invalid data received');
3629
socket.end();
3730
server2.close();
31+
32+
assert.equal(server1Sock.bytesRead, 0, 'no data should have been read yet');
33+
server1Sock.resume();
34+
stopped = false;
3835
});
39-
});
36+
};
4037

41-
server1.listen(common.PORT, function() {
42-
net.createConnection({port: common.PORT}).write(msg);
43-
});
38+
const server2 = net.createServer({pauseOnConnect: false}, server2ConnHandler);
4439

45-
server2.listen(common.PORT + 1, function() {
46-
net.createConnection({port: common.PORT + 1}).write(msg);
40+
server1.listen(common.PORT, function() {
41+
const clientHandler = common.mustCall(function() {
42+
server2.listen(common.PORT + 1, function() {
43+
net.createConnection({port: common.PORT + 1}).write(msg);
44+
});
45+
});
46+
net.createConnection({port: common.PORT}).write(msg, clientHandler);
4747
});
4848

4949
process.on('exit', function() {
5050
assert.equal(stopped, false);
51-
assert.equal(read, true);
5251
});

0 commit comments

Comments
 (0)