summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/imap/test/unit/test_imapPasswordFailure.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/imap/test/unit/test_imapPasswordFailure.js')
-rw-r--r--comm/mailnews/imap/test/unit/test_imapPasswordFailure.js179
1 files changed, 179 insertions, 0 deletions
diff --git a/comm/mailnews/imap/test/unit/test_imapPasswordFailure.js b/comm/mailnews/imap/test/unit/test_imapPasswordFailure.js
new file mode 100644
index 0000000000..b28c646907
--- /dev/null
+++ b/comm/mailnews/imap/test/unit/test_imapPasswordFailure.js
@@ -0,0 +1,179 @@
+/**
+ * This test checks to see if the imap password failure is handled correctly.
+ * The steps are:
+ * - Have an invalid password in the password database.
+ * - Check we get a prompt asking what to do.
+ * - Check retry does what it should do.
+ * - Check cancel does what it should do.
+ * - Re-initiate connection, this time select enter new password, check that
+ * we get a new password prompt and can enter the password.
+ */
+
+/* import-globals-from ../../../test/resources/alertTestUtils.js */
+/* import-globals-from ../../../test/resources/passwordStorage.js */
+load("../../../resources/alertTestUtils.js");
+load("../../../resources/passwordStorage.js");
+
+var kUserName = "user";
+var kInvalidPassword = "imaptest";
+var kValidPassword = "password";
+
+var incomingServer, server;
+var attempt = 0;
+
+function confirmExPS(
+ aDialogTitle,
+ aText,
+ aButtonFlags,
+ aButton0Title,
+ aButton1Title,
+ aButton2Title,
+ aCheckMsg,
+ aCheckState
+) {
+ switch (++attempt) {
+ // First attempt, retry.
+ case 1:
+ dump("\nAttempting retry\n");
+ return 0;
+ // Second attempt, cancel.
+ case 2:
+ dump("\nCancelling login attempt\n");
+ return 1;
+ // Third attempt, retry.
+ case 3:
+ dump("\nAttempting Retry\n");
+ return 0;
+ // Fourth attempt, enter a new password.
+ case 4:
+ dump("\nEnter new password\n");
+ return 2;
+ default:
+ do_throw("unexpected attempt number " + attempt);
+ return 1;
+ }
+}
+
+function promptPasswordPS(
+ aParent,
+ aDialogTitle,
+ aText,
+ aPassword,
+ aCheckMsg,
+ aCheckState
+) {
+ if (attempt == 4) {
+ aPassword.value = kValidPassword;
+ aCheckState.value = true;
+ return true;
+ }
+ return false;
+}
+
+add_task(async function () {
+ do_test_pending();
+
+ // Prepare files for passwords (generated by a script in bug 1018624).
+ await setupForPassword("signons-mailnews1.8-imap.json");
+
+ registerAlertTestUtils();
+
+ let daemon = new ImapDaemon();
+ daemon.createMailbox("Subscribed", { subscribed: true });
+ server = makeServer(daemon, "", {
+ // Make username of server match the singons.txt file
+ // (pw there is intentionally invalid)
+ kUsername: kUserName,
+ kPassword: kValidPassword,
+ });
+ server.setDebugLevel(fsDebugAll);
+
+ incomingServer = createLocalIMAPServer(server.port);
+
+ // PerformExpand expects us to already have a password loaded into the
+ // incomingServer when we call it, so force a get password call to get it
+ // out of the signons file (first removing the value that
+ // createLocalIMAPServer puts in there).
+ incomingServer.password = "";
+ let password = incomingServer.getPasswordWithUI(
+ "Prompt Message",
+ "Prompt Title"
+ );
+
+ // The fake server expects one password, but we're feeding it an invalid one
+ // initially so that we can check what happens when password is denied.
+ Assert.equal(password, kInvalidPassword);
+
+ // First step, try and perform a subscribe where we won't be able to log in.
+ // This covers attempts 1 and 2 in confirmEx.
+ dump("\nperformExpand 1\n\n");
+
+ incomingServer.performExpand(gDummyMsgWindow);
+ server.performTest("SUBSCRIBE");
+
+ dump("\nfinished subscribe 1\n\n");
+
+ Assert.equal(attempt, 2);
+
+ let rootFolder = incomingServer.rootFolder;
+ Assert.ok(rootFolder.containsChildNamed("Inbox"));
+ Assert.ok(!rootFolder.containsChildNamed("Subscribed"));
+
+ // Check that we haven't forgotten the login even though we've retried and cancelled.
+ let logins = Services.logins.findLogins(
+ "imap://localhost",
+ null,
+ "imap://localhost"
+ );
+
+ Assert.equal(logins.length, 1);
+ Assert.equal(logins[0].username, kUserName);
+ Assert.equal(logins[0].password, kInvalidPassword);
+
+ server.resetTest();
+
+ dump("\nperformExpand 2\n\n");
+
+ incomingServer.performExpand(gDummyMsgWindow);
+ server.performTest("SUBSCRIBE");
+
+ dump("\nfinished subscribe 2\n");
+
+ Assert.ok(rootFolder.containsChildNamed("Inbox"));
+ Assert.ok(rootFolder.containsChildNamed("Subscribed"));
+
+ // Now check the new one has been saved.
+ logins = Services.logins.findLogins(
+ "imap://localhost",
+ null,
+ "imap://localhost"
+ );
+
+ Assert.equal(logins.length, 1);
+ Assert.equal(logins[0].username, kUserName);
+ Assert.equal(logins[0].password, kValidPassword);
+
+ // Remove the login via the incoming server.
+ incomingServer.forgetPassword();
+ logins = Services.logins.findLogins(
+ "imap://localhost",
+ null,
+ "imap://localhost"
+ );
+
+ Assert.equal(logins.length, 0);
+
+ do_timeout(500, endTest);
+});
+
+function endTest() {
+ incomingServer.closeCachedConnections();
+ server.stop();
+
+ var thread = gThreadManager.currentThread;
+ while (thread.hasPendingEvents()) {
+ thread.processNextEvent(true);
+ }
+
+ do_test_finished();
+}