netwerk/test/unit/test_bug561276.js

changeset 0
6474c204b198
     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 +}

mercurial