summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/bookmarks/test_1016953-renaming-uncompressed.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/places/tests/bookmarks/test_1016953-renaming-uncompressed.js')
-rw-r--r--toolkit/components/places/tests/bookmarks/test_1016953-renaming-uncompressed.js103
1 files changed, 103 insertions, 0 deletions
diff --git a/toolkit/components/places/tests/bookmarks/test_1016953-renaming-uncompressed.js b/toolkit/components/places/tests/bookmarks/test_1016953-renaming-uncompressed.js
new file mode 100644
index 000000000..b6982987b
--- /dev/null
+++ b/toolkit/components/places/tests/bookmarks/test_1016953-renaming-uncompressed.js
@@ -0,0 +1,103 @@
+function run_test() {
+ run_next_test();
+}
+
+/* Bug 1016953 - When a previous bookmark backup exists with the same hash
+regardless of date, an automatic backup should attempt to either rename it to
+today's date if the backup was for an old date or leave it alone if it was for
+the same date. However if the file ext was json it will accidentally rename it
+to jsonlz4 while keeping the json contents
+*/
+
+add_task(function* test_same_date_same_hash() {
+ // If old file has been created on the same date and has the same hash
+ // the file should be left alone
+ let backupFolder = yield PlacesBackups.getBackupFolder();
+ // Save to profile dir to obtain hash and nodeCount to append to filename
+ let tempPath = OS.Path.join(OS.Constants.Path.profileDir,
+ "bug10169583_bookmarks.json");
+ let {count, hash} = yield BookmarkJSONUtils.exportToFile(tempPath);
+
+ // Save JSON file in backup folder with hash appended
+ let dateObj = new Date();
+ let filename = "bookmarks-" + PlacesBackups.toISODateString(dateObj) + "_" +
+ count + "_" + hash + ".json";
+ let backupFile = OS.Path.join(backupFolder, filename);
+ yield OS.File.move(tempPath, backupFile);
+
+ // Force a compressed backup which fallbacks to rename
+ yield PlacesBackups.create();
+ let mostRecentBackupFile = yield PlacesBackups.getMostRecentBackup();
+ // check to ensure not renamed to jsonlz4
+ Assert.equal(mostRecentBackupFile, backupFile);
+ // inspect contents and check if valid json
+ let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
+ createInstance(Ci.nsIScriptableUnicodeConverter);
+ converter.charset = "UTF-8";
+ let result = yield OS.File.read(mostRecentBackupFile);
+ let jsonString = converter.convertFromByteArray(result, result.length);
+ do_print("Check is valid JSON");
+ JSON.parse(jsonString);
+
+ // Cleanup
+ yield OS.File.remove(backupFile);
+ yield OS.File.remove(tempPath);
+ PlacesBackups._backupFiles = null; // To force re-cache of backupFiles
+});
+
+add_task(function* test_same_date_diff_hash() {
+ // If the old file has been created on the same date, but has a different hash
+ // the existing file should be overwritten with the newer compressed version
+ let backupFolder = yield PlacesBackups.getBackupFolder();
+ let tempPath = OS.Path.join(OS.Constants.Path.profileDir,
+ "bug10169583_bookmarks.json");
+ let {count} = yield BookmarkJSONUtils.exportToFile(tempPath);
+ let dateObj = new Date();
+ let filename = "bookmarks-" + PlacesBackups.toISODateString(dateObj) + "_" +
+ count + "_" + "differentHash==" + ".json";
+ let backupFile = OS.Path.join(backupFolder, filename);
+ yield OS.File.move(tempPath, backupFile);
+ yield PlacesBackups.create(); // Force compressed backup
+ mostRecentBackupFile = yield PlacesBackups.getMostRecentBackup();
+
+ // Decode lz4 compressed file to json and check if json is valid
+ let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
+ createInstance(Ci.nsIScriptableUnicodeConverter);
+ converter.charset = "UTF-8";
+ let result = yield OS.File.read(mostRecentBackupFile, { compression: "lz4" });
+ let jsonString = converter.convertFromByteArray(result, result.length);
+ do_print("Check is valid JSON");
+ JSON.parse(jsonString);
+
+ // Cleanup
+ yield OS.File.remove(mostRecentBackupFile);
+ yield OS.File.remove(tempPath);
+ PlacesBackups._backupFiles = null; // To force re-cache of backupFiles
+});
+
+add_task(function* test_diff_date_same_hash() {
+ // If the old file has been created on an older day but has the same hash
+ // it should be renamed with today's date without altering the contents.
+ let backupFolder = yield PlacesBackups.getBackupFolder();
+ let tempPath = OS.Path.join(OS.Constants.Path.profileDir,
+ "bug10169583_bookmarks.json");
+ let {count, hash} = yield BookmarkJSONUtils.exportToFile(tempPath);
+ let oldDate = new Date(2014, 1, 1);
+ let curDate = new Date();
+ let oldFilename = "bookmarks-" + PlacesBackups.toISODateString(oldDate) + "_" +
+ count + "_" + hash + ".json";
+ let newFilename = "bookmarks-" + PlacesBackups.toISODateString(curDate) + "_" +
+ count + "_" + hash + ".json";
+ let backupFile = OS.Path.join(backupFolder, oldFilename);
+ let newBackupFile = OS.Path.join(backupFolder, newFilename);
+ yield OS.File.move(tempPath, backupFile);
+
+ // Ensure file has been renamed correctly
+ yield PlacesBackups.create();
+ let mostRecentBackupFile = yield PlacesBackups.getMostRecentBackup();
+ Assert.equal(mostRecentBackupFile, newBackupFile);
+
+ // Cleanup
+ yield OS.File.remove(mostRecentBackupFile);
+ yield OS.File.remove(tempPath);
+});