summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/base/test/unit/test_accountMigration.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/base/test/unit/test_accountMigration.js')
-rw-r--r--comm/mailnews/base/test/unit/test_accountMigration.js184
1 files changed, 184 insertions, 0 deletions
diff --git a/comm/mailnews/base/test/unit/test_accountMigration.js b/comm/mailnews/base/test/unit/test_accountMigration.js
new file mode 100644
index 0000000000..d2bb801c49
--- /dev/null
+++ b/comm/mailnews/base/test/unit/test_accountMigration.js
@@ -0,0 +1,184 @@
+/* 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/. */
+
+/**
+ * This tests that we don't try to reset the mail.server.server<n>.authMethod
+ * preference every time we run the migration code, and other migration stuff
+ */
+
+var { migrateMailnews } = ChromeUtils.import(
+ "resource:///modules/MailnewsMigrator.jsm"
+);
+
+/* import-globals-from ../../../test/resources/abSetup.js */
+load("../../../resources/abSetup.js");
+
+function testPermission(aURI) {
+ let principal = Services.scriptSecurityManager.createContentPrincipal(
+ aURI,
+ {}
+ );
+ return Services.perms.testPermissionFromPrincipal(principal, "image");
+}
+
+function run_test() {
+ // Set up some basic accounts with limited prefs - enough to satisfy the
+ // migrator.
+ Services.prefs.setCharPref("mail.account.account1.server", "server1");
+ Services.prefs.setCharPref("mail.account.account2.server", "server2");
+ Services.prefs.setCharPref("mail.account.account3.server", "server3");
+
+ // Server1 has nothing set.
+
+ // Server2 has useSecAuth set to true, auth_login unset
+ Services.prefs.setBoolPref("mail.server.server2.useSecAuth", true);
+
+ Services.prefs.setCharPref(
+ "mail.accountmanager.accounts",
+ "account1,account2,account3"
+ );
+
+ // Set server1 and server2 username and hostname to test clientid population.
+ Services.prefs.setCharPref("mail.server.server1.userName", "testuser1");
+ Services.prefs.setCharPref("mail.server.server2.userName", "testuser2");
+ Services.prefs.setCharPref("mail.server.server1.type", "imap");
+ Services.prefs.setCharPref("mail.server.server2.type", "imap");
+ Services.prefs.setCharPref(
+ "mail.server.server1.hostname",
+ "mail.sampledomain1.com"
+ );
+ Services.prefs.setCharPref(
+ "mail.server.server2.hostname",
+ "mail.sampledomain2.com"
+ );
+
+ loadABFile("data/remoteContent", kPABData.fileName);
+
+ let uriAllowed = Services.io.newURI(
+ "chrome://messenger/content/email=yes@test.invalid"
+ );
+ let uriAllowed2 = Services.io.newURI(
+ "chrome://messenger/content/email=yes2@test.invalid"
+ );
+ let uriDisallowed = Services.io.newURI(
+ "chrome://messenger/content/email=no@test.invalid"
+ );
+
+ // Check that this email that according to the ab data has (had!)
+ // remote content premissions, has no premissions pre migration.
+ Assert.equal(testPermission(uriAllowed), Services.perms.UNKNOWN_ACTION);
+ Assert.equal(testPermission(uriAllowed2), Services.perms.UNKNOWN_ACTION);
+ Assert.equal(testPermission(uriDisallowed), Services.perms.UNKNOWN_ACTION);
+
+ // Now migrate the prefs.
+ migrateMailnews();
+
+ // Check that server1 and server2 have the same clientid.
+ Assert.ok(Services.prefs.prefHasUserValue("mail.server.server1.clientid"));
+ Assert.ok(Services.prefs.prefHasUserValue("mail.server.server2.clientid"));
+
+ // Check that server3 didn't get a clientid, since it has no userName.
+ // This is the case for nntp.
+ Assert.ok(!Services.prefs.prefHasUserValue("mail.server.server3.clientid"));
+
+ // Check what has been set.
+ Assert.ok(!Services.prefs.prefHasUserValue("mail.server.server1.authMethod"));
+ Assert.ok(Services.prefs.prefHasUserValue("mail.server.server2.authMethod"));
+ Assert.equal(
+ Services.prefs.getIntPref("mail.server.server2.authMethod"),
+ Ci.nsMsgAuthMethod.secure
+ );
+
+ // Now clear the authMethod for set for server2. This simulates the user
+ // setting the value back to "3", i.e. Ci.nsMsgAuthMethod.passwordCleartext.
+ Services.prefs.clearUserPref("mail.server.server2.authMethod");
+
+ // Now attempt migration again, e.g. a second load of TB
+ migrateMailnews();
+
+ // This time around, both of these should not be set.
+ Assert.ok(!Services.prefs.prefHasUserValue("mail.server.server1.authMethod"));
+ Assert.ok(!Services.prefs.prefHasUserValue("mail.server.server2.authMethod"));
+
+ //
+ // Now check SMTP
+ //
+
+ Services.prefs.setCharPref("mail.smtpservers", "smtp1,smtp2,smtp3");
+
+ // smtp1 has nothing set.
+
+ // smtp2 has useSecAuth set to true, auth_method unset
+ Services.prefs.setBoolPref("mail.smtpserver.smtp2.useSecAuth", true);
+
+ // Set server1 and server2 username and hostname to test clientid population.
+ Services.prefs.setCharPref("mail.smtpserver.smtp1.username", "testuser1");
+ Services.prefs.setCharPref("mail.smtpserver.smtp2.username", "testuser2");
+ Services.prefs.setCharPref(
+ "mail.smtpserver.smtp1.hostname",
+ "mail.sampledomain1.com"
+ );
+ Services.prefs.setCharPref(
+ "mail.smtpserver.smtp2.hostname",
+ "mail.sampledomain2.com"
+ );
+ Services.prefs.setCharPref(
+ "mail.smtpserver.smtp3.hostname",
+ "mail.nousername.example.com"
+ );
+
+ // Migration should now have added permissions for the address that had them
+ // and not for the one that didn't have them.
+ Assert.ok(Services.prefs.getIntPref("mail.ab_remote_content.migrated") > 0);
+ Assert.equal(testPermission(uriAllowed), Services.perms.ALLOW_ACTION);
+ Assert.equal(testPermission(uriAllowed2), Services.perms.ALLOW_ACTION);
+ Assert.equal(testPermission(uriDisallowed), Services.perms.UNKNOWN_ACTION);
+
+ // Now migrate the prefs
+ migrateMailnews();
+
+ // Check that smtpserver 1 and smtpserver 2 now have a clientid.
+ Assert.ok(Services.prefs.prefHasUserValue("mail.smtpserver.smtp1.clientid"));
+ Assert.ok(Services.prefs.prefHasUserValue("mail.smtpserver.smtp2.clientid"));
+
+ // Check that the smtp3server 2 got a clientid, even if it has no
+ // username. All SMTP servers don't require a username.
+ Assert.ok(Services.prefs.prefHasUserValue("mail.smtpserver.smtp3.clientid"));
+
+ Assert.ok(
+ !Services.prefs.prefHasUserValue("mail.smtpserver.smtp1.authMethod")
+ );
+ Assert.ok(
+ Services.prefs.prefHasUserValue("mail.smtpserver.smtp2.authMethod")
+ );
+ Assert.equal(
+ Services.prefs.getIntPref("mail.smtpserver.smtp2.authMethod"),
+ Ci.nsMsgAuthMethod.secure
+ );
+
+ // Now clear the authMethod for set for smtp2. This simulates the user
+ // setting the value back to "3", i.e. Ci.nsMsgAuthMethod.passwordCleartext.
+ Services.prefs.clearUserPref("mail.smtpserver.smtp2.authMethod");
+
+ // Now clear the mail.server.server1.clientid to test re-population.
+ Services.prefs.clearUserPref("mail.server.server2.clientid");
+
+ // Now attempt migration again, e.g. a second load of TB
+ migrateMailnews();
+
+ // This time around, both of these should not be set.
+ Assert.ok(
+ !Services.prefs.prefHasUserValue("mail.smtpserver.smtp1.authMethod")
+ );
+ Assert.ok(
+ !Services.prefs.prefHasUserValue("mail.smtpserver.smtp2.authMethod")
+ );
+
+ // The server2 clientid should be the same as the smtpserver2 now since
+ // they are for the same mail.sampledomain2.com domain.
+ Assert.equal(
+ Services.prefs.getCharPref("mail.smtpserver.smtp2.clientid"),
+ Services.prefs.getCharPref("mail.server.server2.clientid")
+ );
+}