diff options
Diffstat (limited to '')
-rw-r--r-- | dom/webtransport/test/xpcshell/test_simple_conn.js | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/dom/webtransport/test/xpcshell/test_simple_conn.js b/dom/webtransport/test/xpcshell/test_simple_conn.js new file mode 100644 index 0000000000..e5711c0baf --- /dev/null +++ b/dom/webtransport/test/xpcshell/test_simple_conn.js @@ -0,0 +1,129 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// Some basic WebTransport tests for: +// * session rejection and redirection +// * session and stream creation +// * reading from incoming streams (uni) +// +// keep eslint happy until it knows about WebTransport +/* global WebTransport:false */ + +"use strict"; + +var h3Port; +var host; + +registerCleanupFunction(async () => { + Services.prefs.clearUserPref("network.dns.localDomains"); + Services.prefs.clearUserPref("network.webtransport.enabled"); + Services.prefs.clearUserPref("network.webtransport.datagrams.enabled"); + Services.prefs.clearUserPref("network.webtransport.redirect.enabled"); +}); + +var { NetUtil } = ChromeUtils.import("resource://gre/modules/NetUtil.jsm"); + +function readFile(file) { + let fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance( + Ci.nsIFileInputStream + ); + fstream.init(file, -1, 0, 0); + let data = NetUtil.readInputStreamToString(fstream, fstream.available()); + fstream.close(); + return data; +} + +function addCertFromFile(certdb, filename, trustString) { + let certFile = do_get_file(filename, false); + let pem = readFile(certFile) + .replace(/-----BEGIN CERTIFICATE-----/, "") + .replace(/-----END CERTIFICATE-----/, "") + .replace(/[\r\n]/g, ""); + certdb.addCertFromBase64(pem, trustString); +} + +add_setup(async function setup() { + Services.prefs.setCharPref("network.dns.localDomains", "foo.example.com"); + Services.prefs.setBoolPref("network.webtransport.enabled", true); + Services.prefs.setBoolPref("network.webtransport.datagrams.enabled", true); + Services.prefs.setBoolPref("network.webtransport.redirect.enabled", true); + + h3Port = Services.env.get("MOZHTTP3_PORT"); + Assert.notEqual(h3Port, null); + Assert.notEqual(h3Port, ""); + host = "foo.example.com:" + h3Port; + do_get_profile(); + + let certdb = Cc["@mozilla.org/security/x509certdb;1"].getService( + Ci.nsIX509CertDB + ); + // `../unit/` so that unit_ipc tests can use as well + addCertFromFile( + certdb, + "../../../../netwerk/test/unit/http2-ca.pem", + "CTu,u,u" + ); +}); + +add_task(async function test_webtransport_create() { + const wt = new WebTransport("https://" + host + "/success"); + await wt.ready; + wt.close(); +}); + +add_task(async function test_redirect_wt() { + let wt = new WebTransport("https://" + host + "/redirect"); + const e1 = await wt.ready.catch(e => e); + const e2 = await wt.closed.catch(e => e); + + Assert.equal(e1, "WebTransportError: WebTransport connection rejected"); + Assert.equal(e2, "WebTransportError: WebTransport connection rejected"); +}); + +add_task(async function test_reject_wt() { + let wt = new WebTransport("https://" + host + "/reject"); + const e1 = await wt.ready.catch(e => e); + const e2 = await wt.closed.catch(e => e); + Assert.equal(e1, "WebTransportError: WebTransport connection rejected"); + Assert.equal(e2, "WebTransportError: WebTransport connection rejected"); +}); + +add_task(async function test_immediate_server_close() { + let wt = new WebTransport("https://" + host + "/closeafter0ms"); + await wt.ready; + await wt.closed; + Assert.ok(true); +}); + +add_task(async function test_delayed_server_close() { + let wt = new WebTransport("https://" + host + "/closeafter100ms"); + await wt.ready; + await wt.closed; + Assert.ok(true); +}); + +add_task(async function test_wt_stream_create_bidi() { + let wt = new WebTransport("https://" + host + "/success"); + await wt.ready; + + let bds = await wt.createBidirectionalStream(); + await bds.writable.close(); + await bds.readable.cancel(); + Assert.notEqual(bds, null); + wt.close(); +}); + +add_task(async function test_wt_stream_create_uni() { + let wt = new WebTransport("https://" + host + "/success"); + await wt.ready; + + let uds = await wt.createUnidirectionalStream(); + Assert.notEqual(uds, null); + await uds.close(); + wt.close(); +}); + +// TODO: datagram test +// TODO: getStats tests +// TODO: fix the crash discussed in bug 1822154 |