summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/unit/test_utils_backups_create.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/places/tests/unit/test_utils_backups_create.js')
-rw-r--r--toolkit/components/places/tests/unit/test_utils_backups_create.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/toolkit/components/places/tests/unit/test_utils_backups_create.js b/toolkit/components/places/tests/unit/test_utils_backups_create.js
new file mode 100644
index 000000000..a30589c44
--- /dev/null
+++ b/toolkit/components/places/tests/unit/test_utils_backups_create.js
@@ -0,0 +1,90 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim:set ts=2 sw=2 sts=2 et: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ /**
+ * Check for correct functionality of bookmarks backups
+ */
+
+const NUMBER_OF_BACKUPS = 10;
+
+function run_test() {
+ run_next_test();
+}
+
+add_task(function* () {
+ // Generate random dates.
+ let dateObj = new Date();
+ let dates = [];
+ while (dates.length < NUMBER_OF_BACKUPS) {
+ // Use last year to ensure today's backup is the newest.
+ let randomDate = new Date(dateObj.getFullYear() - 1,
+ Math.floor(12 * Math.random()),
+ Math.floor(28 * Math.random()));
+ if (!dates.includes(randomDate.getTime()))
+ dates.push(randomDate.getTime());
+ }
+ // Sort dates from oldest to newest.
+ dates.sort();
+
+ // Get and cleanup the backups folder.
+ let backupFolderPath = yield PlacesBackups.getBackupFolder();
+ let bookmarksBackupDir = new FileUtils.File(backupFolderPath);
+
+ // Fake backups are created backwards to ensure we won't consider file
+ // creation time.
+ // Create fake backups for the newest dates.
+ for (let i = dates.length - 1; i >= 0; i--) {
+ let backupFilename = PlacesBackups.getFilenameForDate(new Date(dates[i]));
+ let backupFile = bookmarksBackupDir.clone();
+ backupFile.append(backupFilename);
+ backupFile.create(Ci.nsIFile.NORMAL_FILE_TYPE, parseInt("0666", 8));
+ do_print("Creating fake backup " + backupFile.leafName);
+ if (!backupFile.exists())
+ do_throw("Unable to create fake backup " + backupFile.leafName);
+ }
+
+ yield PlacesBackups.create(NUMBER_OF_BACKUPS);
+ // Add today's backup.
+ dates.push(dateObj.getTime());
+
+ // Check backups. We have 11 dates but we the max number is 10 so the
+ // oldest backup should have been removed.
+ for (let i = 0; i < dates.length; i++) {
+ let backupFilename;
+ let shouldExist;
+ let backupFile;
+ if (i > 0) {
+ let files = bookmarksBackupDir.directoryEntries;
+ while (files.hasMoreElements()) {
+ let entry = files.getNext().QueryInterface(Ci.nsIFile);
+ if (PlacesBackups.filenamesRegex.test(entry.leafName)) {
+ backupFilename = entry.leafName;
+ backupFile = entry;
+ break;
+ }
+ }
+ shouldExist = true;
+ }
+ else {
+ backupFilename = PlacesBackups.getFilenameForDate(new Date(dates[i]));
+ backupFile = bookmarksBackupDir.clone();
+ backupFile.append(backupFilename);
+ shouldExist = false;
+ }
+ if (backupFile.exists() != shouldExist)
+ do_throw("Backup should " + (shouldExist ? "" : "not") + " exist: " + backupFilename);
+ }
+
+ // Cleanup backups folder.
+ // XXX: Can't use bookmarksBackupDir.remove(true) because file lock happens
+ // on WIN XP.
+ let files = bookmarksBackupDir.directoryEntries;
+ while (files.hasMoreElements()) {
+ let entry = files.getNext().QueryInterface(Ci.nsIFile);
+ entry.remove(false);
+ }
+ do_check_false(bookmarksBackupDir.directoryEntries.hasMoreElements());
+});