1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/netwerk/test/unit/test_bug510359.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,77 @@ 1.4 +Cu.import("resource://testing-common/httpd.js"); 1.5 + 1.6 +var httpserver = new HttpServer(); 1.7 +var index = 0; 1.8 +var tests = [ 1.9 + { url : "/bug510359", server : "0", expected : "0"}, 1.10 + { url : "/bug510359", server : "1", expected : "1"}, 1.11 +]; 1.12 + 1.13 +function setupChannel(suffix, value) { 1.14 + var ios = Components.classes["@mozilla.org/network/io-service;1"] 1.15 + .getService(Ci.nsIIOService); 1.16 + var chan = ios.newChannel("http://localhost:" + 1.17 + httpserver.identity.primaryPort + 1.18 + suffix, "", null); 1.19 + var httpChan = chan.QueryInterface(Components.interfaces.nsIHttpChannel); 1.20 + httpChan.requestMethod = "GET"; 1.21 + httpChan.setRequestHeader("x-request", value, false); 1.22 + httpChan.setRequestHeader("Cookie", "c="+value, false); 1.23 + return httpChan; 1.24 +} 1.25 + 1.26 +function triggerNextTest() { 1.27 + var channel = setupChannel(tests[index].url, tests[index].server); 1.28 + channel.asyncOpen(new ChannelListener(checkValueAndTrigger, null), null); 1.29 +} 1.30 + 1.31 +function checkValueAndTrigger(request, data, ctx) { 1.32 + do_check_eq(tests[index].expected, data); 1.33 + 1.34 + if (index < tests.length - 1) { 1.35 + index++; 1.36 + triggerNextTest(); 1.37 + } else { 1.38 + httpserver.stop(do_test_finished); 1.39 + } 1.40 +} 1.41 + 1.42 +function run_test() { 1.43 + httpserver.registerPathHandler("/bug510359", handler); 1.44 + httpserver.start(-1); 1.45 + 1.46 + // clear cache 1.47 + evict_cache_entries(); 1.48 + 1.49 + triggerNextTest(); 1.50 + 1.51 + do_test_pending(); 1.52 +} 1.53 + 1.54 +function handler(metadata, response) { 1.55 + try { 1.56 + var IMS = metadata.getHeader("If-Modified-Since"); 1.57 + response.setStatusLine(metadata.httpVersion, 500, "Failed"); 1.58 + var msg = "Client should not set If-Modified-Since header"; 1.59 + response.bodyOutputStream.write(msg, msg.length); 1.60 + } catch(ex) { 1.61 + response.setStatusLine(metadata.httpVersion, 200, "Ok"); 1.62 + response.setHeader("Content-Type", "text/plain", false); 1.63 + response.setHeader("Last-Modified", getDateString(-1), false); 1.64 + response.setHeader("Vary", "Cookie", false); 1.65 + var body = metadata.getHeader("x-request"); 1.66 + response.bodyOutputStream.write(body, body.length); 1.67 + } 1.68 +} 1.69 + 1.70 +function getDateString(yearDelta) { 1.71 + var months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 1.72 + 'Sep', 'Oct', 'Nov', 'Dec' ]; 1.73 + var days = [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ]; 1.74 + 1.75 + var d = new Date(); 1.76 + return days[d.getUTCDay()] + ", " + d.getUTCDate() + " " 1.77 + + months[d.getUTCMonth()] + " " + (d.getUTCFullYear() + yearDelta) 1.78 + + " " + d.getUTCHours() + ":" + d.getUTCMinutes() + ":" 1.79 + + d.getUTCSeconds() + " UTC"; 1.80 +}