tor-browser

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

test_altsvc_pref.js (3595B)


      1 "use strict";
      2 
      3 let h3Port;
      4 let h3Route;
      5 let h3AltSvc;
      6 let prefs;
      7 let httpsOrigin;
      8 
      9 let tests = [
     10  // The altSvc storage may not be up imediately, therefore run test_no_altsvc_pref
     11  // for a couple times to wait for the storage.
     12  test_no_altsvc_pref,
     13  test_no_altsvc_pref,
     14  test_no_altsvc_pref,
     15  test_altsvc_pref,
     16  testsDone,
     17 ];
     18 
     19 let current_test = 0;
     20 
     21 function run_next_test() {
     22  if (current_test < tests.length) {
     23    dump("starting test number " + current_test + "\n");
     24    tests[current_test]();
     25    current_test++;
     26  }
     27 }
     28 
     29 function run_test() {
     30  h3Port = Services.env.get("MOZHTTP3_PORT");
     31  Assert.notEqual(h3Port, null);
     32  Assert.notEqual(h3Port, "");
     33  h3AltSvc = ":" + h3Port;
     34 
     35  h3Route = "foo.example.com:" + h3Port;
     36  do_get_profile();
     37  prefs = Services.prefs;
     38 
     39  prefs.setBoolPref("network.http.http3.enable", true);
     40  prefs.setCharPref("network.dns.localDomains", "foo.example.com");
     41  prefs.setBoolPref("network.dns.disableIPv6", true);
     42 
     43  // The certificate for the http3server server is for foo.example.com and
     44  // is signed by http2-ca.pem so add that cert to the trust list as a
     45  // signing cert.
     46  let certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(
     47    Ci.nsIX509CertDB
     48  );
     49  addCertFromFile(certdb, "http2-ca.pem", "CTu,u,u");
     50  httpsOrigin = "https://foo.example.com/";
     51 
     52  run_next_test();
     53 }
     54 
     55 let Http3CheckListener = function () {};
     56 
     57 Http3CheckListener.prototype = {
     58  expectedRoute: "",
     59  expectedStatus: Cr.NS_OK,
     60 
     61  onStartRequest: function testOnStartRequest(request) {
     62    Assert.ok(request instanceof Ci.nsIHttpChannel);
     63    Assert.equal(request.status, this.expectedStatus);
     64    if (Components.isSuccessCode(this.expectedStatus)) {
     65      Assert.equal(request.responseStatus, 200);
     66    }
     67  },
     68 
     69  onDataAvailable: function testOnDataAvailable(request, stream, off, cnt) {
     70    read_stream(stream, cnt);
     71  },
     72 
     73  onStopRequest: function testOnStopRequest(request, status) {
     74    Assert.equal(status, this.expectedStatus);
     75    if (Components.isSuccessCode(this.expectedStatus)) {
     76      Assert.equal(request.responseStatus, 200);
     77      let routed = "NA";
     78      try {
     79        routed = request.getRequestHeader("Alt-Used");
     80      } catch (e) {}
     81      dump("routed is " + routed + "\n");
     82 
     83      Assert.equal(routed, this.expectedRoute);
     84 
     85      let httpVersion = "";
     86      try {
     87        httpVersion = request.protocolVersion;
     88      } catch (e) {}
     89      Assert.equal(httpVersion, "h3");
     90    }
     91 
     92    do_test_finished();
     93  },
     94 };
     95 
     96 function makeChan(uri) {
     97  let chan = NetUtil.newChannel({
     98    uri,
     99    loadUsingSystemPrincipal: true,
    100  }).QueryInterface(Ci.nsIHttpChannel);
    101  chan.loadFlags = Ci.nsIChannel.LOAD_INITIAL_DOCUMENT_URI;
    102  return chan;
    103 }
    104 
    105 function test_no_altsvc_pref() {
    106  dump("test_no_altsvc_pref");
    107  do_test_pending();
    108 
    109  let chan = makeChan(httpsOrigin + "http3-test");
    110  let listener = new Http3CheckListener();
    111  listener.expectedStatus = Cr.NS_ERROR_CONNECTION_REFUSED;
    112  chan.asyncOpen(listener);
    113 }
    114 
    115 function test_altsvc_pref() {
    116  dump("test_altsvc_pref");
    117  do_test_pending();
    118 
    119  prefs.setCharPref(
    120    "network.http.http3.alt-svc-mapping-for-testing",
    121    "foo.example.com;h3=" + h3AltSvc
    122  );
    123 
    124  let chan = makeChan(httpsOrigin + "http3-test");
    125  let listener = new Http3CheckListener();
    126  listener.expectedRoute = h3Route;
    127  chan.asyncOpen(listener);
    128 }
    129 
    130 function testsDone() {
    131  prefs.clearUserPref("network.http.http3.enable");
    132  prefs.clearUserPref("network.dns.localDomains");
    133  prefs.clearUserPref("network.dns.disableIPv6");
    134  prefs.clearUserPref("network.http.http3.alt-svc-mapping-for-testing");
    135  dump("testDone\n");
    136 }