Bug 1796551 [wpt PR 36570] - WebKit export of https://bugs.webkit.org/show_bug.cgi...
[gecko.git] / netwerk / test / unit / test_dns_disabled.js
blob58f90c7b9b6ac74fcfe37be426550304cbbfd409
1 "use strict";
3 const dns = Cc["@mozilla.org/network/dns-service;1"].getService(
4   Ci.nsIDNSService
5 );
6 const override = Cc["@mozilla.org/network/native-dns-override;1"].getService(
7   Ci.nsINativeDNSResolverOverride
8 );
9 const mainThread = Services.tm.currentThread;
11 function makeListenerBlock(next) {
12   return {
13     onLookupComplete(inRequest, inRecord, inStatus) {
14       Assert.ok(!Components.isSuccessCode(inStatus));
15       next();
16     },
17   };
20 function makeListenerDontBlock(next, expectedAnswer) {
21   return {
22     onLookupComplete(inRequest, inRecord, inStatus) {
23       Assert.equal(inStatus, Cr.NS_OK);
24       inRecord.QueryInterface(Ci.nsIDNSAddrRecord);
25       var answer = inRecord.getNextAddrAsString();
26       if (expectedAnswer) {
27         Assert.equal(answer, expectedAnswer);
28       } else {
29         Assert.ok(answer == "127.0.0.1" || answer == "::1");
30       }
31       next();
32     },
33   };
36 function do_test({ dnsDisabled, mustBlock, testDomain, expectedAnswer }) {
37   return new Promise(resolve => {
38     Services.prefs.setBoolPref("network.dns.disabled", dnsDisabled);
39     try {
40       dns.asyncResolve(
41         testDomain,
42         Ci.nsIDNSService.RESOLVE_TYPE_DEFAULT,
43         0,
44         null, // resolverInfo
45         mustBlock
46           ? makeListenerBlock(resolve)
47           : makeListenerDontBlock(resolve, expectedAnswer),
48         mainThread,
49         {} // Default origin attributes
50       );
51     } catch (e) {
52       Assert.ok(mustBlock === true);
53       resolve();
54     }
55   });
58 function setup() {
59   override.addIPOverride("foo.bar", "127.0.0.1");
60   registerCleanupFunction(function() {
61     override.clearOverrides();
62     Services.prefs.clearUserPref("network.dns.disabled");
63   });
65 setup();
67 // IP literals should be resolved even if dns is disabled
68 add_task(async function testIPLiteral() {
69   return do_test({
70     dnsDisabled: true,
71     mustBlock: false,
72     testDomain: "0x01010101",
73     expectedAnswer: "1.1.1.1",
74   });
75 });
77 add_task(async function testBlocked() {
78   return do_test({
79     dnsDisabled: true,
80     mustBlock: true,
81     testDomain: "foo.bar",
82   });
83 });
85 add_task(async function testNotBlocked() {
86   return do_test({
87     dnsDisabled: false,
88     mustBlock: false,
89     testDomain: "foo.bar",
90   });
91 });