Skip to content

Commit

Permalink
test: allow for different nsswitch.conf settings
Browse files Browse the repository at this point in the history
The motivation for this commit is that these two test fail on systems
that have different Name Service Switch configuration settings. A
concrete example of this is when using Red Hat Enterprise Linux (RHEL)
7.

If Name Service Switch is available on the operating system then it
might be configured differently (/etc/nsswitch.conf).
If the system is configured with no dns the error code will be
AI_AGAIN, but if there are more services after the dns entry, for
example some linux distributions skip a myhostname service by default
which would still produce the ENOTFOUND error.

This commit suggests checking for either ENOTFOUND or EAI_AGAIN to
accommodate systems like the ones described above. The references below
indicate that others have run, or are running, into this aswell.

Refs: #12075
Refs: nodejs/help#687
Refs: #15825
PR-URL: #16378
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
  • Loading branch information
danbev authored and MylesBorins committed Nov 16, 2017
1 parent fb0c05d commit 53bba2f
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 4 deletions.
2 changes: 1 addition & 1 deletion test/parallel/test-https-connect-address-family.js
Expand Up @@ -33,7 +33,7 @@ function runTest() {

dns.lookup('localhost', {family: 6, all: true}, (err, addresses) => {
if (err) {
if (err.code === 'ENOTFOUND')
if (err.code === 'ENOTFOUND' || err.code === 'EAI_AGAIN')
common.skip('localhost does not resolve to ::1');

throw err;
Expand Down
Expand Up @@ -9,7 +9,13 @@ const c = net.createConnection(0, 'this.hostname.is.invalid');
c.on('connect', common.mustNotCall());

c.on('error', common.mustCall(function(e) {
assert.strictEqual(e.code, 'ENOTFOUND');
// If Name Service Switch is available on the operating system then it
// might be configured differently (/etc/nsswitch.conf).
// If the system is configured with no dns the error code will be EAI_AGAIN,
// but if there are more services after the dns entry, for example some
// linux distributions ship a myhostname service by default which would
// still produce the ENOTFOUND error.
assert.ok(e.code === 'ENOTFOUND' || e.code === 'EAI_AGAIN');
assert.strictEqual(e.port, 0);
assert.strictEqual(e.hostname, 'this.hostname.is.invalid');
}));
8 changes: 7 additions & 1 deletion test/parallel/test-net-connect-immediate-finish.js
Expand Up @@ -11,7 +11,13 @@ const client = net.connect({
client.once('error', common.mustCall((err) => {
assert(err);
assert.strictEqual(err.code, err.errno);
assert.strictEqual(err.code, 'ENOTFOUND');
// If Name Service Switch is available on the operating system then it
// might be configured differently (/etc/nsswitch.conf).
// If the system is configured with no dns the error code will be EAI_AGAIN,
// but if there are more services after the dns entry, for example some
// linux distributions ship a myhostname service by default which would
// still produce the ENOTFOUND error.
assert.ok(err.code === 'ENOTFOUND' || err.code === 'EAI_AGAIN');
assert.strictEqual(err.host, err.hostname);
assert.strictEqual(err.host, 'this.hostname.is.invalid');
assert.strictEqual(err.syscall, 'getaddrinfo');
Expand Down
2 changes: 1 addition & 1 deletion test/parallel/test-tls-connect-address-family.js
Expand Up @@ -32,7 +32,7 @@ function runTest() {

dns.lookup('localhost', {family: 6, all: true}, (err, addresses) => {
if (err) {
if (err.code === 'ENOTFOUND')
if (err.code === 'ENOTFOUND' || err.code === 'EAI_AGAIN')
common.skip('localhost does not resolve to ::1');

throw err;
Expand Down

0 comments on commit 53bba2f

Please sign in to comment.