summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/imap/test/unit/test_starttlsFailure.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/imap/test/unit/test_starttlsFailure.js')
-rw-r--r--comm/mailnews/imap/test/unit/test_starttlsFailure.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/comm/mailnews/imap/test/unit/test_starttlsFailure.js b/comm/mailnews/imap/test/unit/test_starttlsFailure.js
new file mode 100644
index 0000000000..59c7f2e70f
--- /dev/null
+++ b/comm/mailnews/imap/test/unit/test_starttlsFailure.js
@@ -0,0 +1,79 @@
+/* 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 test checks that we handle the server dropping the connection
+ * on starttls. Since fakeserver doesn't support STARTTLS, I've made
+ * it drop the connection when it's attempted.
+ */
+
+/* import-globals-from ../../../test/resources/alertTestUtils.js */
+load("../../../resources/alertTestUtils.js");
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+var { PromiseTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mailnews/PromiseTestUtils.jsm"
+);
+
+var gAlertResolve;
+var gGotAlert = new Promise(resolve => {
+ gAlertResolve = resolve;
+});
+
+/* exported alert to alertTestUtils.js */
+function alertPS(parent, aDialogTitle, aText) {
+ gAlertResolve(aText);
+}
+
+add_setup(async function () {
+ // Set up IMAP fakeserver and incoming server.
+ IMAPPump.daemon = new ImapDaemon();
+ IMAPPump.server = makeServer(IMAPPump.daemon, "", { dropOnStartTLS: true });
+ IMAPPump.incomingServer = createLocalIMAPServer(IMAPPump.server.port);
+ IMAPPump.incomingServer.socketType = Ci.nsMsgSocketType.alwaysSTARTTLS;
+
+ // We need a local account for the IMAP server to have its sent messages in.
+ localAccountUtils.loadLocalMailAccount();
+
+ // We need an identity so that updateFolder doesn't fail.
+ let imapAccount = MailServices.accounts.createAccount();
+ let identity = MailServices.accounts.createIdentity();
+ imapAccount.addIdentity(identity);
+ imapAccount.defaultIdentity = identity;
+ imapAccount.incomingServer = IMAPPump.incomingServer;
+ MailServices.accounts.defaultAccount = imapAccount;
+
+ // The server doesn't support more than one connection.
+ Services.prefs.setIntPref("mail.server.server1.max_cached_connections", 1);
+ // We aren't interested in downloading messages automatically.
+ Services.prefs.setBoolPref("mail.server.server1.download_on_biff", false);
+
+ IMAPPump.inbox = IMAPPump.incomingServer.rootFolder
+ .getChildNamed("Inbox")
+ .QueryInterface(Ci.nsIMsgImapMailFolder);
+
+ registerAlertTestUtils();
+
+ let listener = new PromiseTestUtils.PromiseUrlListener();
+ IMAPPump.inbox.updateFolderWithListener(gDummyMsgWindow, listener);
+ await listener.promise
+ .then(res => {
+ throw new Error("updateFolderWithListener has to fail");
+ })
+ .catch(exitCode => {
+ Assert.ok(!Components.isSuccessCode(exitCode));
+ });
+});
+
+add_task(async function check_alert() {
+ let alertText = await gGotAlert;
+ Assert.ok(alertText.startsWith("Server localhost has disconnected"));
+});
+
+add_task(function teardown() {
+ IMAPPump.incomingServer.closeCachedConnections();
+ IMAPPump.server.stop();
+});