184 lines
5.7 KiB
JavaScript
184 lines
5.7 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/*
|
|
* Verifies the async flushing methods.
|
|
*/
|
|
|
|
add_task(async () => {
|
|
let defaultProfile = makeRandomProfileDir("default");
|
|
|
|
let hash = xreDirProvider.getInstallHash();
|
|
|
|
writeCompatibilityIni(defaultProfile);
|
|
|
|
writeProfilesIni({
|
|
profiles: [
|
|
{
|
|
name: "default",
|
|
path: defaultProfile.leafName,
|
|
default: false,
|
|
},
|
|
],
|
|
installs: {
|
|
[hash]: { default: defaultProfile.leafName },
|
|
},
|
|
});
|
|
|
|
selectStartupProfile();
|
|
checkStartupReason("default");
|
|
|
|
let profileData = readProfilesIni();
|
|
checkProfileService(profileData);
|
|
|
|
let service = getProfileService();
|
|
|
|
let newProfileDir = makeRandomProfileDir("newProfile");
|
|
service.createProfile(newProfileDir, "new");
|
|
|
|
await service.asyncFlush();
|
|
profileData = readProfilesIni();
|
|
|
|
Assert.equal(profileData.profiles.length, 2, "Should now have two profiles.");
|
|
|
|
checkProfileService(profileData);
|
|
|
|
let other1 = makeRandomProfileDir("other1");
|
|
let other2 = makeRandomProfileDir("other2");
|
|
|
|
// Write out a different ini file.
|
|
writeProfilesIni({
|
|
profiles: [
|
|
{
|
|
name: "changedname",
|
|
path: defaultProfile.leafName,
|
|
},
|
|
{
|
|
name: "other1",
|
|
path: other1.leafName,
|
|
},
|
|
{
|
|
name: "other2",
|
|
path: other2.leafName,
|
|
},
|
|
],
|
|
installs: {
|
|
[hash]: { default: defaultProfile.leafName },
|
|
},
|
|
});
|
|
|
|
// Change the modified time.
|
|
let profilesini = gDataHome.clone();
|
|
profilesini.append("profiles.ini");
|
|
let oldTime = profilesini.lastModifiedTime;
|
|
profilesini.lastModifiedTime = oldTime - 10000;
|
|
|
|
try {
|
|
await service.asyncFlush();
|
|
Assert.ok(false, "Flushing should have failed");
|
|
} catch (e) {
|
|
Assert.ok(true, "Flushing should have failed");
|
|
}
|
|
|
|
profileData = readProfilesIni();
|
|
Assert.equal(profileData.profiles.length, 3, "Should have three profiles.");
|
|
|
|
let found = profileData.profiles.find(p => p.name == "changedname");
|
|
Assert.ok(found, "Should have found the current profile.");
|
|
Assert.equal(found.path, defaultProfile.leafName);
|
|
Assert.equal(found.storeID, null);
|
|
|
|
found = profileData.profiles.find(p => p.name == "other1");
|
|
Assert.ok(found, "Should have found the other1 profile.");
|
|
Assert.equal(found.path, other1.leafName);
|
|
Assert.equal(found.storeID, null);
|
|
|
|
found = profileData.profiles.find(p => p.name == "other2");
|
|
Assert.ok(found, "Should have found the other2 profile.");
|
|
Assert.equal(found.path, other2.leafName);
|
|
Assert.equal(found.storeID, null);
|
|
|
|
let installData = readInstallsIni();
|
|
Assert.equal(profileData.installs[hash].default, defaultProfile.leafName);
|
|
Assert.equal(installData.installs[hash].default, defaultProfile.leafName);
|
|
|
|
if (AppConstants.MOZ_SELECTABLE_PROFILES) {
|
|
// Set a store ID on the profile. Flushing will succeed because the profile path hasn't changed.
|
|
service.currentProfile.storeID = "7126354jdf";
|
|
|
|
await service.asyncFlushGroupProfile();
|
|
|
|
profileData = readProfilesIni();
|
|
Assert.equal(profileData.profiles.length, 3, "Should have three profiles.");
|
|
|
|
found = profileData.profiles.find(p => p.name == "changedname");
|
|
Assert.ok(found, "Should have found the current profile.");
|
|
Assert.equal(found.path, defaultProfile.leafName);
|
|
Assert.equal(found.storeID, "7126354jdf");
|
|
|
|
found = profileData.profiles.find(p => p.name == "other1");
|
|
Assert.ok(found, "Should have found the other1 profile.");
|
|
Assert.equal(found.path, other1.leafName);
|
|
Assert.equal(found.storeID, null);
|
|
|
|
found = profileData.profiles.find(p => p.name == "other2");
|
|
Assert.ok(found, "Should have found the other2 profile.");
|
|
Assert.equal(found.path, other2.leafName);
|
|
Assert.equal(found.storeID, null);
|
|
|
|
installData = readInstallsIni();
|
|
Assert.equal(profileData.installs[hash].default, defaultProfile.leafName);
|
|
Assert.equal(installData.installs[hash].default, defaultProfile.leafName);
|
|
|
|
// Change the profile path. Flushing will succeed because the store ID now matches.
|
|
service.currentProfile.rootDir = newProfileDir;
|
|
|
|
await service.asyncFlushGroupProfile();
|
|
|
|
profileData = readProfilesIni();
|
|
Assert.equal(profileData.profiles.length, 3, "Should have three profiles.");
|
|
|
|
found = profileData.profiles.find(p => p.name == "changedname");
|
|
Assert.ok(found, "Should have found the current profile.");
|
|
Assert.equal(found.path, newProfileDir.leafName);
|
|
Assert.equal(found.storeID, "7126354jdf");
|
|
|
|
found = profileData.profiles.find(p => p.name == "other1");
|
|
Assert.ok(found, "Should have found the other1 profile.");
|
|
Assert.equal(found.path, other1.leafName);
|
|
Assert.equal(found.storeID, null);
|
|
|
|
found = profileData.profiles.find(p => p.name == "other2");
|
|
Assert.ok(found, "Should have found the other2 profile.");
|
|
Assert.equal(found.path, other2.leafName);
|
|
Assert.equal(found.storeID, null);
|
|
|
|
installData = readInstallsIni();
|
|
Assert.equal(profileData.installs[hash].default, newProfileDir.leafName);
|
|
Assert.equal(installData.installs[hash].default, newProfileDir.leafName);
|
|
|
|
// Modify the on-disk data
|
|
writeProfilesIni({
|
|
profiles: [
|
|
{
|
|
name: "some other name",
|
|
path: "some other directory",
|
|
storeID: "7126354jdf",
|
|
},
|
|
],
|
|
installs: {
|
|
[hash]: { default: "some other directory" },
|
|
},
|
|
});
|
|
|
|
await service.asyncFlushGroupProfile();
|
|
|
|
profileData = readProfilesIni();
|
|
Assert.equal(profileData.profiles.length, 1, "Should have one profile.");
|
|
|
|
found = profileData.profiles[0];
|
|
Assert.ok(found, "Should have found the current profile.");
|
|
Assert.equal(found.path, newProfileDir.leafName);
|
|
Assert.equal(found.storeID, "7126354jdf");
|
|
}
|
|
});
|