test: fix flaky test-net-socket-local-address
Prior to this commit, the test was flaky because it was executing the majority of its logic in a function called from the client and multiple events on the server. This commit simplifies the test by separating the server's connection and listening events, and isolating the client logic. Refs: https://github.com/nodejs/node/pull/4476 Refs: https://github.com/nodejs/node/pull/4644 PR-URL: https://github.com/nodejs/node/pull/4650 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
parent
e22cc6c2eb
commit
6cfd0b5a32
@ -12,35 +12,29 @@ if (common.inFreeBSDJail) {
|
||||
var conns = 0;
|
||||
var clientLocalPorts = [];
|
||||
var serverRemotePorts = [];
|
||||
|
||||
const server = net.createServer(function(socket) {
|
||||
const client = new net.Socket();
|
||||
const server = net.createServer(socket => {
|
||||
serverRemotePorts.push(socket.remotePort);
|
||||
testConnect();
|
||||
socket.end();
|
||||
});
|
||||
|
||||
const client = new net.Socket();
|
||||
|
||||
server.on('close', common.mustCall(function() {
|
||||
server.on('close', common.mustCall(() => {
|
||||
assert.deepEqual(clientLocalPorts, serverRemotePorts,
|
||||
'client and server should agree on the ports used');
|
||||
assert.equal(2, conns);
|
||||
assert.strictEqual(2, conns);
|
||||
}));
|
||||
|
||||
server.listen(common.PORT, common.localhostIPv4, testConnect);
|
||||
server.listen(common.PORT, common.localhostIPv4, connect);
|
||||
|
||||
function testConnect() {
|
||||
if (conns > serverRemotePorts.length || conns > clientLocalPorts.length) {
|
||||
// We're waiting for a callback to fire.
|
||||
function connect() {
|
||||
if (conns === 2) {
|
||||
server.close();
|
||||
return;
|
||||
}
|
||||
|
||||
if (conns === 2) {
|
||||
return server.close();
|
||||
}
|
||||
client.connect(common.PORT, common.localhostIPv4, function() {
|
||||
clientLocalPorts.push(this.localPort);
|
||||
this.once('close', testConnect);
|
||||
this.destroy();
|
||||
});
|
||||
conns++;
|
||||
client.once('close', connect);
|
||||
client.connect(common.PORT, common.localhostIPv4, () => {
|
||||
clientLocalPorts.push(client.localPort);
|
||||
});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user