Browse Source

test: fix flaky test-https-timeout

Remove `setTimeout()` in test and instead rely on `common.mustCall()` on
a `timeout` event handler.

The test was flaky on CI. The flakiness was replicable by running the
test under load. This version, in contrast, is robust under load.

Took the opportunity to do some `var` -> `const` while refactoring.

PR-URL: https://github.com/nodejs/node/pull/10404
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Italo A. Casas <me@italoacasas.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
v6
Rich Trott 8 years ago
parent
commit
3f52ce35bc
  1. 34
      test/parallel/test-https-timeout.js

34
test/parallel/test-https-timeout.js

@ -1,24 +1,24 @@
'use strict'; 'use strict';
var common = require('../common'); const common = require('../common');
if (!common.hasCrypto) { if (!common.hasCrypto) {
common.skip('missing crypto'); common.skip('missing crypto');
return; return;
} }
var https = require('https'); const https = require('https');
var fs = require('fs'); const fs = require('fs');
var options = { const options = {
key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'), key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'),
cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem') cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem')
}; };
// a server that never replies // a server that never replies
var server = https.createServer(options, function() { const server = https.createServer(options, function() {
console.log('Got request. Doing nothing.'); console.log('Got request. Doing nothing.');
}).listen(0, function() { }).listen(0, common.mustCall(function() {
var req = https.request({ const req = https.request({
host: 'localhost', host: 'localhost',
port: this.address().port, port: this.address().port,
path: '/', path: '/',
@ -28,26 +28,14 @@ var server = https.createServer(options, function() {
req.setTimeout(10); req.setTimeout(10);
req.end(); req.end();
req.on('response', function(res) { req.on('response', function() {
console.log('got response'); console.log('got response');
}); });
req.on('socket', function() { req.on('timeout', common.mustCall(function() {
console.log('got a socket');
req.socket.on('connect', function() {
console.log('socket connected');
});
setTimeout(function() {
throw new Error('Did not get timeout event');
}, 200);
});
req.on('timeout', function() {
console.log('timeout occurred outside'); console.log('timeout occurred outside');
req.destroy(); req.destroy();
server.close(); server.close();
process.exit(0); process.exit(0);
}); }));
}); }));

Loading…
Cancel
Save