netwerk/test/unit/test_bug484684.js

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 const URL = "ftp://localhost/bug464884/";
     3 const tests = [
     4   // standard ls unix format
     5   ["-rw-rw-r--    1 500      500             0 Jan 01  2000 file1\r\n" +
     6    "-rw-rw-r--    1 500      500             0 Jan 01  2000  file2\r\n",
     8    "300: " + URL + "\n" +
     9    "200: filename content-length last-modified file-type\n" +
    10    "201: \"file1\" 0 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n" +
    11    "201: \"%20file2\" 0 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n"],
    12   // old Hellsoft unix format
    13   ["-[RWCEMFA] supervisor         214059       Jan 01  2000    file1\r\n" +
    14    "-[RWCEMFA] supervisor         214059       Jan 01  2000     file2\r\n",
    16    "300: " + URL + "\n" +
    17    "200: filename content-length last-modified file-type\n" +
    18    "201: \"file1\" 214059 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n" +
    19    "201: \"file2\" 214059 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n"],
    20   // new Hellsoft unix format
    21   ["- [RWCEAFMS] jrd                    192 Jan 01  2000 file1\r\n"+
    22    "- [RWCEAFMS] jrd                    192 Jan 01  2000  file2\r\n",
    24    "300: " + URL + "\n" +
    25    "200: filename content-length last-modified file-type\n" +
    26    "201: \"file1\" 192 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n" +
    27    "201: \"%20file2\" 192 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n"],
    28   // DOS format with correct offsets
    29   ["01-01-00  01:00AM       <DIR>          dir1\r\n" +
    30    "01-01-00  01:00AM       <JUNCTION>     junction1 -> foo1\r\n" +
    31    "01-01-00  01:00AM                95077 file1\r\n" +
    32    "01-01-00  01:00AM       <DIR>           dir2\r\n" +
    33    "01-01-00  01:00AM       <JUNCTION>      junction2 ->  foo2\r\n" +
    34    "01-01-00  01:00AM                95077  file2\r\n",
    36    "300: " + URL + "\n" +
    37    "200: filename content-length last-modified file-type\n" +
    38    "201: \"dir1\" 0 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 DIRECTORY \n" +
    39    "201: \"junction1\"  Sun%2C%2001%20Jan%202000%2001%3A00%3A00 SYMBOLIC-LINK \n" +
    40    "201: \"file1\" 95077 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 FILE \n" +
    41    "201: \"%20dir2\" 0 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 DIRECTORY \n" +
    42    "201: \"%20junction2\"  Sun%2C%2001%20Jan%202000%2001%3A00%3A00 SYMBOLIC-LINK \n" +
    43    "201: \"%20file2\" 95077 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 FILE \n"],
    44   // DOS format with wrong offsets
    45   ["01-01-00  01:00AM       <DIR>       dir1\r\n" +
    46    "01-01-00  01:00AM     <DIR>             dir2\r\n" +
    47    "01-01-00  01:00AM   <DIR>                  dir3\r\n" +
    48    "01-01-00  01:00AM       <JUNCTION>  junction1 -> foo1\r\n" +
    49    "01-01-00  01:00AM     <JUNCTION>        junction2 ->  foo2\r\n" +
    50    "01-01-00  01:00AM   <JUNCTION>             junction3 ->  foo3\r\n" +
    51    "01-01-00  01:00AM               95077  file1\r\n" +
    52    "01-01-00  01:00AM        95077 file2\r\n",
    54    "300: " + URL + "\n" +
    55    "200: filename content-length last-modified file-type\n" +
    56    "201: \"dir1\" 0 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 DIRECTORY \n" +
    57    "201: \"dir2\" 0 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 DIRECTORY \n" +
    58    "201: \"dir3\" 0 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 DIRECTORY \n" +
    59    "201: \"junction1\"  Sun%2C%2001%20Jan%202000%2001%3A00%3A00 SYMBOLIC-LINK \n" +
    60    "201: \"junction2\"  Sun%2C%2001%20Jan%202000%2001%3A00%3A00 SYMBOLIC-LINK \n" +
    61    "201: \"junction3\"  Sun%2C%2001%20Jan%202000%2001%3A00%3A00 SYMBOLIC-LINK \n" +
    62    "201: \"file1\" 95077 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 FILE \n" +
    63    "201: \"file2\" 95077 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 FILE \n"]
    64 ]
    66 function checkData(request, data, ctx) {
    67   do_check_eq(tests[0][1], data);
    68   tests.shift();
    69   next_test();
    70 }
    72 function storeData(status, entry) {
    73   do_check_eq(status, Components.results.NS_OK);
    74   entry.setMetaDataElement("servertype", "0");
    75   var os = entry.openOutputStream(0);
    77   var written = os.write(tests[0][0], tests[0][0].length);
    78   if (written != tests[0][0].length) {
    79     do_throw("os.write has not written all data!\n" +
    80              "  Expected: " + written  + "\n" +
    81              "  Actual: " + tests[0][0].length + "\n");
    82   }
    83   os.close();
    84   entry.close();
    86   var ios = Components.classes["@mozilla.org/network/io-service;1"].
    87             getService(Components.interfaces.nsIIOService);
    88   var channel = ios.newChannel(URL, "", null);
    89   channel.asyncOpen(new ChannelListener(checkData, null, CL_ALLOW_UNKNOWN_CL), null);
    90 }
    92 function next_test() {
    93   if (tests.length == 0)
    94     do_test_finished();
    95   else {
    96     asyncOpenCacheEntry(URL,
    97                         "disk", Ci.nsICacheStorage.OPEN_NORMALLY, null,
    98                         storeData);
    99   }
   100 }
   102 function run_test() {
   103   do_execute_soon(next_test);
   104   do_test_pending();
   105 }

mercurial