diff options
Diffstat (limited to 'netwerk/test/unit/test_bug654926_doom_and_read.js')
-rw-r--r-- | netwerk/test/unit/test_bug654926_doom_and_read.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/netwerk/test/unit/test_bug654926_doom_and_read.js b/netwerk/test/unit/test_bug654926_doom_and_read.js new file mode 100644 index 000000000..74c9f66c0 --- /dev/null +++ b/netwerk/test/unit/test_bug654926_doom_and_read.js @@ -0,0 +1,77 @@ +function gen_1MiB() +{ + var i; + var data="x"; + for (i=0 ; i < 20 ; i++) + data+=data; + return data; +} + +function write_and_check(str, data, len) +{ + var written = str.write(data, len); + if (written != len) { + do_throw("str.write has not written all data!\n" + + " Expected: " + len + "\n" + + " Actual: " + written + "\n"); + } +} + +function make_input_stream_scriptable(input) { + var wrapper = Cc["@mozilla.org/scriptableinputstream;1"]. + createInstance(Ci.nsIScriptableInputStream); + wrapper.init(input); + return wrapper; +} + +function write_datafile(status, entry) +{ + do_check_eq(status, Cr.NS_OK); + var os = entry.openOutputStream(0); + var data = gen_1MiB(); + + write_and_check(os, data, data.length); + + os.close(); + entry.close(); + + // open, doom, append, read + asyncOpenCacheEntry("http://data/", + "disk", Ci.nsICacheStorage.OPEN_NORMALLY, null, + test_read_after_doom); + +} + +function test_read_after_doom(status, entry) +{ + do_check_eq(status, Cr.NS_OK); + var os = entry.openOutputStream(entry.dataSize); + var data = gen_1MiB(); + + entry.asyncDoom(null); + write_and_check(os, data, data.length); + + os.close(); + + var is = entry.openInputStream(0); + pumpReadStream(is, function(read) { + do_check_eq(read.length, 2*1024*1024); + is.close(); + + entry.close(); + do_test_finished(); + }); +} + +function run_test() { + do_get_profile(); + + // clear the cache + evict_cache_entries(); + + asyncOpenCacheEntry("http://data/", + "disk", Ci.nsICacheStorage.OPEN_NORMALLY, null, + write_datafile); + + do_test_pending(); +} |