test_trr_af_fallback.js (3441B)
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 const gOverride = Cc["@mozilla.org/network/native-dns-override;1"].getService( 8 Ci.nsINativeDNSResolverOverride 9 ); 10 11 trr_test_setup(); 12 registerCleanupFunction(async () => { 13 trr_clear_prefs(); 14 }); 15 16 let trrServer = null; 17 add_task(async function start_trr_server() { 18 trrServer = new TRRServer(); 19 registerCleanupFunction(async () => { 20 await trrServer.stop(); 21 }); 22 await trrServer.start(); 23 dump(`port = ${trrServer.port()}\n`); 24 Services.prefs.setBoolPref("network.trr.skip-AAAA-when-not-supported", false); 25 Services.prefs.setCharPref( 26 "network.trr.uri", 27 `https://foo.example.com:${trrServer.port()}/dns-query` 28 ); 29 Services.prefs.setIntPref("network.trr.mode", Ci.nsIDNSService.MODE_TRRFIRST); 30 }); 31 32 add_task(async function unspec_first() { 33 gOverride.clearOverrides(); 34 Services.dns.clearCache(true); 35 36 gOverride.addIPOverride("example.org", "1.1.1.1"); 37 gOverride.addIPOverride("example.org", "::1"); 38 39 await trrServer.registerDoHAnswers("example.org", "A", { 40 answers: [ 41 { 42 name: "example.org", 43 ttl: 55, 44 type: "A", 45 flush: false, 46 data: "1.2.3.4", 47 }, 48 ], 49 }); 50 // This first request gets cached. IPv6 response gets served from the cache 51 await new TRRDNSListener("example.org", { expectedAnswer: "1.2.3.4" }); 52 await new TRRDNSListener("example.org", { 53 flags: Ci.nsIDNSService.RESOLVE_DISABLE_IPV6, 54 expectedAnswer: "1.2.3.4", 55 }); 56 let { inStatus } = await new TRRDNSListener("example.org", { 57 flags: Ci.nsIDNSService.RESOLVE_DISABLE_IPV4, 58 expectedSuccess: false, 59 }); 60 equal(inStatus, Cr.NS_ERROR_UNKNOWN_HOST); 61 }); 62 63 add_task(async function A_then_AAAA_fails() { 64 gOverride.clearOverrides(); 65 Services.dns.clearCache(true); 66 67 gOverride.addIPOverride("example.org", "1.1.1.1"); 68 gOverride.addIPOverride("example.org", "::1"); 69 70 await trrServer.registerDoHAnswers("example.org", "A", { 71 answers: [ 72 { 73 name: "example.org", 74 ttl: 55, 75 type: "A", 76 flush: false, 77 data: "1.2.3.4", 78 }, 79 ], 80 }); 81 // We do individual IPv4/IPv6 requests - we expect IPv6 not to fallback to Do53 because we have an IPv4 record 82 await new TRRDNSListener("example.org", { 83 flags: Ci.nsIDNSService.RESOLVE_DISABLE_IPV6, 84 expectedAnswer: "1.2.3.4", 85 }); 86 let { inStatus } = await new TRRDNSListener("example.org", { 87 flags: Ci.nsIDNSService.RESOLVE_DISABLE_IPV4, 88 expectedSuccess: false, 89 }); 90 equal(inStatus, Cr.NS_ERROR_UNKNOWN_HOST); 91 }); 92 93 add_task(async function just_AAAA_fails() { 94 gOverride.clearOverrides(); 95 Services.dns.clearCache(true); 96 97 gOverride.addIPOverride("example.org", "1.1.1.1"); 98 gOverride.addIPOverride("example.org", "::1"); 99 100 await trrServer.registerDoHAnswers("example.org", "A", { 101 answers: [ 102 { 103 name: "example.org", 104 ttl: 55, 105 type: "A", 106 flush: false, 107 data: "1.2.3.4", 108 }, 109 ], 110 }); 111 // We only do an IPv6 req - we expect IPv6 not to fallback to Do53 because we have an IPv4 record 112 let { inStatus } = await new TRRDNSListener("example.org", { 113 flags: Ci.nsIDNSService.RESOLVE_DISABLE_IPV4, 114 expectedSuccess: false, 115 }); 116 equal(inStatus, Cr.NS_ERROR_UNKNOWN_HOST); 117 });