michael@0: var _ios; michael@0: michael@0: var ACCESS_WRITE = Ci.nsICache.ACCESS_WRITE; michael@0: var ACCESS_READ = Ci.nsICache.ACCESS_READ; michael@0: michael@0: var KEY_CORRUPT_SECINFO = "http://corruptSecurityInfo/"; michael@0: var ENTRY_DATA = "foobar"; michael@0: michael@0: function create_scriptable_input(unscriptable_input) { michael@0: var istream = Cc["@mozilla.org/scriptableinputstream;1"]. michael@0: createInstance(Ci.nsIScriptableInputStream); michael@0: istream.init(unscriptable_input); michael@0: return istream; michael@0: } michael@0: michael@0: function write_data(entry) { michael@0: var ostream = entry.openOutputStream(0); michael@0: if (ostream.write(ENTRY_DATA, ENTRY_DATA.length) != ENTRY_DATA.length) { michael@0: do_throw("Could not write all data!"); michael@0: } michael@0: ostream.close(); michael@0: } michael@0: michael@0: function continue_failure(status, entry) { michael@0: // Make sure we couldn't open this for reading michael@0: do_check_eq(status, Cr.NS_ERROR_CACHE_KEY_NOT_FOUND); michael@0: michael@0: // Make sure the cache is empty michael@0: get_device_entry_count("disk", null, function(count, consumption) { michael@0: do_check_eq(count, 0); michael@0: do_check_eq(consumption, 0); michael@0: run_next_test(); michael@0: }); michael@0: } michael@0: michael@0: function try_read_corrupt_secinfo() { michael@0: asyncOpenCacheEntry(KEY_CORRUPT_SECINFO, michael@0: "disk", Ci.nsICacheStorage.OPEN_READONLY, null, michael@0: continue_failure); michael@0: } michael@0: michael@0: function write_corrupt_secinfo(status, entry) { michael@0: entry.setMetaDataElement("security-info", "blablabla"); michael@0: write_data(entry); michael@0: try { michael@0: entry.close(); michael@0: } catch (e) { michael@0: do_throw("Unexpected exception closing corrupt entry: " + e); michael@0: } michael@0: michael@0: try_read_corrupt_secinfo(); michael@0: } michael@0: michael@0: function test_corrupt_secinfo() { michael@0: asyncOpenCacheEntry(KEY_CORRUPT_SECINFO, michael@0: "disk", Ci.nsICacheStorage.OPEN_TRUNCATE, null, michael@0: write_corrupt_secinfo); michael@0: } michael@0: michael@0: function run_test() { michael@0: if (newCacheBackEndUsed()) { michael@0: // broken sec info should doom a cache entry (when broken sec info is written, load should fail with NOT_FOUND) michael@0: do_check_true(true, "This test doesn't run with the new cache backend, the test or the cache needs to be fixed"); michael@0: return; michael@0: } michael@0: michael@0: // Make sure we have a cache to use michael@0: do_get_profile(); michael@0: michael@0: // Make sure the cache is empty michael@0: evict_cache_entries(); michael@0: michael@0: // Add new tests at the end of this section michael@0: add_test(test_corrupt_secinfo); michael@0: michael@0: // Let's get going! michael@0: run_next_test(); michael@0: }