1
0
Fork 0
firefox/dom/quota/test/xpcshell/test_storagePressure.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

127 lines
3.1 KiB
JavaScript

/**
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
/**
* This test is mainly to verify that the storage pressure event is fired when
* the eviction process is not able to free some space when a quota client
* attempts to write over the global limit or when the global limit is reduced
* below the global usage.
*/
const { TestUtils } = ChromeUtils.importESModule(
"resource://testing-common/TestUtils.sys.mjs"
);
loadScript("dom/quota/test/common/file.js");
async function awaitStoragePressure() {
const [subject] = await TestUtils.topicObserved(
"QuotaManager::StoragePressure"
);
const usage = subject.QueryInterface(Ci.nsISupportsPRUint64).data;
return usage;
}
async function testSteps() {
const globalLimitKB = 2;
const principal = getPrincipal("https://example.com");
info("Setting limits");
setGlobalLimit(globalLimitKB);
info("Initializing");
let request = init();
await requestFinished(request);
info("Initializing temporary storage");
request = initTemporaryStorage();
await requestFinished(request);
info("Persisting and filling an origin");
// We need to persist the origin first to omit the group limit checks.
// Otherwise, we would have to fill five separate origins.
request = persist(principal);
await requestFinished(request);
let database = getSimpleDatabase(principal);
request = database.open("data");
await requestFinished(request);
try {
request = database.write(getBuffer(globalLimitKB * 1024));
await requestFinished(request);
ok(true, "Should not have thrown");
} catch (ex) {
ok(false, "Should not have thrown");
}
info("Testing storage pressure by writing over the global limit");
info("Storing one more byte to get the storage pressure event while writing");
let promiseStoragePressure = awaitStoragePressure();
try {
request = database.write(getBuffer(1));
await requestFinished(request);
ok(false, "Should have thrown");
} catch (e) {
ok(true, "Should have thrown");
Assert.strictEqual(
e.resultCode,
NS_ERROR_FILE_NO_DEVICE_SPACE,
"Threw right result code"
);
}
info("Checking the storage pressure event");
let usage = await promiseStoragePressure;
Assert.equal(usage, globalLimitKB * 1024, "Got correct usage");
info("Testing storage pressure by reducing the global limit");
info(
"Reducing the global limit to get the storage pressuse event while the" +
" temporary storage is being initialized"
);
setGlobalLimit(globalLimitKB - 1);
request = reset();
await requestFinished(request);
info("Initializing");
request = init();
await requestFinished(request);
promiseStoragePressure = awaitStoragePressure();
info("Initializing temporary storage");
request = initTemporaryStorage();
await requestFinished(request);
info("Checking the storage pressure event");
usage = await promiseStoragePressure;
Assert.equal(usage, globalLimitKB * 1024, "Got correct usage");
info("Resetting limits");
resetGlobalLimit();
request = reset();
await requestFinished(request);
}