diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /netwerk/test/unit/test_http3_large_post_telemetry.js | |
parent | Initial commit. (diff) | |
download | firefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'netwerk/test/unit/test_http3_large_post_telemetry.js')
-rw-r--r-- | netwerk/test/unit/test_http3_large_post_telemetry.js | 334 |
1 files changed, 334 insertions, 0 deletions
diff --git a/netwerk/test/unit/test_http3_large_post_telemetry.js b/netwerk/test/unit/test_http3_large_post_telemetry.js new file mode 100644 index 0000000000..5876937d4f --- /dev/null +++ b/netwerk/test/unit/test_http3_large_post_telemetry.js @@ -0,0 +1,334 @@ +/* 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/. */ + +const { TelemetryTestUtils } = ChromeUtils.importESModule( + "resource://testing-common/TelemetryTestUtils.sys.mjs" +); + +let indexes_10_100 = [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 16, + 18, + 20, + 22, + 24, + 27, + 30, + 33, + 37, + 41, + 46, + 51, + 57, + 63, + 70, + 78, + 87, + 97, + 108, + 120, + 133, + 148, + 165, + 184, + 205, + 228, + 254, + 282, + 314, + 349, + 388, + 431, + 479, + 533, + 593, + 659, + 733, + 815, + 906, + 1008, + 1121, + 1247, + 1387, + 1542, + 1715, + 1907, + 2121, + 2359, + 2623, + 2917, + 3244, + 3607, + 4011, + 4460, + 4960, + 5516, + 6134, + 6821, + 7585, + 8435, + 9380, + 10431, + 11600, + 12900, + 14345, + 15952, + 17739, + 19727, + 21937, + 24395, + 27129, + 30169, + 33549, + 37308, + 41488, + 46137, + 51307, + 57056, + 63449, + 70559, + 78465, + 87257, + 97035, + 107908, + 120000, +]; + +let indexes_gt_100 = [ + 0, + 30000, + 30643, + 31300, + 31971, + 32657, + 33357, + 34072, + 34803, + 35549, + 36311, + 37090, + 37885, + 38697, + 39527, + 40375, + 41241, + 42125, + 43028, + 43951, + 44894, + 45857, + 46840, + 47845, + 48871, + 49919, + 50990, + 52084, + 53201, + 54342, + 55507, + 56697, + 57913, + 59155, + 60424, + 61720, + 63044, + 64396, + 65777, + 67188, + 68629, + 70101, + 71604, + 73140, + 74709, + 76311, + 77948, + 79620, + 81327, + 83071, + 84853, + 86673, + 88532, + 90431, + 92370, + 94351, + 96374, + 98441, + 100552, + 102708, + 104911, + 107161, + 109459, + 111806, + 114204, + 116653, + 119155, + 121710, + 124320, + 126986, + 129709, + 132491, + 135332, + 138234, + 141199, + 144227, + 147320, + 150479, + 153706, + 157002, + 160369, + 163808, + 167321, + 170909, + 174574, + 178318, + 182142, + 186048, + 190038, + 194114, + 198277, + 202529, + 206872, + 211309, + 215841, + 220470, + 225198, + 230028, + 234961, + 240000, +]; + +registerCleanupFunction(async () => { + http3_clear_prefs(); + Services.prefs.clearUserPref( + "toolkit.telemetry.testing.overrideProductsCheck" + ); +}); + +add_task(async function setup() { + // Enable the collection (during test) for all products so even products + // that don't collect the data will be able to run the test without failure. + Services.prefs.setBoolPref( + "toolkit.telemetry.testing.overrideProductsCheck", + true + ); + + await http3_setup_tests("h3-29"); +}); + +let Http3Listener = function() {}; + +Http3Listener.prototype = { + onStartRequest: function testOnStartRequest(request) { + Assert.equal(request.status, Cr.NS_OK); + Assert.equal(request.responseStatus, 200); + }, + + onDataAvailable: function testOnDataAvailable(request, stream, off, cnt) { + read_stream(stream, cnt); + }, + + onStopRequest: function testOnStopRequest(request, status) { + let httpVersion = ""; + try { + httpVersion = request.protocolVersion; + } catch (e) {} + Assert.equal(httpVersion, "h3-29"); + this.finish(); + }, +}; + +function chanPromise(chan, listener) { + return new Promise(resolve => { + function finish(result) { + resolve(result); + } + listener.finish = finish; + chan.asyncOpen(listener); + }); +} + +function makeChan(uri, amount) { + let chan = NetUtil.newChannel({ + uri, + loadUsingSystemPrincipal: true, + }).QueryInterface(Ci.nsIHttpChannel); + chan.loadFlags = Ci.nsIChannel.LOAD_INITIAL_DOCUMENT_URI; + + let stream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance( + Ci.nsIStringInputStream + ); + stream.data = generateContent(amount); + let uchan = chan.QueryInterface(Ci.nsIUploadChannel); + uchan.setUploadStream(stream, "text/plain", stream.available()); + chan.requestMethod = "POST"; + return chan; +} + +// Generate a post. +function generateContent(size) { + let content = ""; + for (let i = 0; i < size; i++) { + content += "0"; + } + return content; +} + +async function test_large_post(amount, hist_name, key, indexes) { + let hist = TelemetryTestUtils.getAndClearKeyedHistogram(hist_name); + + let listener = new Http3Listener(); + listener.amount = amount; + let chan = makeChan("https://foo.example.com/post", amount); + let tchan = chan.QueryInterface(Ci.nsITimedChannel); + tchan.timingEnabled = true; + await chanPromise(chan, listener); + + let time = (tchan.responseStartTime - tchan.requestStartTime) / 1000; + let i = 0; + while (i < indexes.length && time > indexes[i + 1]) { + i += 1; + } + TelemetryTestUtils.assertKeyedHistogramValue(hist, key, indexes[i], 1); +} + +add_task(async function test_11M() { + await test_large_post( + 11 * (1 << 20), + "HTTP3_UPLOAD_TIME_10M_100M", + "uses_http3_10_50", + indexes_10_100 + ); +}); + +add_task(async function test_51M() { + await test_large_post( + 51 * (1 << 20), + "HTTP3_UPLOAD_TIME_10M_100M", + "uses_http3_50_100", + indexes_10_100 + ); +}); + +add_task(async function test_101M() { + await test_large_post( + 101 * (1 << 20), + "HTTP3_UPLOAD_TIME_GT_100M", + "uses_http3", + indexes_gt_100 + ); +}); |