summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/unit/test_migration_lz4compression.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/sessionstore/test/unit/test_migration_lz4compression.js')
-rw-r--r--browser/components/sessionstore/test/unit/test_migration_lz4compression.js151
1 files changed, 151 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/unit/test_migration_lz4compression.js b/browser/components/sessionstore/test/unit/test_migration_lz4compression.js
new file mode 100644
index 0000000000..4d9b700d8b
--- /dev/null
+++ b/browser/components/sessionstore/test/unit/test_migration_lz4compression.js
@@ -0,0 +1,151 @@
+"use strict";
+
+const { SessionWriter } = ChromeUtils.importESModule(
+ "resource:///modules/sessionstore/SessionWriter.sys.mjs"
+);
+
+// Make sure that we have a profile before initializing SessionFile.
+const profd = do_get_profile();
+const { SessionFile } = ChromeUtils.importESModule(
+ "resource:///modules/sessionstore/SessionFile.sys.mjs"
+);
+const Paths = SessionFile.Paths;
+
+// We need a XULAppInfo to initialize SessionFile
+const { updateAppInfo } = ChromeUtils.importESModule(
+ "resource://testing-common/AppInfo.sys.mjs"
+);
+updateAppInfo({
+ name: "SessionRestoreTest",
+ ID: "{230de50e-4cd1-11dc-8314-0800200c9a66}",
+ version: "1",
+ platformVersion: "",
+});
+
+function promise_check_exist(path, shouldExist) {
+ return (async function () {
+ info(
+ "Ensuring that " + path + (shouldExist ? " exists" : " does not exist")
+ );
+ if ((await IOUtils.exists(path)) != shouldExist) {
+ throw new Error(
+ "File " + path + " should " + (shouldExist ? "exist" : "not exist")
+ );
+ }
+ })();
+}
+
+function promise_check_contents(path, expect) {
+ return (async function () {
+ info("Checking whether " + path + " has the right contents");
+ let actual = await IOUtils.readJSON(path, {
+ decompress: true,
+ });
+ Assert.deepEqual(
+ actual,
+ expect,
+ `File ${path} contains the expected data.`
+ );
+ })();
+}
+
+// Check whether the migration from .js to .jslz4 is correct.
+add_task(async function test_migration() {
+ let source = do_get_file("data/sessionstore_valid.js");
+ source.copyTo(profd, "sessionstore.js");
+
+ // Read the content of the session store file.
+ let parsed = await IOUtils.readJSON(Paths.clean.replace("jsonlz4", "js"));
+
+ // Read the session file with .js extension.
+ let result = await SessionFile.read();
+
+ // Check whether the result is what we wanted.
+ equal(result.origin, "clean");
+ equal(result.useOldExtension, true);
+ Assert.deepEqual(
+ result.parsed,
+ parsed,
+ "result.parsed contains expected data"
+ );
+
+ // Initiate a write to ensure we write the compressed version.
+ await SessionFile.write(parsed);
+ await promise_check_exist(Paths.backups, true);
+ await promise_check_exist(Paths.clean, false);
+ await promise_check_exist(Paths.cleanBackup, true);
+ await promise_check_exist(Paths.recovery, true);
+ await promise_check_exist(Paths.recoveryBackup, false);
+ await promise_check_exist(Paths.nextUpgradeBackup, true);
+ // The deprecated $Path.clean should exist.
+ await promise_check_exist(Paths.clean.replace("jsonlz4", "js"), true);
+
+ await promise_check_contents(Paths.recovery, parsed);
+});
+
+add_task(async function test_startup_with_compressed_clean() {
+ let state = { windows: [] };
+
+ // Mare sure we have an empty profile dir.
+ await SessionFile.wipe();
+
+ // Populate session files to profile dir.
+ await IOUtils.writeJSON(Paths.clean, state, {
+ compress: true,
+ });
+ await IOUtils.makeDirectory(Paths.backups);
+ await IOUtils.writeJSON(Paths.cleanBackup, state, {
+ compress: true,
+ });
+
+ // Initiate a read.
+ let result = await SessionFile.read();
+
+ // Make sure we read correct session file and its content.
+ equal(result.origin, "clean");
+ equal(result.useOldExtension, false);
+ Assert.deepEqual(
+ state,
+ result.parsed,
+ "result.parsed contains expected data"
+ );
+});
+
+add_task(async function test_empty_profile_dir() {
+ // Make sure that we have empty profile dir.
+ await SessionFile.wipe();
+ await promise_check_exist(Paths.backups, false);
+ await promise_check_exist(Paths.clean, false);
+ await promise_check_exist(Paths.cleanBackup, false);
+ await promise_check_exist(Paths.recovery, false);
+ await promise_check_exist(Paths.recoveryBackup, false);
+ await promise_check_exist(Paths.nextUpgradeBackup, false);
+ await promise_check_exist(Paths.backups.replace("jsonlz4", "js"), false);
+ await promise_check_exist(Paths.clean.replace("jsonlz4", "js"), false);
+ await promise_check_exist(Paths.cleanBackup.replace("lz4", ""), false);
+ await promise_check_exist(Paths.recovery.replace("jsonlz4", "js"), false);
+ await promise_check_exist(
+ Paths.recoveryBackup.replace("jsonlz4", "js"),
+ false
+ );
+ await promise_check_exist(
+ Paths.nextUpgradeBackup.replace("jsonlz4", "js"),
+ false
+ );
+
+ // Initiate a read and make sure that we are in empty state.
+ let result = await SessionFile.read();
+ equal(result.origin, "empty");
+ equal(result.noFilesFound, true);
+
+ // Create a state to store.
+ let state = { windows: [] };
+ await SessionWriter.write(state, { isFinalWrite: true });
+
+ // Check session files are created, but not deprecated ones.
+ await promise_check_exist(Paths.clean, true);
+ await promise_check_exist(Paths.clean.replace("jsonlz4", "js"), false);
+
+ // Check session file' content is correct.
+ await promise_check_contents(Paths.clean, state);
+});