Bug 1648399 - Add test cases to ensure that a cache/ls directory in permanent origin directory shouldn't cause storage init to fail; r=dom-workers-and-storage-reviewers,sg,janv

Depends on D80824

Differential Revision: https://phabricator.services.mozilla.com/D81680
This commit is contained in:
Tom Tung 2021-04-16 01:09:10 +00:00
parent c994e030b2
commit f2aee4b5a8
4 changed files with 112 additions and 4 deletions

View File

@ -15,7 +15,10 @@ const NS_APP_USER_PROFILE_50_DIR = "ProfD";
const osWindowsName = "WINNT";
const pathDelimiter = "/";
const persistentPersistence = "persistent";
const storageDirName = "storage";
const persistentPersistenceDirName = "permanent";
const defaultPersistenceDirName = "default";
function cacheClientDirName() {
@ -86,6 +89,10 @@ function initTemporaryStorage() {
return Services.qms.initTemporaryStorage();
}
function initPersistentOrigin(principal) {
return Services.qms.initializePersistentOrigin(principal);
}
function initTemporaryOrigin(principal) {
return Services.qms.initializeTemporaryOrigin("default", principal);
}

View File

@ -31,6 +31,11 @@ async function testSteps() {
`${basePath}/${originDirName}/${cacheClientDirName()}/morgue`
);
const persistentCacheDir = getRelativeFile(
`${storageDirName}/${persistentPersistenceDirName}/${originDirName}/` +
`${cacheClientDirName()}`
);
async function createNormalCacheOrigin() {
async function sandboxScript() {
const cache = await caches.open("myCache");
@ -70,6 +75,10 @@ async function testSteps() {
file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0o644);
}
function createEmptyDirectory(dir) {
dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0o0755);
}
function checkFiles(
expectCachesDatabase,
expectPaddingFile,
@ -163,6 +172,25 @@ async function testSteps() {
await requestFinished(request);
}
async function initPersistentTestOrigin() {
let request = initStorage();
await requestFinished(request);
request = initTemporaryStorage();
await requestFinished(request);
request = initPersistentOrigin(principal);
await requestFinished(request);
}
async function clearPersistentTestOrigin() {
let request = Services.qms.clearStoragesForPrincipal(
principal,
persistentPersistence
);
await requestFinished(request);
}
// Test all possible combinations.
for (let createCachesDatabase of [false, true]) {
for (let createPaddingFile of [false, true]) {
@ -178,4 +206,24 @@ async function testSteps() {
}
}
}
async function testPermanentCacheDir() {
info(
`Testing InitializeOrigin doesn't fail when there is a cache ` +
`directory in the ${persistentPersistenceDirName} repository`
);
createEmptyDirectory(persistentCacheDir);
await initPersistentTestOrigin();
ok(
true,
"A persistent cache directory didn't cause InitializeOrigin to fail"
);
await clearPersistentTestOrigin();
}
await testPermanentCacheDir();
}

View File

@ -115,6 +115,10 @@ function initTemporaryStorage() {
return Services.qms.initTemporaryStorage();
}
function initPersistentOrigin(principal) {
return Services.qms.initializePersistentOrigin(principal);
}
function initTemporaryOrigin(persistence, principal) {
return Services.qms.initializeTemporaryOrigin(persistence, principal);
}

View File

@ -4,18 +4,34 @@
*/
async function testSteps() {
const storageDirName = "storage";
const persistenceTypeDefaultDirName = "default";
const persistenceTypePersistentDirName = "permanent";
const principal = getPrincipal("http://example.com");
const originDirName = "http+++example.com";
const clientLSDirName = "ls";
const dataFile = getRelativeFile(
"storage/default/http+++example.com/ls/data.sqlite"
`${storageDirName}/${persistenceTypeDefaultDirName}/${originDirName}/` +
`${clientLSDirName}/data.sqlite`
);
const usageJournalFile = getRelativeFile(
"storage/default/http+++example.com/ls/usage-journal"
`${storageDirName}/${persistenceTypeDefaultDirName}/${originDirName}/` +
`${clientLSDirName}/usage-journal`
);
const usageFile = getRelativeFile(
"storage/default/http+++example.com/ls/usage"
`${storageDirName}/${persistenceTypeDefaultDirName}/${originDirName}/` +
`${clientLSDirName}/usage`
);
const persistentLSDir = getRelativeFile(
`${storageDirName}/${persistenceTypePersistentDirName}/${originDirName}/` +
`${clientLSDirName}`
);
const data = {};
@ -39,7 +55,11 @@ async function testSteps() {
}
function createEmptyFile(file) {
file.create(Ci.nsIFile.NORMAL_FILE_TYPE, parseInt("0644", 8));
file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0o0644);
}
function createEmptyDirectory(dir) {
dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0o0755);
}
function getBinaryOutputStream(file) {
@ -95,6 +115,25 @@ async function testSteps() {
await requestFinished(request);
}
async function initPersistentTestOrigin() {
let request = initStorage();
await requestFinished(request);
request = initTemporaryStorage();
await requestFinished(request);
request = initPersistentOrigin(principal);
await requestFinished(request);
}
async function clearPersistentTestOrigin() {
let request = Services.qms.clearStoragesForPrincipal(
principal,
"persistent"
);
await requestFinished(request);
}
info("Setting prefs");
Services.prefs.setBoolPref("dom.storage.next_gen", true);
@ -299,4 +338,14 @@ async function testSteps() {
await checkFiles(/* wantData */ true, /* wantUsage */ true);
await clearTestOrigin();
info("Stage 12 - any ls directory in permanent repository exists");
await createEmptyDirectory(persistentLSDir);
await initPersistentTestOrigin();
await clearPersistentTestOrigin();
ok(true, "A persistent ls directory didn't cause InitializeOrigin to fail");
}