119 lines
4.2 KiB
JavaScript
119 lines
4.2 KiB
JavaScript
/* 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(async 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 = await PlacesBackups.getBackupFolder();
|
|
// Save to profile dir to obtain hash and nodeCount to append to filename
|
|
let tempPath = PathUtils.join(
|
|
PathUtils.profileDir,
|
|
"bug10169583_bookmarks.json"
|
|
);
|
|
let { count, hash } = await 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 = PathUtils.join(backupFolder, filename);
|
|
await IOUtils.move(tempPath, backupFile);
|
|
|
|
// Force a compressed backup which fallbacks to rename
|
|
await PlacesBackups.create();
|
|
let mostRecentBackupFile = await PlacesBackups.getMostRecentBackup();
|
|
// check to ensure not renamed to jsonlz4
|
|
Assert.equal(mostRecentBackupFile, backupFile);
|
|
// inspect contents and check if valid json
|
|
info("Check is valid JSON");
|
|
// We initially wrote an uncompressed file, and although a backup was triggered
|
|
// it did not rewrite the file, so this is uncompressed.
|
|
await IOUtils.readJSON(mostRecentBackupFile);
|
|
|
|
// Cleanup
|
|
await IOUtils.remove(backupFile);
|
|
await IOUtils.remove(tempPath);
|
|
PlacesBackups._backupFiles = null; // To force re-cache of backupFiles
|
|
});
|
|
|
|
add_task(async 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 = await PlacesBackups.getBackupFolder();
|
|
let tempPath = PathUtils.join(
|
|
PathUtils.profileDir,
|
|
"bug10169583_bookmarks.json"
|
|
);
|
|
let { count } = await BookmarkJSONUtils.exportToFile(tempPath);
|
|
let dateObj = new Date();
|
|
let filename =
|
|
"bookmarks-" +
|
|
PlacesBackups.toISODateString(dateObj) +
|
|
"_" +
|
|
count +
|
|
"_differentHash==.json";
|
|
let backupFile = PathUtils.join(backupFolder, filename);
|
|
await IOUtils.move(tempPath, backupFile);
|
|
await PlacesBackups.create(); // Force compressed backup
|
|
let mostRecentBackupFile = await PlacesBackups.getMostRecentBackup();
|
|
|
|
// Decode lz4 compressed file to json and check if json is valid
|
|
info("Check is valid JSON");
|
|
await IOUtils.readJSON(mostRecentBackupFile, { decompress: true });
|
|
|
|
// Cleanup
|
|
await IOUtils.remove(mostRecentBackupFile);
|
|
await IOUtils.remove(tempPath);
|
|
PlacesBackups._backupFiles = null; // To force re-cache of backupFiles
|
|
});
|
|
|
|
add_task(async 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 = await PlacesBackups.getBackupFolder();
|
|
let tempPath = PathUtils.join(
|
|
PathUtils.profileDir,
|
|
"bug10169583_bookmarks.json"
|
|
);
|
|
let { count, hash } = await 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 = PathUtils.join(backupFolder, oldFilename);
|
|
let newBackupFile = PathUtils.join(backupFolder, newFilename);
|
|
await IOUtils.move(tempPath, backupFile);
|
|
|
|
// Ensure file has been renamed correctly
|
|
await PlacesBackups.create();
|
|
let mostRecentBackupFile = await PlacesBackups.getMostRecentBackup();
|
|
Assert.equal(mostRecentBackupFile, newBackupFile);
|
|
|
|
// Cleanup
|
|
await IOUtils.remove(mostRecentBackupFile);
|
|
await IOUtils.remove(tempPath);
|
|
});
|