116 lines
3.4 KiB
JavaScript
116 lines
3.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
https://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
let gTestSourcePath;
|
|
let gTestDestPath;
|
|
let gMatchingRegex;
|
|
|
|
add_setup(async () => {
|
|
gMatchingRegex = new RegExp(
|
|
`^${BackupService.BACKUP_FILE_NAME}_[a-z0-9-]+_[0-9_-]+.html$`
|
|
);
|
|
gTestSourcePath = await IOUtils.createUniqueDirectory(
|
|
PathUtils.tempDir,
|
|
"testFinalizeSingleFileArchiveSource"
|
|
);
|
|
gTestDestPath = await IOUtils.createUniqueDirectory(
|
|
PathUtils.tempDir,
|
|
"testFinalizeSingleFileArchiveDest"
|
|
);
|
|
|
|
registerCleanupFunction(async () => {
|
|
await IOUtils.remove(gTestSourcePath, { recursive: true });
|
|
await IOUtils.remove(gTestDestPath, { recursive: true });
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Utility function that writes a pretend archive file into gTestSourcePath,
|
|
* and then calls finalizeSingleFileArchive for it, passing
|
|
* gTestDestPath as the destination, and some metadata for encoding in the
|
|
* filename.
|
|
*
|
|
* Once the async testFn function resolves, the gTestSourcePath and
|
|
* gTestDestPath are cleared.
|
|
*
|
|
* @param {object} metadata
|
|
* The metadata to encode in the filename. See the BackupService schema for
|
|
* details.
|
|
* @param {Function} testFn
|
|
* An async testing function to run after calling finalizeSingleFileArchive.
|
|
*/
|
|
async function testFinalizeSingleFileArchive(metadata, testFn) {
|
|
let bs = new BackupService();
|
|
const TEST_FILE_PATH = PathUtils.join(gTestSourcePath, "test.txt");
|
|
await IOUtils.writeUTF8(TEST_FILE_PATH, "test");
|
|
let movedFilePath = await bs.finalizeSingleFileArchive(
|
|
TEST_FILE_PATH,
|
|
gTestDestPath,
|
|
metadata
|
|
);
|
|
let movedFile = PathUtils.filename(movedFilePath);
|
|
try {
|
|
await testFn(movedFile);
|
|
} finally {
|
|
// Clear out any files in the source and destination paths between tests.
|
|
let filePathsToClear = [
|
|
...(await IOUtils.getChildren(gTestSourcePath)),
|
|
...(await IOUtils.getChildren(gTestDestPath)),
|
|
];
|
|
for (let filePath of filePathsToClear) {
|
|
await IOUtils.remove(filePath);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Tests that a single file archive will get the expected filename when moved
|
|
* to the destination directory.
|
|
*/
|
|
add_task(async function test_filename() {
|
|
await testFinalizeSingleFileArchive(FAKE_METADATA, async movedFile => {
|
|
Assert.ok(movedFile.match(gMatchingRegex));
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Tests that a single file archive will remove older backup files in the
|
|
* same directory.
|
|
*/
|
|
add_task(async function test_remove_old_files() {
|
|
const OLDER_BACKUP = PathUtils.join(
|
|
gTestDestPath,
|
|
`FirefoxBackup_${FAKE_METADATA.profileName}_20200101-0000.html`
|
|
);
|
|
await IOUtils.writeUTF8(OLDER_BACKUP, "test");
|
|
|
|
await testFinalizeSingleFileArchive(FAKE_METADATA, async movedFile => {
|
|
Assert.ok(movedFile.match(gMatchingRegex));
|
|
Assert.ok(
|
|
!(await IOUtils.exists(OLDER_BACKUP)),
|
|
"Older backup was deleted."
|
|
);
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Tests that a single file archive will not remove older backup files for
|
|
* other profiles.
|
|
*/
|
|
add_task(async function test_remove_old_files_other_profile() {
|
|
const OLDER_BACKUP = PathUtils.join(
|
|
gTestDestPath,
|
|
`FirefoxBackup_SomeOtherProfile_20200101-0000.html`
|
|
);
|
|
await IOUtils.writeUTF8(OLDER_BACKUP, "test");
|
|
|
|
await testFinalizeSingleFileArchive(FAKE_METADATA, async movedFile => {
|
|
Assert.ok(movedFile.match(gMatchingRegex));
|
|
Assert.ok(
|
|
await IOUtils.exists(OLDER_BACKUP),
|
|
"Older backup from another profile was not deleted."
|
|
);
|
|
});
|
|
});
|