Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
test: fix flaky test-http-client-timeout-with-data
test-http-client-timeout-with-data has failed here and there in CI on
FreeBSD and OS X. The test has a socket timeout set to 50ms and a timer
set for 100ms. However, they are not necessarily set in the same tick of
the event loop and their ordering is therefore not guaranteed.

Instead of using a timer, this change listens for an event on the
listener to know when the socket timeout has occurred and then runs the
code originally in the timer.

Additional refactoring: Replaced `process.on('exit', ...)` checks with
`common.mustCall()` and replaced usage of `assert.equal()` with
`assert.strictEqual()`.
  • Loading branch information
Trott committed Dec 23, 2016
commit e3935069ac727c71596113d7e7f47ba48472f908
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,8 @@ const common = require('../common');
const assert = require('assert');
const http = require('http');

var ntimeouts = 0;
var nchunks = 0;

process.on('exit', function() {
assert.equal(ntimeouts, 1);
assert.equal(nchunks, 2);
});

const options = {
method: 'GET',
port: undefined,
Expand All @@ -21,7 +15,7 @@ const options = {
const server = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Length': '2'});
res.write('*');
setTimeout(function() { res.end('*'); }, common.platformTimeout(100));
server.once('timeout', common.mustCall(function() { res.end('*'); }));
});

server.listen(0, options.host, function() {
Expand All @@ -30,19 +24,19 @@ server.listen(0, options.host, function() {
req.end();

function onresponse(res) {
req.setTimeout(50, function() {
assert.equal(nchunks, 1); // should have received the first chunk by now
ntimeouts++;
});
req.setTimeout(50, common.mustCall(function() {
assert.strictEqual(nchunks, 1); // should have received the first chunk
server.emit('timeout');
}));

res.on('data', function(data) {
assert.equal('' + data, '*');
res.on('data', common.mustCall(function(data) {
assert.strictEqual('' + data, '*');
nchunks++;
});
}, 2));

res.on('end', function() {
assert.equal(nchunks, 2);
res.on('end', common.mustCall(function() {
assert.strictEqual(nchunks, 2);
server.close();
});
}));
}
});