diff options
Diffstat (limited to 'comm/mailnews/imap/test/unit/test_listSubscribed.js')
-rw-r--r-- | comm/mailnews/imap/test/unit/test_listSubscribed.js | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/comm/mailnews/imap/test/unit/test_listSubscribed.js b/comm/mailnews/imap/test/unit/test_listSubscribed.js new file mode 100644 index 0000000000..0d536dd45c --- /dev/null +++ b/comm/mailnews/imap/test/unit/test_listSubscribed.js @@ -0,0 +1,123 @@ +/* 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/. */ + +/** Test that listing subscribed mailboxes uses LIST (SUBSCRIBED) instead of LSUB + * for servers that have LIST-EXTENDED capability + */ +/* References: + * RFC 5258 - http://tools.ietf.org/html/rfc5258 + * Bug 495318 + * Bug 816028 + * http://bugzilla.zimbra.com/show_bug.cgi?id=78794 + */ + +var { PromiseTestUtils } = ChromeUtils.import( + "resource://testing-common/mailnews/PromiseTestUtils.jsm" +); + +add_setup(async function () { + // Zimbra is one of the servers that supports LIST-EXTENDED + // it also has a bug that causes a server crash in certain setups + setupIMAPPump("Zimbra"); + + Services.prefs.setBoolPref( + "mail.server.server1.autosync_offline_stores", + false + ); + + // Setup the mailboxes that will be used for this test. + IMAPPump.mailbox.subscribed = true; + IMAPPump.daemon.createMailbox("folder1", { + subscribed: true, + flags: ["\\Noselect"], + }); + IMAPPump.daemon.createMailbox("folder1/folder11", { + subscribed: true, + flags: ["\\Noinferiors"], + }); + IMAPPump.daemon.createMailbox("folder2", { + subscribed: true, + nonExistent: true, + }); + IMAPPump.daemon.createMailbox("folder3", {}); + + // select the inbox to force folder discovery, etc. + let listener = new PromiseTestUtils.PromiseUrlListener(); + IMAPPump.inbox.updateFolderWithListener(null, listener); + await listener.promise; +}); + +// tests that LIST (SUBSCRIBED) returns the proper response +add_task(async function testListSubscribed() { + // check that we have \Noselect and \Noinferiors flags - these would not have + // been returned if we had used LSUB instead of LIST(SUBSCRIBED) + let rootFolder = IMAPPump.incomingServer.rootFolder; + let folder1 = rootFolder.getChildNamed("folder1"); + Assert.ok(folder1.getFlag(Ci.nsMsgFolderFlags.ImapNoselect)); + Assert.ok(!folder1.getFlag(Ci.nsMsgFolderFlags.ImapNoinferiors)); + + // make sure the above test was not a fluke + let folder11 = folder1.getChildNamed("folder11"); + Assert.ok(!folder11.getFlag(Ci.nsMsgFolderFlags.ImapNoselect)); + Assert.ok(folder11.getFlag(Ci.nsMsgFolderFlags.ImapNoinferiors)); + + // test that \NonExistent implies \Noselect + rootFolder.getChildNamed("folder2"); + Assert.ok(folder1.getFlag(Ci.nsMsgFolderFlags.ImapNoselect)); + + // should not get a folder3 since it is not subscribed + let folder3; + try { + folder3 = rootFolder.getChildNamed("folder3"); + } catch (ex) {} + // do_check_false(folder1.getFlag(Ci.nsMsgFolderFlags.Subscribed)); + Assert.equal(null, folder3); +}); + +add_task(async function testZimbraServerVersions() { + if (Services.prefs.getBoolPref("mailnews.imap.jsmodule", false)) { + return; + } + + // older versions of Zimbra can crash if we send LIST (SUBSCRIBED) so we want + // to make sure that we are checking for versions + + let testValues = [ + { version: "6.3.1_GA_2790", expectedResult: false }, + { version: "7.2.2_GA_2790", expectedResult: false }, + { version: "7.2.3_GA_2790", expectedResult: true }, + { version: "8.0.2_GA_2790", expectedResult: false }, + { version: "8.0.3_GA_2790", expectedResult: true }, + { version: "9.0.0_GA_2790", expectedResult: true }, + ]; + + for (let i = 0; i < testValues.length; i++) { + IMAPPump.daemon.idResponse = + '("NAME" "Zimbra" ' + + '"VERSION" "' + + testValues[i].version + + '" ' + + '"RELEASE" "20120815212257" ' + + '"USER" "user@domain.com" ' + + '"SERVER" "14b63305-d002-4f1b-bcd9-23d402d4ef40")'; + IMAPPump.incomingServer.closeCachedConnections(); + IMAPPump.incomingServer.performExpand(null); + // select inbox is just to wait on performExpand since performExpand does not have listener + let listener = new PromiseTestUtils.PromiseUrlListener(); + IMAPPump.inbox.updateFolderWithListener(null, listener); + await listener.promise; + // if we send LSUB instead of LIST(SUBSCRIBED), then we should not have \NoSelect flag + let rootFolder = IMAPPump.incomingServer.rootFolder; + let folder1 = rootFolder.getChildNamed("folder1"); + Assert.equal( + folder1.getFlag(Ci.nsMsgFolderFlags.ImapNoselect), + testValues[i].expectedResult + ); + } +}); + +// Cleanup at end +add_task(function endTest() { + teardownIMAPPump(); +}); |