mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-19 06:47:35 +09:00
103 lines
4.6 KiB
JavaScript
103 lines
4.6 KiB
JavaScript
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);
|
|
});
|