test_empty_directories.js (2127B)
1 /** 2 * This test is mainly to verify cache won't leave emptry directory. 3 */ 4 5 function resetStorage() { 6 return new Promise(function (resolve) { 7 var qms = Services.qms; 8 var request = qms.reset(); 9 request.callback = resolve; 10 }); 11 } 12 13 async function setUpEnv() { 14 Services.prefs.setBoolPref("dom.quotaManager.testing", true); 15 16 // We need this for generating the basic profile path 17 create_test_profile("schema_25_profile.zip"); 18 19 // Trigger storage upgrade 20 await caches.open("test"); 21 const cacheDir = getCacheDir(); 22 let morgueDir = cacheDir.clone(); 23 morgueDir.append("morgue"); 24 25 // clean the cache directoy 26 for (let dir of morgueDir.directoryEntries) { 27 for (let file of dir.directoryEntries) { 28 file.remove(false); 29 } 30 } 31 32 await resetStorage(); 33 } 34 35 // This function ensure the directory with file shouldn't have been deleted and 36 // ensure the directory without file should've been deleted. 37 function verifyResult() { 38 const cacheDir = getCacheDir(); 39 let morgueDir = cacheDir.clone(); 40 morgueDir.append("morgue"); 41 42 let foundEmpty = false; 43 for (let dir of morgueDir.directoryEntries) { 44 let empty = true; 45 // eslint-disable-next-line no-unused-vars 46 for (let file of dir.directoryEntries) { 47 empty = false; 48 } 49 50 foundEmpty = foundEmpty || empty; 51 } 52 return !foundEmpty; 53 } 54 55 add_task(async function testSteps() { 56 const url = "https://www.mozilla.org"; 57 58 info("Setting up environment"); 59 60 await setUpEnv(); 61 62 info("Test 0 - Upgrade from 25 to 26"); 63 64 let cache = await caches.open("test"); 65 let response = await cache.match(url); 66 ok(!!response, "Upgrade from 25 to 26 do succeed"); 67 68 info("Test 1 - DeleteOrphanedBodyFiles shouldn't leave an empty directoy"); 69 70 await cache.put(url, response.clone()); 71 // eslint-disable-next-line no-unused-vars 72 let r = await cache.match(url); 73 await cache.delete(url); 74 await resetStorage(); 75 76 cache = await caches.open("test"); 77 78 // Extra operation to ensure the deletion is completed 79 await cache.match(url); 80 81 ok(verifyResult(), "Empty directory should be removed"); 82 83 await caches.delete("test"); 84 });