netwerk/test/unit/test_head.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/netwerk/test/unit/test_head.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,123 @@
     1.4 +//
     1.5 +//  HTTP headers test
     1.6 +//
     1.7 +
     1.8 +// Note: sets Cc and Ci variables
     1.9 +
    1.10 +Cu.import("resource://testing-common/httpd.js");
    1.11 +
    1.12 +XPCOMUtils.defineLazyGetter(this, "URL", function() {
    1.13 +  return "http://localhost:" + httpserver.identity.primaryPort;
    1.14 +});
    1.15 +
    1.16 +var httpserver = new HttpServer();
    1.17 +var testpath = "/simple";
    1.18 +var httpbody = "0123456789";
    1.19 +var channel;
    1.20 +var ios;
    1.21 +
    1.22 +var dbg=0
    1.23 +if (dbg) { print("============== START =========="); }
    1.24 +
    1.25 +function run_test() {
    1.26 +  setup_test();
    1.27 +  do_test_pending();
    1.28 +}
    1.29 +
    1.30 +function setup_test() {
    1.31 +  if (dbg) { print("============== setup_test: in"); }
    1.32 +
    1.33 +  httpserver.registerPathHandler(testpath, serverHandler);
    1.34 +  httpserver.start(-1);
    1.35 +
    1.36 +  channel = setupChannel(testpath);
    1.37 +
    1.38 +  channel.setRequestHeader("ReplaceMe", "initial value", true);
    1.39 +  var setOK = channel.getRequestHeader("ReplaceMe");
    1.40 +  do_check_eq(setOK, "initial value");
    1.41 +  channel.setRequestHeader("ReplaceMe", "replaced", false);
    1.42 +  setOK = channel.getRequestHeader("ReplaceMe");
    1.43 +  do_check_eq(setOK, "replaced");
    1.44 +
    1.45 +  channel.setRequestHeader("MergeMe", "foo1", true);
    1.46 +  channel.setRequestHeader("MergeMe", "foo2", true);
    1.47 +  channel.setRequestHeader("MergeMe", "foo3", true);
    1.48 +  setOK = channel.getRequestHeader("MergeMe");
    1.49 +  do_check_eq(setOK, "foo1, foo2, foo3");
    1.50 +
    1.51 +  var uri = ios.newURI("http://foo1.invalid:80", null, null);
    1.52 +  channel.referrer = uri;
    1.53 +  do_check_true(channel.referrer.equals(uri));
    1.54 +  setOK = channel.getRequestHeader("Referer");
    1.55 +  do_check_eq(setOK, "http://foo1.invalid/");
    1.56 +
    1.57 +  uri = ios.newURI("http://foo2.invalid:90/bar", null, null);
    1.58 +  channel.referrer = uri;
    1.59 +  setOK = channel.getRequestHeader("Referer");
    1.60 +  do_check_eq(setOK, "http://foo2.invalid:90/bar");
    1.61 +
    1.62 +  // ChannelListener defined in head_channels.js
    1.63 +  channel.asyncOpen(new ChannelListener(checkRequestResponse, channel), null);
    1.64 +
    1.65 +  if (dbg) { print("============== setup_test: out"); }
    1.66 +}
    1.67 +
    1.68 +function setupChannel(path) {
    1.69 +  ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
    1.70 +  var chan = ios.newChannel(URL + path, "", null);
    1.71 +  chan.QueryInterface(Ci.nsIHttpChannel);
    1.72 +  chan.requestMethod = "GET";
    1.73 +  return chan;
    1.74 +}
    1.75 +
    1.76 +function serverHandler(metadata, response) {
    1.77 +  if (dbg) { print("============== serverHandler: in"); }
    1.78 +
    1.79 +  var setOK = metadata.getHeader("ReplaceMe");
    1.80 +  do_check_eq(setOK, "replaced");
    1.81 +  setOK = metadata.getHeader("MergeMe");
    1.82 +  do_check_eq(setOK, "foo1, foo2, foo3");
    1.83 +  setOK = metadata.getHeader("Referer");
    1.84 +  do_check_eq(setOK, "http://foo2.invalid:90/bar");
    1.85 +
    1.86 +  response.setHeader("Content-Type", "text/plain", false);
    1.87 +  response.setStatusLine("1.1", 200, "OK");
    1.88 +  
    1.89 +  // note: httpd.js' "Response" class uses ',' (no space) for merge.
    1.90 +  response.setHeader("httpdMerge", "bar1", false);
    1.91 +  response.setHeader("httpdMerge", "bar2", true);
    1.92 +  response.setHeader("httpdMerge", "bar3", true);
    1.93 +  // Some special headers like Proxy-Authenticate merge with \n
    1.94 +  response.setHeader("Proxy-Authenticate", "line 1", true);
    1.95 +  response.setHeader("Proxy-Authenticate", "line 2", true);
    1.96 +  response.setHeader("Proxy-Authenticate", "line 3", true);
    1.97 +
    1.98 +  response.bodyOutputStream.write(httpbody, httpbody.length);
    1.99 +
   1.100 +  if (dbg) { print("============== serverHandler: out"); }
   1.101 +}
   1.102 +
   1.103 +function checkRequestResponse(request, data, context) {
   1.104 +  if (dbg) { print("============== checkRequestResponse: in"); }
   1.105 +
   1.106 +  do_check_eq(channel.responseStatus, 200);
   1.107 +  do_check_eq(channel.responseStatusText, "OK");
   1.108 +  do_check_true(channel.requestSucceeded);
   1.109 +
   1.110 +  var response = channel.getResponseHeader("httpdMerge");
   1.111 +  do_check_eq(response, "bar1,bar2,bar3");
   1.112 +  channel.setResponseHeader("httpdMerge", "bar", true);
   1.113 +  do_check_eq(channel.getResponseHeader("httpdMerge"), "bar1,bar2,bar3, bar");
   1.114 +
   1.115 +  response = channel.getResponseHeader("Proxy-Authenticate");
   1.116 +  do_check_eq(response, "line 1\nline 2\nline 3");
   1.117 +
   1.118 +  channel.contentCharset = "UTF-8";
   1.119 +  do_check_eq(channel.contentCharset, "UTF-8");
   1.120 +  do_check_eq(channel.contentType, "text/plain");
   1.121 +  do_check_eq(channel.contentLength, httpbody.length);
   1.122 +  do_check_eq(data, httpbody);
   1.123 +
   1.124 +  httpserver.stop(do_test_finished);
   1.125 +  if (dbg) { print("============== checkRequestResponse: out"); }
   1.126 +}

mercurial