From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../imap/test/unit/test_imapPasswordFailure.js | 179 +++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 comm/mailnews/imap/test/unit/test_imapPasswordFailure.js (limited to 'comm/mailnews/imap/test/unit/test_imapPasswordFailure.js') 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(); +} -- cgit v1.2.3