summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan English <bryan@bryanenglish.com>2017-10-26 16:20:45 -0700
committerMyles Borins <mylesborins@google.com>2018-03-29 23:28:17 -0400
commita1fb2638808473937e71bb9941033f454b12d290 (patch)
tree759a95ec673c2ba6f7d7037e2c8d75254ca3aaae
parent7feeb1574e04f12bc25083d6abaa0f288bae83d4 (diff)
downloadnode-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.js35
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) {