/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
// Test that database connections work with sqlite encryption enabled.
"use strict";
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
Sqlite:
"resource://gre/modules/Sqlite.sys.mjs",
});
async
function removeIfExists(path) {
if (await IOUtils.exists(path)) {
await IOUtils.remove(path);
}
}
add_task(async
function testSecurityEnableEncryption() {
if (
!Services.prefs.getBoolPref(
"security.storage.encryption.sqlite.enabled",
false
)
) {
ok(
true,
"SQLite encryption disabled (landing default); skipping.");
return;
}
let profileDir = Services.dirsvc.get(
"ProfD", Ci.nsIFile).path;
// Unique DB name per task run so test-verify iterations cannot collide on
// stale -wal / -shm sidecars from a previous iteration.
let dbName = `test_encryption_connect_${Date.now()}_${Math.random()
.toString(
36)
.slice(
2,
8)}.sqlite`;
let dbPath = PathUtils.join(profileDir, dbName);
for (let suffix of [
"",
"-wal",
"-shm",
"-journal"]) {
await removeIfExists(dbPath + suffix);
}
let conn = await lazy.Sqlite.openConnection({ path: dbName });
is(conn._connectionData._open,
true,
"Connection should be open");
let res = await conn.execute(
"SELECT 1;");
is(res[
0].getResultByIndex(
0),
1,
"'SELECT 1;' should return 1");
await conn.execute(
"CREATE TABLE IF NOT EXISTS test (value TEXT);");
await conn.execute(
"INSERT INTO test (value) VALUES ('hello');");
await conn.close();
is(await IOUtils.exists(dbPath),
true, `${dbName} should exist`);
conn = await lazy.Sqlite.openConnection({ path: dbName });
res = await conn.execute(
"SELECT value FROM test;");
let values = res.map(row => row.getResultByName(
"value"));
is(values[
0],
"hello",
"Test `value` should be `'hello'`");
await conn.close();
});