summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/local/test/unit/test_pop3Password2.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/local/test/unit/test_pop3Password2.js')
-rw-r--r--comm/mailnews/local/test/unit/test_pop3Password2.js213
1 files changed, 213 insertions, 0 deletions
diff --git a/comm/mailnews/local/test/unit/test_pop3Password2.js b/comm/mailnews/local/test/unit/test_pop3Password2.js
new file mode 100644
index 0000000000..9bc32e471b
--- /dev/null
+++ b/comm/mailnews/local/test/unit/test_pop3Password2.js
@@ -0,0 +1,213 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/**
+ * Authentication tests for POP3 - checks for servers whose details have
+ * changed (e.g. realusername and realhostname are different from username and
+ * hostname).
+ */
+
+/* import-globals-from ../../../test/resources/passwordStorage.js */
+load("../../../resources/passwordStorage.js");
+
+var server;
+var daemon;
+var incomingServer;
+var thisTest;
+
+var tests = [
+ {
+ title: "Get New Mail, One Message",
+ messages: ["message1.eml"],
+ transaction: [
+ "AUTH",
+ "CAPA",
+ "AUTH PLAIN",
+ "STAT",
+ "LIST",
+ "UIDL",
+ "RETR 1",
+ "DELE 1",
+ ],
+ },
+];
+
+var urlListener = {
+ OnStartRunningUrl(url) {},
+ OnStopRunningUrl(url, result) {
+ try {
+ var transaction = server.playTransaction();
+
+ do_check_transaction(transaction, thisTest.transaction);
+
+ Assert.equal(
+ localAccountUtils.inboxFolder.getTotalMessages(false),
+ thisTest.messages.length
+ );
+
+ Assert.equal(result, 0);
+ } catch (e) {
+ // If we have an error, clean up nicely before we throw it.
+ server.stop();
+
+ var thread = gThreadManager.currentThread;
+ while (thread.hasPendingEvents()) {
+ thread.processNextEvent(true);
+ }
+
+ do_throw(e);
+ }
+
+ // Let OnStopRunningUrl return cleanly before doing anything else.
+ do_timeout(0, checkBusy);
+ },
+};
+
+function checkBusy() {
+ if (tests.length == 0) {
+ incomingServer.closeCachedConnections();
+
+ // No more tests, let everything finish
+ server.stop();
+
+ var thread = gThreadManager.currentThread;
+ while (thread.hasPendingEvents()) {
+ thread.processNextEvent(true);
+ }
+
+ do_test_finished();
+ return;
+ }
+
+ // If the server hasn't quite finished, just delay a little longer.
+ if (incomingServer.serverBusy) {
+ do_timeout(20, checkBusy);
+ return;
+ }
+
+ testNext();
+}
+
+function testNext() {
+ thisTest = tests.shift();
+
+ // Handle the server in a try/catch/finally loop so that we always will stop
+ // the server if something fails.
+ try {
+ server.resetTest();
+
+ // Set up the test
+ test = thisTest.title;
+ daemon.setMessages(thisTest.messages);
+
+ // Now get the mail
+ MailServices.pop3.GetNewMail(
+ null,
+ urlListener,
+ localAccountUtils.inboxFolder,
+ incomingServer
+ );
+
+ server.performTest();
+ } catch (e) {
+ server.stop();
+
+ do_throw(e);
+ } finally {
+ var thread = gThreadManager.currentThread;
+ while (thread.hasPendingEvents()) {
+ thread.processNextEvent(true);
+ }
+ }
+}
+
+add_task(async function () {
+ // Disable new mail notifications
+ Services.prefs.setBoolPref("mail.biff.play_sound", false);
+ Services.prefs.setBoolPref("mail.biff.show_alert", false);
+ Services.prefs.setBoolPref("mail.biff.show_tray_icon", false);
+ Services.prefs.setBoolPref("mail.biff.animate_dock_icon", false);
+
+ // These preferences set up a local pop server that has had its hostname
+ // and username changed from the original settings. We can't do this by
+ // function calls for this test as they would cause the password to be
+ // forgotten when changing the hostname/username and this breaks the test.
+ Services.prefs.setCharPref("mail.account.account1.server", "server1");
+ Services.prefs.setCharPref("mail.account.account2.server", "server2");
+ Services.prefs.setCharPref("mail.account.account2.identities", "id1");
+ Services.prefs.setCharPref(
+ "mail.accountmanager.accounts",
+ "account1,account2"
+ );
+ Services.prefs.setCharPref(
+ "mail.accountmanager.localfoldersserver",
+ "server1"
+ );
+ Services.prefs.setCharPref("mail.accountmanager.defaultaccount", "account2");
+ Services.prefs.setCharPref("mail.identity.id1.fullName", "testpop3");
+ Services.prefs.setCharPref(
+ "mail.identity.id1.useremail",
+ "testpop3@localhost"
+ );
+ Services.prefs.setBoolPref("mail.identity.id1.valid", true);
+ Services.prefs.setCharPref(
+ "mail.server.server1.directory-rel",
+ "[ProfD]Mail/Local Folders"
+ );
+ Services.prefs.setCharPref("mail.server.server1.hostname", "Local Folders");
+ Services.prefs.setCharPref("mail.server.server1.name", "Local Folders");
+ Services.prefs.setCharPref("mail.server.server1.type", "none");
+ Services.prefs.setCharPref("mail.server.server1.userName", "nobody");
+ Services.prefs.setCharPref(
+ "mail.server.server2.directory-rel",
+ "[ProfD]Mail/invalid"
+ );
+ Services.prefs.setCharPref("mail.server.server2.hostname", "invalid");
+ Services.prefs.setCharPref(
+ "mail.server.server2.name",
+ "testpop3 on localhost"
+ );
+ Services.prefs.setCharPref("mail.server.server2.realhostname", "localhost");
+ Services.prefs.setCharPref("mail.server.server2.realuserName", "testpop3");
+ Services.prefs.setCharPref("mail.server.server2.type", "pop3");
+ Services.prefs.setCharPref("mail.server.server2.userName", "othername");
+
+ // Prepare files for passwords (generated by a script in bug 1018624).
+ await setupForPassword("signons-mailnews1.8-alt.json");
+
+ // Set up the Server
+ var serverArray = setupServerDaemon();
+ daemon = serverArray[0];
+ server = serverArray[1];
+ var handler = serverArray[2];
+ server.start();
+ Services.prefs.setIntPref("mail.server.server2.port", server.port);
+
+ // Login information needs to match the one stored in the signons json file.
+ handler.kUsername = "testpop3";
+ handler.kPassword = "pop3test";
+
+ MailServices.accounts.loadAccounts();
+
+ localAccountUtils.incomingServer = MailServices.accounts.localFoldersServer;
+
+ var rootFolder =
+ localAccountUtils.incomingServer.rootMsgFolder.QueryInterface(
+ Ci.nsIMsgLocalMailFolder
+ );
+
+ // Note: Inbox is not created automatically when there is no deferred server,
+ // so we need to create it.
+ localAccountUtils.inboxFolder = rootFolder.createLocalSubfolder("Inbox");
+ // a local inbox should have a Mail flag!
+ localAccountUtils.inboxFolder.setFlag(Ci.nsMsgFolderFlags.Mail);
+
+ // Create the incoming server with "original" details.
+ incomingServer = MailServices.accounts.getIncomingServer("server2");
+
+ // Check that we haven't got any messages in the folder, if we have its a test
+ // setup issue.
+ Assert.equal(localAccountUtils.inboxFolder.getTotalMessages(false), 0);
+
+ do_test_pending();
+
+ testNext();
+});