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