1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/netwerk/test/unit/test_bug561276.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,68 @@ 1.4 +// 1.5 +// Verify that we hit the net if we discover a cycle of redirects 1.6 +// coming from cache. 1.7 +// 1.8 + 1.9 +Cu.import("resource://testing-common/httpd.js"); 1.10 + 1.11 +var httpserver = new HttpServer(); 1.12 +var iteration = 0; 1.13 + 1.14 +function setupChannel(suffix) 1.15 +{ 1.16 + var ios = 1.17 + Components.classes["@mozilla.org/network/io-service;1"] 1.18 + .getService(Ci.nsIIOService); 1.19 + var chan = ios.newChannel("http://localhost:" + 1.20 + httpserver.identity.primaryPort + suffix, "", null); 1.21 + var httpChan = chan.QueryInterface(Components.interfaces.nsIHttpChannel); 1.22 + httpChan.requestMethod = "GET"; 1.23 + return httpChan; 1.24 +} 1.25 + 1.26 +function checkValueAndTrigger(request, data, ctx) 1.27 +{ 1.28 + do_check_eq("Ok", data); 1.29 + httpserver.stop(do_test_finished); 1.30 +} 1.31 + 1.32 +function run_test() 1.33 +{ 1.34 + httpserver.registerPathHandler("/redirect1", redirectHandler1); 1.35 + httpserver.registerPathHandler("/redirect2", redirectHandler2); 1.36 + httpserver.start(-1); 1.37 + 1.38 + // clear cache 1.39 + evict_cache_entries(); 1.40 + 1.41 + // load first time 1.42 + var channel = setupChannel("/redirect1"); 1.43 + channel.asyncOpen(new ChannelListener(checkValueAndTrigger, null), null); 1.44 + 1.45 + do_test_pending(); 1.46 +} 1.47 + 1.48 +function redirectHandler1(metadata, response) 1.49 +{ 1.50 + // first time we return a cacheable 302 pointing to next redirect 1.51 + if (iteration < 1) { 1.52 + response.setStatusLine(metadata.httpVersion, 302, "Found"); 1.53 + response.setHeader("Cache-Control", "max-age=600", false); 1.54 + response.setHeader("Location", "/redirect2", false); 1.55 + 1.56 + // next time called we return 200 1.57 + } else { 1.58 + response.setStatusLine(metadata.httpVersion, 200, "Ok"); 1.59 + response.setHeader("Cache-Control", "max-age=600", false); 1.60 + response.setHeader("Content-Type", "text/plain"); 1.61 + response.bodyOutputStream.write("Ok", "Ok".length); 1.62 + } 1.63 + iteration += 1; 1.64 +} 1.65 + 1.66 +function redirectHandler2(metadata, response) 1.67 +{ 1.68 + response.setStatusLine(metadata.httpVersion, 302, "Found"); 1.69 + response.setHeader("Cache-Control", "max-age=600", false); 1.70 + response.setHeader("Location", "/redirect1", false); 1.71 +}