test_trr_domain.js (3568B)
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/. */ 4 5 "use strict"; 6 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. 12 13 const override = Cc["@mozilla.org/network/native-dns-override;1"].getService( 14 Ci.nsINativeDNSResolverOverride 15 ); 16 17 function setup() { 18 trr_test_setup(); 19 Services.prefs.clearUserPref("network.trr.bootstrapAddr"); 20 Services.prefs.clearUserPref("network.dns.native-is-localhost"); 21 } 22 setup(); 23 24 registerCleanupFunction(async () => { 25 trr_clear_prefs(); 26 override.clearOverrides(); 27 }); 28 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(); 34 }); 35 await trrServer.start(); 36 info(`port = ${trrServer.port()}\n`); 37 Services.dns.clearCache(true); 38 Services.prefs.setCharPref( 39 "network.trr.uri", 40 `https://foo.example.com:${trrServer.port()}/dns-query` 41 ); 42 Services.prefs.setIntPref("network.trr.mode", Ci.nsIDNSService.MODE_TRRONLY); 43 await trrServer.registerDoHAnswers("example.com", "A", { 44 answers: [ 45 { 46 name: "example.com", 47 ttl: 55, 48 type: "A", 49 flush: false, 50 data: "1.2.3.4", 51 }, 52 ], 53 }); 54 let { inStatus } = await new TRRDNSListener("example.com", { 55 expectedSuccess: false, 56 }); 57 equal(inStatus, Cr.NS_ERROR_UNKNOWN_HOST); 58 await trrServer.registerDoHAnswers("example.org", "A", { 59 answers: [ 60 { 61 name: "example.org", 62 ttl: 55, 63 type: "A", 64 flush: false, 65 data: "1.2.3.4", 66 }, 67 ], 68 }); 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(); 72 }); 73 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(); 79 }); 80 await trrServer.start(); 81 info(`port = ${trrServer.port()}\n`); 82 83 Services.dns.clearCache(true); 84 Services.prefs.setIntPref( 85 "network.trr.mode", 86 Ci.nsIDNSService.MODE_NATIVEONLY 87 ); 88 Services.prefs.setCharPref( 89 "network.trr.uri", 90 `https://foo.example.com:${trrServer.port()}/dns-query` 91 ); 92 Services.prefs.setIntPref("network.trr.mode", Ci.nsIDNSService.MODE_TRRFIRST); 93 await trrServer.registerDoHAnswers("example.com", "A", { 94 answers: [ 95 { 96 name: "example.com", 97 ttl: 55, 98 type: "A", 99 flush: false, 100 data: "1.1.1.1", 101 }, 102 ], 103 }); 104 override.addIPOverride("example.com", "2.2.2.2"); 105 await new TRRDNSListener("example.com", { 106 expectedAnswer: "2.2.2.2", 107 }); 108 await trrServer.registerDoHAnswers("example.org", "A", { 109 answers: [ 110 { 111 name: "example.org", 112 ttl: 55, 113 type: "A", 114 flush: false, 115 data: "1.2.3.4", 116 }, 117 ], 118 }); 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(); 123 });