tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_bug536324_64bit_content_length.js (1624B)


      1 /* Test to ensure our 64-bit content length implementation works, at least for
      2   a simple HTTP case */
      3 
      4 "use strict";
      5 
      6 const { HttpServer } = ChromeUtils.importESModule(
      7  "resource://testing-common/httpd.sys.mjs"
      8 );
      9 
     10 // This C-L is significantly larger than (U)INT32_MAX, to make sure we do
     11 // 64-bit properly.
     12 const CONTENT_LENGTH = "1152921504606846975";
     13 
     14 var httpServer = null;
     15 
     16 var listener = {
     17  onStartRequest() {},
     18 
     19  onDataAvailable(req) {
     20    Assert.equal(req.getResponseHeader("Content-Length"), CONTENT_LENGTH);
     21 
     22    // We're done here, cancel the channel
     23    req.cancel(Cr.NS_BINDING_ABORTED);
     24  },
     25 
     26  onStopRequest() {
     27    httpServer.stop(do_test_finished);
     28  },
     29 };
     30 
     31 function hugeContentLength(metadata, response) {
     32  var text = "abcdefghijklmnopqrstuvwxyz";
     33  var bytes_written = 0;
     34 
     35  response.seizePower();
     36 
     37  response.write("HTTP/1.1 200 OK\r\n");
     38  response.write("Content-Length: " + CONTENT_LENGTH + "\r\n");
     39  response.write("Connection: close\r\n");
     40  response.write("\r\n");
     41 
     42  // Write enough data to ensure onDataAvailable gets called
     43  while (bytes_written < 4096) {
     44    response.write(text);
     45    bytes_written += text.length;
     46  }
     47 
     48  response.finish();
     49 }
     50 
     51 function test_hugeContentLength() {
     52  var chan = NetUtil.newChannel({
     53    uri: "http://localhost:" + httpServer.identity.primaryPort + "/",
     54    loadUsingSystemPrincipal: true,
     55  }).QueryInterface(Ci.nsIHttpChannel);
     56  chan.asyncOpen(listener);
     57 }
     58 
     59 add_test(test_hugeContentLength);
     60 
     61 function run_test() {
     62  httpServer = new HttpServer();
     63  httpServer.registerPathHandler("/", hugeContentLength);
     64  httpServer.start(-1);
     65  run_next_test();
     66 }