diff options
author | Bryan English <bryan@bryanenglish.com> | 2017-10-26 16:20:45 -0700 |
---|---|---|
committer | Myles Borins <mylesborins@google.com> | 2018-03-29 23:28:17 -0400 |
commit | a1fb2638808473937e71bb9941033f454b12d290 (patch) | |
tree | 759a95ec673c2ba6f7d7037e2c8d75254ca3aaae | |
parent | 7feeb1574e04f12bc25083d6abaa0f288bae83d4 (diff) | |
download | node-new-a1fb2638808473937e71bb9941033f454b12d290.tar.gz |
test: fix flaky test-http-dns-error
Under some conditions, the error received from getaddrinfo might
actually be EAGAIN, meaning the request should be retried. Allowing for
5 retries before erroring out.
Also replace one-off function with common.mustNotCall().
PR-URL: https://github.com/nodejs/node/pull/16534
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r-- | test/parallel/test-http-dns-error.js | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/test/parallel/test-http-dns-error.js b/test/parallel/test-http-dns-error.js index 723b710647..900cf40e6b 100644 --- a/test/parallel/test-http-dns-error.js +++ b/test/parallel/test-http-dns-error.js @@ -30,30 +30,41 @@ const http = require('http'); const https = require('https'); const host = '*'.repeat(256); +const MAX_TRIES = 5; -function do_not_call() { - throw new Error('This function should not have been called.'); -} - -function test(mod) { - +function tryGet(mod, tries) { // Bad host name should not throw an uncatchable exception. // Ensure that there is time to attach an error listener. - const req1 = mod.get({ host: host, port: 42 }, do_not_call); - req1.on('error', common.mustCall(function(err) { + const req = mod.get({ host: host, port: 42 }, common.mustNotCall()); + req.on('error', common.mustCall(function(err) { + if (err.code === 'EAGAIN' && tries < MAX_TRIES) { + tryGet(mod, ++tries); + return; + } assert.strictEqual(err.code, 'ENOTFOUND'); })); // http.get() called req1.end() for us +} - const req2 = mod.request({ +function tryRequest(mod, tries) { + const req = mod.request({ method: 'GET', host: host, port: 42 - }, do_not_call); - req2.on('error', common.mustCall(function(err) { + }, common.mustNotCall()); + req.on('error', common.mustCall(function(err) { + if (err.code === 'EAGAIN' && tries < MAX_TRIES) { + tryRequest(mod, ++tries); + return; + } assert.strictEqual(err.code, 'ENOTFOUND'); })); - req2.end(); + req.end(); +} + +function test(mod) { + tryGet(mod, 0); + tryRequest(mod, 0); } if (common.hasCrypto) { |