Bug 1857386 [wpt PR 42383] - Update wpt metadata, a=testonly
[gecko.git] / netwerk / test / unit / test_throttling.js
blob7627684dce4b4d08a51bad02a9057edefa8d34d3
1 // Test nsIThrottledInputChannel interface.
2 "use strict";
4 const { HttpServer } = ChromeUtils.importESModule(
5   "resource://testing-common/httpd.sys.mjs"
6 );
8 function test_handler(metadata, response) {
9   const originalBody = "the response";
10   response.setHeader("Content-Type", "text/html", false);
11   response.setStatusLine(metadata.httpVersion, 200, "OK");
12   response.bodyOutputStream.write(originalBody, originalBody.length);
15 function make_channel(url) {
16   return NetUtil.newChannel({
17     uri: url,
18     loadUsingSystemPrincipal: true,
19   }).QueryInterface(Ci.nsIHttpChannel);
22 function run_test() {
23   let httpserver = new HttpServer();
24   httpserver.registerPathHandler("/testdir", test_handler);
25   httpserver.start(-1);
27   const PORT = httpserver.identity.primaryPort;
28   const size = 4096;
30   let sstream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(
31     Ci.nsIStringInputStream
32   );
33   sstream.data = "x".repeat(size);
35   let mime = Cc["@mozilla.org/network/mime-input-stream;1"].createInstance(
36     Ci.nsIMIMEInputStream
37   );
38   mime.addHeader("Content-Type", "multipart/form-data; boundary=zzzzz");
39   mime.setData(sstream);
41   let tq = Cc["@mozilla.org/network/throttlequeue;1"].createInstance(
42     Ci.nsIInputChannelThrottleQueue
43   );
44   // Make sure the request takes more than one read.
45   tq.init(100 + size / 2, 100 + size / 2);
47   let channel = make_channel("http://localhost:" + PORT + "/testdir");
48   channel
49     .QueryInterface(Ci.nsIUploadChannel)
50     .setUploadStream(mime, "", mime.available());
51   channel.requestMethod = "POST";
53   let tic = channel.QueryInterface(Ci.nsIThrottledInputChannel);
54   tic.throttleQueue = tq;
56   let startTime = Date.now();
57   channel.asyncOpen(
58     new ChannelListener(() => {
59       ok(Date.now() - startTime > 1000, "request took more than one second");
61       httpserver.stop(do_test_finished);
62     })
63   );
65   do_test_pending();