summaryrefslogtreecommitdiff
path: root/tests/node_compat/test/parallel/test-dns-resolveany.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/node_compat/test/parallel/test-dns-resolveany.js')
-rw-r--r--tests/node_compat/test/parallel/test-dns-resolveany.js78
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/node_compat/test/parallel/test-dns-resolveany.js b/tests/node_compat/test/parallel/test-dns-resolveany.js
new file mode 100644
index 000000000..56d533ad9
--- /dev/null
+++ b/tests/node_compat/test/parallel/test-dns-resolveany.js
@@ -0,0 +1,78 @@
+// deno-fmt-ignore-file
+// deno-lint-ignore-file
+
+// Copyright Joyent and Node contributors. All rights reserved. MIT license.
+// Taken from Node 16.13.0
+// This file is automatically generated by "node/_tools/setup.ts". Do not modify this file manually
+
+// TODO: enable remaining tests once functionality is implemented.
+
+'use strict';
+const common = require('../common');
+const dnstools = require('../common/dns');
+const dns = require('dns');
+const assert = require('assert');
+const dgram = require('dgram');
+const dnsPromises = dns.promises;
+
+const answers = [
+ { type: 'A', address: '1.2.3.4', /*ttl: 123*/ },
+ { type: 'AAAA', address: '::42', /*ttl: 123*/ },
+ {
+ type: 'CAA',
+ critical: 128,
+ issue: 'platynum.ch'
+ },
+ { type: 'MX', priority: 42, exchange: 'foobar.com', ttl: 124 },
+ { type: 'NS', value: 'foobar.org', ttl: 457 },
+ { type: 'PTR', value: 'baz.org', ttl: 987 },
+ {
+ type: 'SOA',
+ nsname: 'ns1.example.com',
+ hostmaster: 'admin.example.com',
+ serial: 156696742,
+ refresh: 900,
+ retry: 900,
+ expire: 1800,
+ minttl: 60
+ },
+ { type: 'TXT', entries: [ 'v=spf1 ~all', 'xyz\x00foo' ] },
+];
+
+const server = dgram.createSocket('udp4');
+
+server.on('message', common.mustCall((msg, { address, port }) => {
+ const parsed = dnstools.parseDNSPacket(msg);
+ const domain = parsed.questions[0].domain;
+ assert.strictEqual(domain, 'example.org');
+
+ server.send(dnstools.writeDNSPacket({
+ id: parsed.id,
+ questions: parsed.questions,
+ answers: answers.map((answer) => Object.assign({ domain }, answer)),
+ }), port, address);
+}, /*2*/ 30));
+
+server.bind(0, common.mustCall(async () => {
+ const address = server.address();
+ dns.setServers([`127.0.0.1:${address.port}`]);
+
+ validateResults(await dnsPromises.resolveAny('example.org'));
+
+ dns.resolveAny('example.org', common.mustSucceed((res) => {
+ validateResults(res);
+ server.close();
+ }));
+}));
+
+function validateResults(res) {
+ // TTL values are only provided for A and AAAA entries.
+ assert.deepStrictEqual(res.map(maybeRedactTTL), answers.map(maybeRedactTTL));
+}
+
+function maybeRedactTTL(r) {
+ const ret = { ...r };
+ if (!['A', 'AAAA'].includes(r.type))
+ delete ret.ttl;
+ return ret;
+}