1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/netwerk/test/unit/test_doomentry.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,97 @@ 1.4 +/** 1.5 + * Test for nsICacheStorage.asyncDoomURI(). 1.6 + * It tests dooming 1.7 + * - an existent inactive entry 1.8 + * - a non-existent inactive entry 1.9 + * - an existent active entry 1.10 + */ 1.11 + 1.12 +function doom(url, callback) 1.13 +{ 1.14 + get_cache_service() 1.15 + .diskCacheStorage(LoadContextInfo.default, false) 1.16 + .asyncDoomURI(createURI(url), "", { 1.17 + onCacheEntryDoomed: function(result) { 1.18 + callback(result); 1.19 + } 1.20 + }); 1.21 +} 1.22 + 1.23 +function write_and_check(str, data, len) 1.24 +{ 1.25 + var written = str.write(data, len); 1.26 + if (written != len) { 1.27 + do_throw("str.write has not written all data!\n" + 1.28 + " Expected: " + len + "\n" + 1.29 + " Actual: " + written + "\n"); 1.30 + } 1.31 +} 1.32 + 1.33 +function write_entry() 1.34 +{ 1.35 + asyncOpenCacheEntry("http://testentry/", "disk", Ci.nsICacheStorage.OPEN_TRUNCATE, null, function(status, entry) { 1.36 + write_entry_cont(entry, entry.openOutputStream(0)); 1.37 + }); 1.38 +} 1.39 + 1.40 +function write_entry_cont(entry, ostream) 1.41 +{ 1.42 + var data = "testdata"; 1.43 + write_and_check(ostream, data, data.length); 1.44 + ostream.close(); 1.45 + entry.close(); 1.46 + doom("http://testentry/", check_doom1); 1.47 +} 1.48 + 1.49 +function check_doom1(status) 1.50 +{ 1.51 + do_check_eq(status, Cr.NS_OK); 1.52 + doom("http://nonexistententry/", check_doom2); 1.53 +} 1.54 + 1.55 +function check_doom2(status) 1.56 +{ 1.57 + do_check_eq(status, Cr.NS_ERROR_NOT_AVAILABLE); 1.58 + asyncOpenCacheEntry("http://testentry/", "disk", Ci.nsICacheStorage.OPEN_TRUNCATE, null, function(status, entry) { 1.59 + write_entry2(entry, entry.openOutputStream(0)); 1.60 + }); 1.61 +} 1.62 + 1.63 +var gEntry; 1.64 +var gOstream; 1.65 +function write_entry2(entry, ostream) 1.66 +{ 1.67 + // write some data and doom the entry while it is active 1.68 + var data = "testdata"; 1.69 + write_and_check(ostream, data, data.length); 1.70 + gEntry = entry; 1.71 + gOstream = ostream; 1.72 + doom("http://testentry/", check_doom3); 1.73 +} 1.74 + 1.75 +function check_doom3(status) 1.76 +{ 1.77 + do_check_eq(status, Cr.NS_OK); 1.78 + // entry was doomed but writing should still succeed 1.79 + var data = "testdata"; 1.80 + write_and_check(gOstream, data, data.length); 1.81 + gOstream.close(); 1.82 + gEntry.close(); 1.83 + // dooming the same entry again should fail 1.84 + doom("http://testentry/", check_doom4); 1.85 +} 1.86 + 1.87 +function check_doom4(status) 1.88 +{ 1.89 + do_check_eq(status, Cr.NS_ERROR_NOT_AVAILABLE); 1.90 + do_test_finished(); 1.91 +} 1.92 + 1.93 +function run_test() { 1.94 + do_get_profile(); 1.95 + 1.96 + // clear the cache 1.97 + evict_cache_entries(); 1.98 + write_entry(); 1.99 + do_test_pending(); 1.100 +}