diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:13:27 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:13:27 +0000 |
commit | 40a355a42d4a9444dc753c04c6608dade2f06a23 (patch) | |
tree | 871fc667d2de662f171103ce5ec067014ef85e61 /toolkit/components/kvstore/test/xpcshell/test_kvstore.js | |
parent | Adding upstream version 124.0.1. (diff) | |
download | firefox-adbda400be353e676059e335c3c0aaf99e719475.tar.xz firefox-adbda400be353e676059e335c3c0aaf99e719475.zip |
Adding upstream version 125.0.1.upstream/125.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/kvstore/test/xpcshell/test_kvstore.js')
-rw-r--r-- | toolkit/components/kvstore/test/xpcshell/test_kvstore.js | 74 |
1 files changed, 73 insertions, 1 deletions
diff --git a/toolkit/components/kvstore/test/xpcshell/test_kvstore.js b/toolkit/components/kvstore/test/xpcshell/test_kvstore.js index 363feaa43a..4c591622e1 100644 --- a/toolkit/components/kvstore/test/xpcshell/test_kvstore.js +++ b/toolkit/components/kvstore/test/xpcshell/test_kvstore.js @@ -12,9 +12,16 @@ function run_test() { run_next_test(); } -async function makeDatabaseDir(name) { +async function makeDatabaseDir(name, { mockCorrupted = false } = {}) { const databaseDir = PathUtils.join(PathUtils.profileDir, name); await IOUtils.makeDirectory(databaseDir); + if (mockCorrupted) { + // Mock a corrupted db. + await IOUtils.write( + PathUtils.join(databaseDir, "data.safe.bin"), + new Uint8Array([0x00, 0x00, 0x00, 0x00]) + ); + } return databaseDir; } @@ -26,6 +33,71 @@ add_task(async function getService() { Assert.ok(gKeyValueService); }); +add_task(async function getOrCreate_defaultRecoveryStrategyError() { + const databaseDir = await makeDatabaseDir("getOrCreate_Error", { + mockCorrupted: true, + }); + + await Assert.rejects( + KeyValueService.getOrCreate(databaseDir, "db"), + /FileInvalid/ + ); +}); + +add_task(async function getOrCreateWithOptions_RecoveryStrategyError() { + const databaseDir = await makeDatabaseDir("getOrCreateWithOptions_Error", { + mockCorrupted: true, + }); + + await Assert.rejects( + KeyValueService.getOrCreateWithOptions(databaseDir, "db", { + strategy: KeyValueService.RecoveryStrategy.ERROR, + }), + /FileInvalid/ + ); +}); + +add_task(async function getOrCreateWithOptions_RecoveryStrategyRename() { + const databaseDir = await makeDatabaseDir("getOrCreateWithOptions_Rename", { + mockCorrupted: true, + }); + + const database = await KeyValueService.getOrCreateWithOptions( + databaseDir, + "db", + { + strategy: KeyValueService.RecoveryStrategy.RENAME, + } + ); + Assert.ok(database); + + Assert.ok( + await IOUtils.exists(PathUtils.join(databaseDir, "data.safe.bin.corrupt")), + "Expect corrupt file to be found" + ); +}); + +add_task(async function getOrCreateWithOptions_RecoveryStrategyDiscard() { + const databaseDir = await makeDatabaseDir("getOrCreateWithOptions_Discard", { + mockCorrupted: true, + }); + + const database = await KeyValueService.getOrCreateWithOptions( + databaseDir, + "db", + { + strategy: KeyValueService.RecoveryStrategy.DISCARD, + } + ); + Assert.ok(database); + + Assert.equal( + await IOUtils.exists(PathUtils.join(databaseDir, "data.safe.bin.corrupt")), + false, + "Expect corrupt file to not exist" + ); +}); + add_task(async function getOrCreate() { const databaseDir = await makeDatabaseDir("getOrCreate"); const database = await KeyValueService.getOrCreate(databaseDir, "db"); |