diff options
Diffstat (limited to '')
-rw-r--r-- | netwerk/test/unit/test_http3_version1.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/netwerk/test/unit/test_http3_version1.js b/netwerk/test/unit/test_http3_version1.js new file mode 100644 index 0000000000..6894e362d1 --- /dev/null +++ b/netwerk/test/unit/test_http3_version1.js @@ -0,0 +1,93 @@ +/* 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/. */ +"use strict"; + +registerCleanupFunction(async () => { + http3_clear_prefs(); +}); + +let httpsUri; + +add_task(async function pre_setup() { + let h2Port = Services.env.get("MOZHTTP2_PORT"); + Assert.notEqual(h2Port, null); + Assert.notEqual(h2Port, ""); + httpsUri = "https://foo.example.com:" + h2Port + "/"; + Services.prefs.setBoolPref("network.http.http3.support_version1", true); +}); + +add_task(async function setup() { + await http3_setup_tests("h3"); +}); + +function chanPromise(chan, listener) { + return new Promise(resolve => { + function finish() { + resolve(); + } + listener.finish = finish; + chan.asyncOpen(listener); + }); +} + +function makeH2Chan() { + let chan = NetUtil.newChannel({ + uri: httpsUri, + loadUsingSystemPrincipal: true, + }).QueryInterface(Ci.nsIHttpChannel); + chan.loadFlags = Ci.nsIChannel.LOAD_INITIAL_DOCUMENT_URI; + return chan; +} + +let Http3Listener = function() {}; + +Http3Listener.prototype = { + version1enabled: "", + + onStartRequest: function testOnStartRequest(request) {}, + + onDataAvailable: function testOnDataAvailable(request, stream, off, cnt) { + read_stream(stream, cnt); + }, + + onStopRequest: function testOnStopRequest(request, status) { + let httpVersion = ""; + try { + httpVersion = request.protocolVersion; + } catch (e) {} + if (this.version1enabled) { + Assert.equal(httpVersion, "h3"); + } else { + Assert.equal(httpVersion, "h2"); + } + + this.finish(); + }, +}; + +add_task(async function test_version1_enabled_1() { + Services.prefs.setBoolPref("network.http.http3.support_version1", true); + let listener = new Http3Listener(); + listener.version1enabled = true; + let chan = makeH2Chan("https://foo.example.com/"); + await chanPromise(chan, listener); +}); + +add_task(async function test_version1_disabled() { + Services.obs.notifyObservers(null, "net:cancel-all-connections"); + Services.prefs.setBoolPref("network.http.http3.support_version1", false); + let listener = new Http3Listener(); + listener.version1enabled = false; + let chan = makeH2Chan("https://foo.example.com/"); + await chanPromise(chan, listener); +}); + +add_task(async function test_version1_enabled_2() { + Services.obs.notifyObservers(null, "net:cancel-all-connections"); + Services.prefs.setBoolPref("network.http.http3.support_version1", true); + let listener = new Http3Listener(); + listener.version1enabled = true; + let chan = makeH2Chan("https://foo.example.com/"); + await chanPromise(chan, listener); +}); |