netwerk/test/unit/test_head.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 //
     2 //  HTTP headers test
     3 //
     5 // Note: sets Cc and Ci variables
     7 Cu.import("resource://testing-common/httpd.js");
     9 XPCOMUtils.defineLazyGetter(this, "URL", function() {
    10   return "http://localhost:" + httpserver.identity.primaryPort;
    11 });
    13 var httpserver = new HttpServer();
    14 var testpath = "/simple";
    15 var httpbody = "0123456789";
    16 var channel;
    17 var ios;
    19 var dbg=0
    20 if (dbg) { print("============== START =========="); }
    22 function run_test() {
    23   setup_test();
    24   do_test_pending();
    25 }
    27 function setup_test() {
    28   if (dbg) { print("============== setup_test: in"); }
    30   httpserver.registerPathHandler(testpath, serverHandler);
    31   httpserver.start(-1);
    33   channel = setupChannel(testpath);
    35   channel.setRequestHeader("ReplaceMe", "initial value", true);
    36   var setOK = channel.getRequestHeader("ReplaceMe");
    37   do_check_eq(setOK, "initial value");
    38   channel.setRequestHeader("ReplaceMe", "replaced", false);
    39   setOK = channel.getRequestHeader("ReplaceMe");
    40   do_check_eq(setOK, "replaced");
    42   channel.setRequestHeader("MergeMe", "foo1", true);
    43   channel.setRequestHeader("MergeMe", "foo2", true);
    44   channel.setRequestHeader("MergeMe", "foo3", true);
    45   setOK = channel.getRequestHeader("MergeMe");
    46   do_check_eq(setOK, "foo1, foo2, foo3");
    48   var uri = ios.newURI("http://foo1.invalid:80", null, null);
    49   channel.referrer = uri;
    50   do_check_true(channel.referrer.equals(uri));
    51   setOK = channel.getRequestHeader("Referer");
    52   do_check_eq(setOK, "http://foo1.invalid/");
    54   uri = ios.newURI("http://foo2.invalid:90/bar", null, null);
    55   channel.referrer = uri;
    56   setOK = channel.getRequestHeader("Referer");
    57   do_check_eq(setOK, "http://foo2.invalid:90/bar");
    59   // ChannelListener defined in head_channels.js
    60   channel.asyncOpen(new ChannelListener(checkRequestResponse, channel), null);
    62   if (dbg) { print("============== setup_test: out"); }
    63 }
    65 function setupChannel(path) {
    66   ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
    67   var chan = ios.newChannel(URL + path, "", null);
    68   chan.QueryInterface(Ci.nsIHttpChannel);
    69   chan.requestMethod = "GET";
    70   return chan;
    71 }
    73 function serverHandler(metadata, response) {
    74   if (dbg) { print("============== serverHandler: in"); }
    76   var setOK = metadata.getHeader("ReplaceMe");
    77   do_check_eq(setOK, "replaced");
    78   setOK = metadata.getHeader("MergeMe");
    79   do_check_eq(setOK, "foo1, foo2, foo3");
    80   setOK = metadata.getHeader("Referer");
    81   do_check_eq(setOK, "http://foo2.invalid:90/bar");
    83   response.setHeader("Content-Type", "text/plain", false);
    84   response.setStatusLine("1.1", 200, "OK");
    86   // note: httpd.js' "Response" class uses ',' (no space) for merge.
    87   response.setHeader("httpdMerge", "bar1", false);
    88   response.setHeader("httpdMerge", "bar2", true);
    89   response.setHeader("httpdMerge", "bar3", true);
    90   // Some special headers like Proxy-Authenticate merge with \n
    91   response.setHeader("Proxy-Authenticate", "line 1", true);
    92   response.setHeader("Proxy-Authenticate", "line 2", true);
    93   response.setHeader("Proxy-Authenticate", "line 3", true);
    95   response.bodyOutputStream.write(httpbody, httpbody.length);
    97   if (dbg) { print("============== serverHandler: out"); }
    98 }
   100 function checkRequestResponse(request, data, context) {
   101   if (dbg) { print("============== checkRequestResponse: in"); }
   103   do_check_eq(channel.responseStatus, 200);
   104   do_check_eq(channel.responseStatusText, "OK");
   105   do_check_true(channel.requestSucceeded);
   107   var response = channel.getResponseHeader("httpdMerge");
   108   do_check_eq(response, "bar1,bar2,bar3");
   109   channel.setResponseHeader("httpdMerge", "bar", true);
   110   do_check_eq(channel.getResponseHeader("httpdMerge"), "bar1,bar2,bar3, bar");
   112   response = channel.getResponseHeader("Proxy-Authenticate");
   113   do_check_eq(response, "line 1\nline 2\nline 3");
   115   channel.contentCharset = "UTF-8";
   116   do_check_eq(channel.contentCharset, "UTF-8");
   117   do_check_eq(channel.contentType, "text/plain");
   118   do_check_eq(channel.contentLength, httpbody.length);
   119   do_check_eq(data, httpbody);
   121   httpserver.stop(do_test_finished);
   122   if (dbg) { print("============== checkRequestResponse: out"); }
   123 }

mercurial