netwerk/test/unit/test_bug596443.js

Wed, 31 Dec 2014 06:55:46 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:46 +0100
changeset 1
ca08bd8f51b2
permissions
-rw-r--r--

Added tag TORBROWSER_REPLICA for changeset 6474c204b198

     1 Cu.import("resource://testing-common/httpd.js");
     2 var httpserver = new HttpServer();
     4 var expectedOnStopRequests = 3;
     6 function setupChannel(suffix, xRequest, flags) {
     7     var ios = Components.classes["@mozilla.org/network/io-service;1"]
     8             .getService(Ci.nsIIOService);
     9     var chan = ios.newChannel("http://localhost:" +
    10                               httpserver.identity.primaryPort +
    11                               suffix, "", null);
    12     if (flags)
    13         chan.loadFlags |= flags;
    15     var httpChan = chan.QueryInterface(Components.interfaces.nsIHttpChannel);
    16     httpChan.setRequestHeader("x-request", xRequest, false);
    18     return httpChan;
    19 }
    21 function Listener(response) {
    22     this._response = response;
    23 }
    24 Listener.prototype = {
    25     _response: null,
    26     _buffer: null,
    28     QueryInterface: function(iid) {
    29         if (iid.equals(Components.interfaces.nsIStreamListener) ||
    30             iid.equals(Components.interfaces.nsIRequestObserver) ||
    31             iid.equals(Components.interfaces.nsISupports))
    32           return this;
    33         throw Components.results.NS_ERROR_NO_INTERFACE;
    34     },
    36     onStartRequest: function (request, ctx) {
    37         this._buffer = "";
    38     },
    39     onDataAvailable: function (request, ctx, stream, offset, count) {
    40         this._buffer = this._buffer.concat(read_stream(stream, count));
    41     },
    42     onStopRequest: function (request, ctx, status) {
    43         do_check_eq(this._buffer, this._response);
    44         if (--expectedOnStopRequests == 0)
    45             do_timeout(10, function() {
    46                         httpserver.stop(do_test_finished);
    47                     });
    48     }
    49 };
    51 function run_test() {
    52     httpserver.registerPathHandler("/bug596443", handler);
    53     httpserver.start(-1);
    55     // make sure we have a profile so we can use the disk-cache
    56     do_get_profile();
    58     // clear cache
    59     evict_cache_entries();
    61     var ch0 = setupChannel("/bug596443", "Response0", Ci.nsIRequest.LOAD_BYPASS_CACHE);
    62     ch0.asyncOpen(new Listener("Response0"), null);
    64     var ch1 = setupChannel("/bug596443", "Response1", Ci.nsIRequest.LOAD_BYPASS_CACHE);
    65     ch1.asyncOpen(new Listener("Response1"), null);
    67     var ch2 = setupChannel("/bug596443", "Should not be used");
    68     ch2.asyncOpen(new Listener("Response1"), null); // Note param: we expect this to come from cache
    70     do_test_pending();
    71 }
    73 function triggerHandlers() {
    74     do_timeout(100, handlers[1]);
    75     do_timeout(100, handlers[0]);
    76 }
    78 var handlers = [];
    79 function handler(metadata, response) {
    80     var func = function(body) {
    81         return function() {
    82             response.setStatusLine(metadata.httpVersion, 200, "Ok");
    83             response.setHeader("Content-Type", "text/plain", false);
    84             response.setHeader("Content-Length", "" + body.length, false);
    85             response.setHeader("Cache-Control", "max-age=600", false);
    86             response.bodyOutputStream.write(body, body.length);
    87             response.finish();
    88          }};
    90     response.processAsync();
    91     var request = metadata.getHeader("x-request");
    92     handlers.push(func(request));
    94     if (handlers.length > 1)
    95         triggerHandlers();
    96 }

mercurial