tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });