|
1 function gen_1MiB() |
|
2 { |
|
3 var i; |
|
4 var data="x"; |
|
5 for (i=0 ; i < 20 ; i++) |
|
6 data+=data; |
|
7 return data; |
|
8 } |
|
9 |
|
10 function write_and_check(str, data, len) |
|
11 { |
|
12 var written = str.write(data, len); |
|
13 if (written != len) { |
|
14 do_throw("str.write has not written all data!\n" + |
|
15 " Expected: " + len + "\n" + |
|
16 " Actual: " + written + "\n"); |
|
17 } |
|
18 } |
|
19 |
|
20 function make_input_stream_scriptable(input) { |
|
21 var wrapper = Cc["@mozilla.org/scriptableinputstream;1"]. |
|
22 createInstance(Ci.nsIScriptableInputStream); |
|
23 wrapper.init(input); |
|
24 return wrapper; |
|
25 } |
|
26 |
|
27 function write_datafile(status, entry) |
|
28 { |
|
29 do_check_eq(status, Cr.NS_OK); |
|
30 var os = entry.openOutputStream(0); |
|
31 var data = gen_1MiB(); |
|
32 |
|
33 write_and_check(os, data, data.length); |
|
34 |
|
35 os.close(); |
|
36 entry.close(); |
|
37 |
|
38 // open, doom, append, read |
|
39 asyncOpenCacheEntry("http://data/", |
|
40 "disk", Ci.nsICacheStorage.OPEN_NORMALLY, null, |
|
41 test_read_after_doom); |
|
42 |
|
43 } |
|
44 |
|
45 function test_read_after_doom(status, entry) |
|
46 { |
|
47 do_check_eq(status, Cr.NS_OK); |
|
48 var os = entry.openOutputStream(entry.dataSize); |
|
49 var data = gen_1MiB(); |
|
50 |
|
51 entry.asyncDoom(null); |
|
52 write_and_check(os, data, data.length); |
|
53 |
|
54 os.close(); |
|
55 |
|
56 var is = entry.openInputStream(0); |
|
57 pumpReadStream(is, function(read) { |
|
58 do_check_eq(read.length, 2*1024*1024); |
|
59 is.close(); |
|
60 |
|
61 entry.close(); |
|
62 do_test_finished(); |
|
63 }); |
|
64 } |
|
65 |
|
66 function run_test() { |
|
67 do_get_profile(); |
|
68 |
|
69 // clear the cache |
|
70 evict_cache_entries(); |
|
71 |
|
72 asyncOpenCacheEntry("http://data/", |
|
73 "disk", Ci.nsICacheStorage.OPEN_NORMALLY, null, |
|
74 write_datafile); |
|
75 |
|
76 do_test_pending(); |
|
77 } |