1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 // This test simmulates intermittent native DNS functionality.
8 // We verify that we don't use the negative DNS record for the DoH server.
9 // The first resolve of foo.example.com fails, so we expect TRR not to work.
10 // Immediately after the native DNS starts working, it should connect to the
11 // TRR server and start working.
13 const override
= Cc
["@mozilla.org/network/native-dns-override;1"].getService(
14 Ci
.nsINativeDNSResolverOverride
19 Services
.prefs
.clearUserPref("network.trr.bootstrapAddr");
20 Services
.prefs
.clearUserPref("network.dns.native-is-localhost");
24 registerCleanupFunction(async () => {
26 override
.clearOverrides();
29 add_task(async
function intermittent_dns_mode3() {
30 override
.addIPOverride("foo.example.com", "N/A");
31 let trrServer
= new TRRServer();
32 registerCleanupFunction(async () => {
33 await trrServer
.stop();
35 await trrServer
.start();
36 info(`port = ${trrServer.port()}\n`);
37 Services
.dns
.clearCache(true);
38 Services
.prefs
.setCharPref(
40 `https://foo.example.com:${trrServer.port()}/dns-query`
42 Services
.prefs
.setIntPref("network.trr.mode", Ci
.nsIDNSService
.MODE_TRRONLY
);
43 await trrServer
.registerDoHAnswers("example.com", "A", {
54 let { inStatus
} = await
new TRRDNSListener("example.com", {
55 expectedSuccess
: false,
57 equal(inStatus
, Cr
.NS_ERROR_UNKNOWN_HOST
);
58 await trrServer
.registerDoHAnswers("example.org", "A", {
69 override
.addIPOverride("foo.example.com", "127.0.0.1");
70 await
new TRRDNSListener("example.org", { expectedAnswer
: "1.2.3.4" });
71 await trrServer
.stop();
74 add_task(async
function intermittent_dns_mode2() {
75 override
.addIPOverride("foo.example.com", "N/A");
76 let trrServer
= new TRRServer();
77 registerCleanupFunction(async () => {
78 await trrServer
.stop();
80 await trrServer
.start();
81 info(`port = ${trrServer.port()}\n`);
83 Services
.dns
.clearCache(true);
84 Services
.prefs
.setIntPref(
86 Ci
.nsIDNSService
.MODE_NATIVEONLY
88 Services
.prefs
.setCharPref(
90 `https://foo.example.com:${trrServer.port()}/dns-query`
92 Services
.prefs
.setIntPref("network.trr.mode", Ci
.nsIDNSService
.MODE_TRRFIRST
);
93 await trrServer
.registerDoHAnswers("example.com", "A", {
104 override
.addIPOverride("example.com", "2.2.2.2");
105 await
new TRRDNSListener("example.com", {
106 expectedAnswer
: "2.2.2.2",
108 await trrServer
.registerDoHAnswers("example.org", "A", {
119 override
.addIPOverride("example.org", "3.3.3.3");
120 override
.addIPOverride("foo.example.com", "127.0.0.1");
121 await
new TRRDNSListener("example.org", { expectedAnswer
: "1.2.3.4" });
122 await trrServer
.stop();