tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });