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