netwerk/test/unit/test_headers.js

Thu, 15 Jan 2015 15:55:04 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:55:04 +0100
branch
TOR_BUG_9701
changeset 9
a63d609f5ebe
permissions
-rw-r--r--

Back out 97036ab72558 which inappropriately compared turds to third parties.

     1 //
     2 //  cleaner HTTP header test infrastructure
     3 //
     4 //  tests bugs:  589292, [add more here: see hg log for definitive list]
     5 //
     6 //  TO ADD NEW TESTS:
     7 //  1) Increment up 'lastTest' to new number (say, "99")
     8 //  2) Add new test 'handler99' and 'completeTest99' functions.
     9 //  3) If your test should fail the necko channel, set 
    10 //     test_flags[99] = CL_EXPECT_FAILURE.   
    11 //
    12 // TO DEBUG JUST ONE TEST: temporarily change firstTest and lastTest to equal
    13 //                         the test # you're interested in.
    14 //
    15 //  For tests that need duplicate copies of headers to be sent, see
    16 //  test_duplicate_headers.js
    18 var firstTest = 1;   // set to test of interest when debugging
    19 var lastTest = 4;    // set to test of interest when debugging
    20 ////////////////////////////////////////////////////////////////////////////////
    22 // Note: sets Cc and Ci variables
    24 Cu.import("resource://testing-common/httpd.js");
    26 XPCOMUtils.defineLazyGetter(this, "URL", function() {
    27   return "http://localhost:" + httpserver.identity.primaryPort;
    28 });
    30 var httpserver = new HttpServer();
    31 var index = 0;
    32 var nextTest = firstTest;
    33 var test_flags = new Array();
    34 var testPathBase = "/test_headers";
    36 function run_test()
    37 {
    38   httpserver.start(-1);
    40   do_test_pending();
    41   run_test_number(nextTest);
    42 }
    44 function runNextTest()
    45 {
    46   if (nextTest == lastTest) {
    47     endTests();
    48     return;
    49   }
    50   nextTest++;
    51   // Make sure test functions exist
    52   if (eval("handler" + nextTest) == undefined)
    53     do_throw("handler" + nextTest + " undefined!");
    54   if (eval("completeTest" + nextTest) == undefined)
    55     do_throw("completeTest" + nextTest + " undefined!");
    57   run_test_number(nextTest);
    58 }
    60 function run_test_number(num)
    61 {
    62   testPath = testPathBase + num;
    63   httpserver.registerPathHandler(testPath, eval("handler" + num));
    65   var channel = setupChannel(testPath);
    66   flags = test_flags[num];   // OK if flags undefined for test
    67   channel.asyncOpen(new ChannelListener(eval("completeTest" + num),
    68                                         channel, flags), null);
    69 }
    71 function setupChannel(url)
    72 {
    73   var ios = Components.classes["@mozilla.org/network/io-service;1"].
    74                        getService(Ci.nsIIOService);
    75   var chan = ios.newChannel(URL + url, "", null);
    76   var httpChan = chan.QueryInterface(Components.interfaces.nsIHttpChannel);
    77   return httpChan;
    78 }
    80 function endTests()
    81 {
    82   httpserver.stop(do_test_finished);
    83 }
    85 ////////////////////////////////////////////////////////////////////////////////
    86 // Test 1: test Content-Disposition channel attributes
    87 function handler1(metadata, response)
    88 {
    89   response.setStatusLine(metadata.httpVersion, 200, "OK");
    90   response.setHeader("Content-Disposition", "attachment; filename=foo");
    91   response.setHeader("Content-Type", "text/plain", false);
    92   var body = "foo";
    93 }
    95 function completeTest1(request, data, ctx)
    96 {
    97   try {
    98     var chan = request.QueryInterface(Ci.nsIChannel);
    99     do_check_eq(chan.contentDisposition, chan.DISPOSITION_ATTACHMENT);
   100     do_check_eq(chan.contentDispositionFilename, "foo");
   101     do_check_eq(chan.contentDispositionHeader, "attachment; filename=foo");
   102   } catch (ex) {
   103     do_throw("error parsing Content-Disposition: " + ex);
   104   }
   105   runNextTest();  
   106 }
   108 ////////////////////////////////////////////////////////////////////////////////
   109 // Test 2: no filename 
   110 function handler2(metadata, response)
   111 {
   112   response.setStatusLine(metadata.httpVersion, 200, "OK");
   113   response.setHeader("Content-Type", "text/plain", false);
   114   response.setHeader("Content-Disposition", "attachment");
   115   var body = "foo";
   116   response.bodyOutputStream.write(body, body.length);
   117 }
   119 function completeTest2(request, data, ctx)
   120 {
   121   try {
   122     var chan = request.QueryInterface(Ci.nsIChannel);
   123     do_check_eq(chan.contentDisposition, chan.DISPOSITION_ATTACHMENT);
   124     do_check_eq(chan.contentDispositionHeader, "attachment");
   126     filename = chan.contentDispositionFilename;  // should barf
   127     do_throw("Should have failed getting Content-Disposition filename");
   128   } catch (ex) {
   129     do_print("correctly ate exception");    
   130   }
   131   runNextTest();  
   132 }
   134 ////////////////////////////////////////////////////////////////////////////////
   135 // Test 3: filename missing
   136 function handler3(metadata, response)
   137 {
   138   response.setStatusLine(metadata.httpVersion, 200, "OK");
   139   response.setHeader("Content-Type", "text/plain", false);
   140   response.setHeader("Content-Disposition", "attachment; filename=");
   141   var body = "foo";
   142   response.bodyOutputStream.write(body, body.length);
   143 }
   145 function completeTest3(request, data, ctx)
   146 {
   147   try {
   148     var chan = request.QueryInterface(Ci.nsIChannel);
   149     do_check_eq(chan.contentDisposition, chan.DISPOSITION_ATTACHMENT);
   150     do_check_eq(chan.contentDispositionHeader, "attachment; filename=");
   152     filename = chan.contentDispositionFilename;  // should barf
   153     do_throw("Should have failed getting Content-Disposition filename");
   154   } catch (ex) {
   155     do_print("correctly ate exception");    
   156   }
   157   runNextTest();  
   158 }
   160 ////////////////////////////////////////////////////////////////////////////////
   161 // Test 4: inline
   162 function handler4(metadata, response)
   163 {
   164   response.setStatusLine(metadata.httpVersion, 200, "OK");
   165   response.setHeader("Content-Type", "text/plain", false);
   166   response.setHeader("Content-Disposition", "inline");
   167   var body = "foo";
   168   response.bodyOutputStream.write(body, body.length);
   169 }
   171 function completeTest4(request, data, ctx)
   172 {
   173   try {
   174     var chan = request.QueryInterface(Ci.nsIChannel);
   175     do_check_eq(chan.contentDisposition, chan.DISPOSITION_INLINE);
   176     do_check_eq(chan.contentDispositionHeader, "inline");
   178     filename = chan.contentDispositionFilename;  // should barf
   179     do_throw("Should have failed getting Content-Disposition filename");
   180   } catch (ex) {
   181     do_print("correctly ate exception");    
   182   }
   183   runNextTest();
   184 }

mercurial