Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
ChromeUtils.defineESModuleGetters(this, {
ERRORS: "chrome://browser/content/backup/backup-constants.mjs",
});
let bs;
const correctPassword = "correcthorsebatterystaple";
const incorrectPassword = "Tr0ub4dor&3";
let testBackupDirPath;
let testBackupPath;
add_setup(async function () {
setupProfile();
bs = new BackupService({ FakeBackupResource1 });
let sandbox = sinon.createSandbox();
let fakeManifestEntry = { fake: "test" };
sandbox
.stub(FakeBackupResource1.prototype, "backup")
.resolves(fakeManifestEntry);
sandbox.stub(FakeBackupResource1.prototype, "recover").resolves();
testBackupDirPath = await IOUtils.createUniqueDirectory(
PathUtils.tempDir,
"wrongPasswordTestBackup"
);
bs = new BackupService({ FakeBackupResource1 });
await bs.enableEncryption(correctPassword);
testBackupPath = (await bs.createBackup({ profilePath: testBackupDirPath }))
.archivePath;
registerCleanupFunction(async () => {
sandbox.restore();
bs = null;
await IOUtils.remove(testBackupDirPath, { recursive: true });
});
});
/**
* Tests the case where the wrong password is given when trying to restore from
* a backup.
*
* @param {string|null} passwordToUse
* The password to decrypt with, or `null` to specify no password.
*/
async function testWrongPassword(passwordToUse) {
Services.fog.testResetFOG();
Assert.ok(await IOUtils.exists(testBackupPath), "The backup file exists");
let recoveredProfilePath = await IOUtils.createUniqueDirectory(
PathUtils.tempDir,
"wrongPasswordTestRecoveredProfile"
);
registerCleanupFunction(async () => {
await IOUtils.remove(recoveredProfilePath, { recursive: true });
});
await bs.getBackupFileInfo(testBackupPath);
const restoreID = bs.state.restoreID;
await Assert.rejects(
bs.recoverFromBackupArchive(
testBackupPath,
passwordToUse,
false,
testBackupDirPath,
recoveredProfilePath
),
err => err.cause == ERRORS.UNAUTHORIZED
);
let events = Glean.browserBackup.restoreStarted.testGetValue();
Assert.equal(
events.length,
1,
"Should be a single restore started event after we start restoring a profile"
);
Assert.deepEqual(
events[0].extra,
{ restore_id: restoreID },
"Restore event should have the right data"
);
events = Glean.browserBackup.restoreFailed.testGetValue();
Assert.equal(
events.length,
1,
"Should be a single restore failed event after we fail to restore a profile"
);
Assert.deepEqual(
events[0].extra,
{ restore_id: restoreID, error_type: "UNAUTHORIZED" },
"Restore failure event should have the right data"
);
}
add_task(async function test_wrong_password() {
await testWrongPassword(incorrectPassword);
});
add_task(async function test_no_password() {
await testWrongPassword(null);
});