Bug 1857386 [wpt PR 42383] - Update wpt metadata, a=testonly
[gecko.git] / netwerk / test / unit / test_ohttp_config_manager.js
blob738d332bee3cb47c0fce00044207c7adf28b23d9
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
4 "use strict";
6 let { OHTTPConfigManager } = ChromeUtils.importESModule(
7   "resource://gre/modules/OHTTPConfigManager.sys.mjs"
8 );
10 const { HttpServer } = ChromeUtils.importESModule(
11   "resource://testing-common/httpd.sys.mjs"
14 let gHttpServer;
15 let gValidRequestCount = 0;
16 let gFickleIsWorking = true;
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   };
30   gHttpServer.registerPathHandler("/.wellknown/invalid", invalidHandler);
31   gHttpServer.registerPathHandler("/.wellknown/valid", validHandler);
33   gHttpServer.registerPathHandler("/.wellknown/fickle", (req, res) => {
34     if (gFickleIsWorking) {
35       return validHandler(req, res);
36     }
37     return invalidHandler(req, res);
38   });
40   gHttpServer.start(-1);
41 });
43 function getLocalURL(path) {
44   return `http://localhost:${gHttpServer.identity.primaryPort}/.wellknown/${path}`;
47 add_task(async function test_broken_url_returns_null() {
48   Assert.equal(await OHTTPConfigManager.get(getLocalURL("invalid")), null);
49 });
51 add_task(async function test_working_url_returns_data() {
52   Assert.deepEqual(
53     await OHTTPConfigManager.get(getLocalURL("valid")),
54     new TextEncoder().encode("1234")
55   );
56 });
58 add_task(async function test_we_only_request_once() {
59   Assert.deepEqual(
60     await OHTTPConfigManager.get(getLocalURL("valid")),
61     new TextEncoder().encode("1234")
62   );
63   let oldRequestCount = gValidRequestCount;
65   Assert.deepEqual(
66     await OHTTPConfigManager.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 });
76 add_task(async function test_maxAge_forces_refresh() {
77   Assert.deepEqual(
78     await OHTTPConfigManager.get(getLocalURL("valid")),
79     new TextEncoder().encode("1234")
80   );
81   let oldRequestCount = gValidRequestCount;
83   Assert.deepEqual(
84     await OHTTPConfigManager.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 });
94 add_task(async function test_maxAge_handling_of_invalid_requests() {
95   Assert.deepEqual(
96     await OHTTPConfigManager.get(getLocalURL("fickle")),
97     new TextEncoder().encode("1234")
98   );
100   gFickleIsWorking = false;
102   Assert.deepEqual(
103     await OHTTPConfigManager.get(getLocalURL("fickle"), { maxAge: 0 }),
104     null
105   );
107   Assert.deepEqual(
108     await OHTTPConfigManager.get(getLocalURL("fickle")),
109     new TextEncoder().encode("1234"),
110     "Should still have the cached config if no max age is passed."
111   );