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 +}