tor-browser

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

test_hpke_config_manager.js (3001B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 let { HPKEConfigManager } = ChromeUtils.importESModule(
      7  "resource://gre/modules/HPKEConfigManager.sys.mjs"
      8 );
      9 
     10 const { HttpServer } = ChromeUtils.importESModule(
     11  "resource://testing-common/httpd.sys.mjs"
     12 );
     13 
     14 let gHttpServer;
     15 let gValidRequestCount = 0;
     16 let gFickleIsWorking = true;
     17 
     18 add_setup(async function () {
     19  gHttpServer = new HttpServer();
     20  let invalidHandler = (req, res) => {
     21    res.setStatusLine(req.httpVersion, 500, "Oh no, it broke");
     22    res.write("Uh oh, it broke.");
     23  };
     24  let validHandler = (req, res) => {
     25    res.setHeader("Content-Type", "application/ohttp-keys");
     26    res.write("1234");
     27    gValidRequestCount++;
     28  };
     29 
     30  gHttpServer.registerPathHandler("/.wellknown/invalid", invalidHandler);
     31  gHttpServer.registerPathHandler("/.wellknown/valid", validHandler);
     32 
     33  gHttpServer.registerPathHandler("/.wellknown/fickle", (req, res) => {
     34    if (gFickleIsWorking) {
     35      return validHandler(req, res);
     36    }
     37    return invalidHandler(req, res);
     38  });
     39 
     40  gHttpServer.start(-1);
     41 });
     42 
     43 function getLocalURL(path) {
     44  return `http://localhost:${gHttpServer.identity.primaryPort}/.wellknown/${path}`;
     45 }
     46 
     47 add_task(async function test_broken_url_returns_null() {
     48  Assert.equal(await HPKEConfigManager.get(getLocalURL("invalid")), null);
     49 });
     50 
     51 add_task(async function test_working_url_returns_data() {
     52  Assert.deepEqual(
     53    await HPKEConfigManager.get(getLocalURL("valid")),
     54    new TextEncoder().encode("1234")
     55  );
     56 });
     57 
     58 add_task(async function test_we_only_request_once() {
     59  Assert.deepEqual(
     60    await HPKEConfigManager.get(getLocalURL("valid")),
     61    new TextEncoder().encode("1234")
     62  );
     63  let oldRequestCount = gValidRequestCount;
     64 
     65  Assert.deepEqual(
     66    await HPKEConfigManager.get(getLocalURL("valid")),
     67    new TextEncoder().encode("1234")
     68  );
     69  Assert.equal(
     70    oldRequestCount,
     71    gValidRequestCount,
     72    "Shouldn't have made another request."
     73  );
     74 });
     75 
     76 add_task(async function test_maxAge_forces_refresh() {
     77  Assert.deepEqual(
     78    await HPKEConfigManager.get(getLocalURL("valid")),
     79    new TextEncoder().encode("1234")
     80  );
     81  let oldRequestCount = gValidRequestCount;
     82 
     83  Assert.deepEqual(
     84    await HPKEConfigManager.get(getLocalURL("valid"), { maxAge: 0 }),
     85    new TextEncoder().encode("1234")
     86  );
     87  Assert.equal(
     88    oldRequestCount + 1,
     89    gValidRequestCount,
     90    "Should have made another request due to maxAge."
     91  );
     92 });
     93 
     94 add_task(async function test_maxAge_handling_of_invalid_requests() {
     95  Assert.deepEqual(
     96    await HPKEConfigManager.get(getLocalURL("fickle")),
     97    new TextEncoder().encode("1234")
     98  );
     99 
    100  gFickleIsWorking = false;
    101 
    102  Assert.deepEqual(
    103    await HPKEConfigManager.get(getLocalURL("fickle"), { maxAge: 0 }),
    104    null
    105  );
    106 
    107  Assert.deepEqual(
    108    await HPKEConfigManager.get(getLocalURL("fickle")),
    109    new TextEncoder().encode("1234"),
    110    "Should still have the cached config if no max age is passed."
    111  );
    112 });