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