1// Copyright Joyent, Inc. and other Node contributors. 2// 3// Permission is hereby granted, free of charge, to any person obtaining a 4// copy of this software and associated documentation files (the 5// "Software"), to deal in the Software without restriction, including 6// without limitation the rights to use, copy, modify, merge, publish, 7// distribute, sublicense, and/or sell copies of the Software, and to permit 8// persons to whom the Software is furnished to do so, subject to the 9// following conditions: 10// 11// The above copyright notice and this permission notice shall be included 12// in all copies or substantial portions of the Software. 13// 14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 17// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 20// USE OR OTHER DEALINGS IN THE SOFTWARE. 21 22'use strict'; 23const common = require('../common'); 24const assert = require('assert'); 25 26const dns = require('dns'); 27const dnsPromises = dns.promises; 28 29(async function() { 30 let res; 31 32 res = await dnsPromises.lookup(null); 33 assert.strictEqual(res.address, null); 34 assert.strictEqual(res.family, 4); 35 36 res = await dnsPromises.lookup('127.0.0.1'); 37 assert.strictEqual(res.address, '127.0.0.1'); 38 assert.strictEqual(res.family, 4); 39 40 res = await dnsPromises.lookup('::1'); 41 assert.strictEqual(res.address, '::1'); 42 assert.strictEqual(res.family, 6); 43})().then(common.mustCall()); 44 45// Try resolution without hostname. 46dns.lookup(null, common.mustSucceed((result, addressType) => { 47 assert.strictEqual(result, null); 48 assert.strictEqual(addressType, 4); 49})); 50 51dns.lookup('127.0.0.1', common.mustSucceed((result, addressType) => { 52 assert.strictEqual(result, '127.0.0.1'); 53 assert.strictEqual(addressType, 4); 54})); 55 56dns.lookup('::1', common.mustSucceed((result, addressType) => { 57 assert.strictEqual(result, '::1'); 58 assert.strictEqual(addressType, 6); 59})); 60 61[ 62 // Try calling resolve with an unsupported type. 63 'HI', 64 // Try calling resolve with an unsupported type that's an object key 65 'toString', 66].forEach((val) => { 67 const err = { 68 code: 'ERR_INVALID_ARG_VALUE', 69 name: 'TypeError', 70 message: `The argument 'rrtype' is invalid. Received '${val}'`, 71 }; 72 73 assert.throws( 74 () => dns.resolve('www.google.com', val), 75 err 76 ); 77 78 assert.throws(() => dnsPromises.resolve('www.google.com', val), err); 79}); 80 81// Windows doesn't usually have an entry for localhost 127.0.0.1 in 82// C:\Windows\System32\drivers\etc\hosts 83// so we disable this test on Windows. 84// IBMi reports `ENOTFOUND` when get hostname by address 127.0.0.1 85if (!common.isWindows && !common.isIBMi) { 86 dns.reverse('127.0.0.1', common.mustSucceed((domains) => { 87 assert.ok(Array.isArray(domains)); 88 })); 89 90 (async function() { 91 assert.ok(Array.isArray(await dnsPromises.reverse('127.0.0.1'))); 92 })().then(common.mustCall()); 93} 94