tor-browser

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

test_simple_conn.js (4008B)


      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 // Some basic WebTransport tests for:
      6 // * session rejection and redirection
      7 // * session and stream creation
      8 // * reading from incoming streams (uni)
      9 //
     10 // keep eslint happy until it knows about WebTransport
     11 /* global WebTransport:false */
     12 
     13 "use strict";
     14 
     15 var h3Port;
     16 var host;
     17 
     18 /* eslint no-unused-vars: 0 */
     19 const dns = Services.dns;
     20 
     21 registerCleanupFunction(async () => {
     22  Services.prefs.clearUserPref("network.dns.localDomains");
     23  Services.prefs.clearUserPref("network.webtransport.enabled");
     24  Services.prefs.clearUserPref("network.webtransport.redirect.enabled");
     25 });
     26 
     27 var { NetUtil } = ChromeUtils.importESModule(
     28  "resource://gre/modules/NetUtil.sys.mjs"
     29 );
     30 
     31 function readFile(file) {
     32  let fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(
     33    Ci.nsIFileInputStream
     34  );
     35  fstream.init(file, -1, 0, 0);
     36  let data = NetUtil.readInputStreamToString(fstream, fstream.available());
     37  fstream.close();
     38  return data;
     39 }
     40 
     41 function addCertFromFile(certdb, filename, trustString) {
     42  let certFile = do_get_file(filename, false);
     43  let pem = readFile(certFile)
     44    .replace(/-----BEGIN CERTIFICATE-----/, "")
     45    .replace(/-----END CERTIFICATE-----/, "")
     46    .replace(/[\r\n]/g, "");
     47  certdb.addCertFromBase64(pem, trustString);
     48 }
     49 
     50 add_setup(async function setup() {
     51  Services.prefs.setCharPref("network.dns.localDomains", "foo.example.com");
     52  Services.prefs.setBoolPref("network.webtransport.enabled", true);
     53  Services.prefs.setBoolPref("network.webtransport.redirect.enabled", true);
     54 
     55  h3Port = Services.env.get("MOZHTTP3_PORT");
     56  Assert.notEqual(h3Port, null);
     57  Assert.notEqual(h3Port, "");
     58  host = "foo.example.com:" + h3Port;
     59  do_get_profile();
     60 
     61  let certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(
     62    Ci.nsIX509CertDB
     63  );
     64  // `../unit/` so that unit_ipc tests can use as well
     65  addCertFromFile(
     66    certdb,
     67    "../../../../netwerk/test/unit/http2-ca.pem",
     68    "CTu,u,u"
     69  );
     70 });
     71 
     72 add_task(async function test_webtransport_create() {
     73  const wt = new WebTransport("https://" + host + "/success");
     74  await wt.ready;
     75  wt.close();
     76 });
     77 
     78 add_task(async function test_redirect_wt() {
     79  let wt = new WebTransport("https://" + host + "/redirect");
     80  const e1 = await wt.ready.catch(e => e);
     81  const e2 = await wt.closed.catch(e => e);
     82 
     83  Assert.equal(e1, "WebTransportError: WebTransport connection rejected");
     84  Assert.equal(e2, "WebTransportError: WebTransport connection rejected");
     85 });
     86 
     87 add_task(async function test_reject_wt() {
     88  let wt = new WebTransport("https://" + host + "/reject");
     89  const e1 = await wt.ready.catch(e => e);
     90  const e2 = await wt.closed.catch(e => e);
     91  Assert.equal(e1, "WebTransportError: WebTransport connection rejected");
     92  Assert.equal(e2, "WebTransportError: WebTransport connection rejected");
     93 });
     94 
     95 add_task(async function test_immediate_server_close() {
     96  let wt = new WebTransport("https://" + host + "/closeafter0ms");
     97  await wt.ready;
     98  await wt.closed;
     99  Assert.ok(true);
    100 });
    101 
    102 add_task(async function test_delayed_server_close() {
    103  let wt = new WebTransport("https://" + host + "/closeafter100ms");
    104  await wt.ready;
    105  await wt.closed;
    106  Assert.ok(true);
    107 });
    108 
    109 add_task(async function test_wt_stream_create_bidi() {
    110  let wt = new WebTransport("https://" + host + "/success");
    111  await wt.ready;
    112 
    113  let bds = await wt.createBidirectionalStream();
    114  await bds.writable.close();
    115  await bds.readable.cancel();
    116  Assert.notEqual(bds, null);
    117  wt.close();
    118 });
    119 
    120 add_task(async function test_wt_stream_create_uni() {
    121  let wt = new WebTransport("https://" + host + "/success");
    122  await wt.ready;
    123 
    124  let uds = await wt.createUnidirectionalStream();
    125  Assert.notEqual(uds, null);
    126  await uds.close();
    127  wt.close();
    128 });
    129 
    130 // TODO: datagram test
    131 // TODO: getStats tests
    132 // TODO: fix the crash discussed in bug 1822154