mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-07 09:54:42 +00:00
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:
parent
c994e030b2
commit
f2aee4b5a8
7
dom/cache/test/xpcshell/head.js
vendored
7
dom/cache/test/xpcshell/head.js
vendored
@ -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);
|
||||
}
|
||||
|
48
dom/cache/test/xpcshell/test_originInit.js
vendored
48
dom/cache/test/xpcshell/test_originInit.js
vendored
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user