From deeda3ae74513a040d6b5b7f8e6822de7efa7e75 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Fri, 29 Sep 2017 11:09:19 -0700 Subject: [PATCH] test: skip test if host is too slow test-http-server-consumed-timeout will fail if the host is sufficiently loaded that a 25ms interval takes more than 200ms to be invoked. Skip the test in that situation. PR-URL: https://github.com/nodejs/node/pull/15688 Fixes: https://github.com/nodejs/node/issues/14312 Reviewed-By: Refael Ackermann Reviewed-By: Ruben Bridgewater Reviewed-By: James M Snell Reviewed-By: Gibson Fahnestock --- .../test-http-server-consumed-timeout.js | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/test/sequential/test-http-server-consumed-timeout.js b/test/sequential/test-http-server-consumed-timeout.js index e6157a0a1d..abe100c190 100644 --- a/test/sequential/test-http-server-consumed-timeout.js +++ b/test/sequential/test-http-server-consumed-timeout.js @@ -3,18 +3,26 @@ const common = require('../common'); const http = require('http'); +let time = Date.now(); +let intervalWasInvoked = false; +const TIMEOUT = common.platformTimeout(200); + const server = http.createServer((req, res) => { server.close(); res.writeHead(200); res.flushHeaders(); - req.setTimeout(common.platformTimeout(200), - common.mustNotCall('Request timeout should not fire')); + req.setTimeout(TIMEOUT, () => { + if (!intervalWasInvoked) + return common.skip('interval was not invoked quickly enough for test'); + common.fail('Request timeout should not fire'); + }); + req.resume(); - req.once('end', common.mustCall(() => { + req.once('end', () => { res.end(); - })); + }); }); server.listen(0, common.mustCall(() => { @@ -23,12 +31,19 @@ server.listen(0, common.mustCall(() => { method: 'POST' }, (res) => { const interval = setInterval(() => { + intervalWasInvoked = true; + // If machine is busy enough that the interval takes more than TIMEOUT ms + // to be invoked, skip the test. + const now = Date.now(); + if (now - time > TIMEOUT) + return common.skip('interval is not invoked quickly enough for test'); + time = now; req.write('a'); }, common.platformTimeout(25)); setTimeout(() => { clearInterval(interval); req.end(); - }, common.platformTimeout(200)); + }, TIMEOUT); }); req.write('.'); }));