summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/local/test/unit/test_streamHeaders.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/local/test/unit/test_streamHeaders.js')
-rw-r--r--comm/mailnews/local/test/unit/test_streamHeaders.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/comm/mailnews/local/test/unit/test_streamHeaders.js b/comm/mailnews/local/test/unit/test_streamHeaders.js
new file mode 100644
index 0000000000..a1e7ef1640
--- /dev/null
+++ b/comm/mailnews/local/test/unit/test_streamHeaders.js
@@ -0,0 +1,90 @@
+/* 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 mainly tests that streamHeaders does not result in the crash
+ * of bug 752768
+ *
+ * adapted from test_pop3Pump.js by Kent James <kent@caspia.com>
+ */
+
+/* import-globals-from ../../../test/resources/alertTestUtils.js */
+load("../../../resources/alertTestUtils.js");
+
+/* import-globals-from ../../../test/resources/POP3pump.js */
+load("../../../resources/POP3pump.js");
+
+var { PromiseTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mailnews/PromiseTestUtils.jsm"
+);
+
+var testSubjects = ["Hello, did you receive my bugmail?"];
+
+var gHdr;
+
+add_task(async function loadMessages() {
+ let pop3Resolve;
+ let pop3Promise = new Promise(resolve => {
+ pop3Resolve = resolve;
+ });
+ gPOP3Pump.files = ["../../../data/draft1"];
+ gPOP3Pump.onDone = pop3Resolve;
+ gPOP3Pump.run();
+ await pop3Promise;
+
+ // Get message headers for the inbox folder.
+ var msgCount = 0;
+ for (gHdr of localAccountUtils.inboxFolder.msgDatabase.enumerateMessages()) {
+ msgCount++;
+ Assert.equal(gHdr.subject, testSubjects[msgCount - 1]);
+ }
+ Assert.equal(msgCount, 1);
+ gPOP3Pump = null;
+});
+
+add_task(async function goodStreaming() {
+ // Try to stream the headers of the last message.
+ let uri = gHdr.folder.getUriForMsg(gHdr);
+ let messageService = MailServices.messageServiceFromURI(uri);
+ let streamListener = new PromiseTestUtils.PromiseStreamListener();
+ messageService.streamHeaders(uri, streamListener, null, true);
+ // The message contains this header.
+ let streamData = await streamListener.promise;
+ Assert.ok(
+ streamData.includes(
+ "X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0"
+ )
+ );
+});
+
+/**
+ * Crash from bug 752768.
+ */
+add_task(async function badStreaming() {
+ // Try to stream the headers of the last message.
+ let folder = gHdr.folder;
+ let uri = folder.getUriForMsg(gHdr);
+
+ let dbFile = folder.summaryFile;
+ // Force an invalid database.
+ folder.msgDatabase.forceClosed();
+ dbFile.remove(false);
+ folder.msgDatabase = null;
+
+ let messageService = MailServices.messageServiceFromURI(uri);
+ let haveError = false;
+ try {
+ let streamListener = new PromiseTestUtils.PromiseStreamListener();
+ messageService.streamHeaders(uri, streamListener, null, true);
+ await streamListener.promise;
+ } catch (e) {
+ // Should throw NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE (0x80550005).
+ haveError = true;
+ } finally {
+ Assert.ok(
+ haveError,
+ "Ensure that the stream crashes with NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE"
+ );
+ }
+});