summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/compose/test/unit/test_sendMessageFile.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/compose/test/unit/test_sendMessageFile.js')
-rw-r--r--comm/mailnews/compose/test/unit/test_sendMessageFile.js172
1 files changed, 172 insertions, 0 deletions
diff --git a/comm/mailnews/compose/test/unit/test_sendMessageFile.js b/comm/mailnews/compose/test/unit/test_sendMessageFile.js
new file mode 100644
index 0000000000..cb2882e88f
--- /dev/null
+++ b/comm/mailnews/compose/test/unit/test_sendMessageFile.js
@@ -0,0 +1,172 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/**
+ * Protocol tests for SMTP.
+ *
+ * This test verifies:
+ * - Sending a message to an SMTP server (which is also covered elsewhere).
+ * - Correct reception of the message by the SMTP server.
+ * - Correct saving of the message to the sent folder.
+ *
+ * Originally written to test bug 429891 where saving to the sent folder was
+ * mangling the message.
+ */
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+var server;
+var sentFolder;
+var originalData;
+var finished = false;
+
+var kSender = "from@foo.invalid";
+var kTo = "to@foo.invalid";
+
+function msl() {}
+
+msl.prototype = {
+ // nsIMsgSendListener
+ onStartSending(aMsgID, aMsgSize) {},
+ onProgress(aMsgID, aProgress, aProgressMax) {},
+ onStatus(aMsgID, aMsg) {},
+ onStopSending(aMsgID, aStatus, aMsg, aReturnFile) {
+ try {
+ Assert.equal(aStatus, 0);
+
+ do_check_transaction(server.playTransaction(), [
+ "EHLO test",
+ "MAIL FROM:<" + kSender + "> BODY=8BITMIME SIZE=" + originalData.length,
+ "RCPT TO:<" + kTo + ">",
+ "DATA",
+ ]);
+
+ // Compare data file to what the server received
+ Assert.equal(originalData, server._daemon.post);
+ } catch (e) {
+ do_throw(e);
+ } finally {
+ server.stop();
+
+ var thread = gThreadManager.currentThread;
+ while (thread.hasPendingEvents()) {
+ thread.processNextEvent(false);
+ }
+ }
+ },
+ onGetDraftFolderURI(aMsgID, aFolderURI) {},
+ onSendNotPerformed(aMsgID, aStatus) {},
+ onTransportSecurityError(msgID, status, secInfo, location) {},
+
+ // nsIMsgCopyServiceListener
+ OnStartCopy() {},
+ OnProgress(aProgress, aProgressMax) {},
+ SetMessageKey(aKey) {},
+ GetMessageId(aMessageId) {},
+ OnStopCopy(aStatus) {
+ Assert.equal(aStatus, 0);
+ try {
+ // Now do a comparison of what is in the sent mail folder
+ let msgData = mailTestUtils.loadMessageToString(
+ sentFolder,
+ mailTestUtils.firstMsgHdr(sentFolder)
+ );
+
+ // Skip the headers etc that mailnews adds
+ var pos = msgData.indexOf("From:");
+ Assert.notEqual(pos, -1);
+
+ msgData = msgData.substr(pos);
+
+ Assert.equal(originalData, msgData);
+ } catch (e) {
+ do_throw(e);
+ } finally {
+ finished = true;
+ do_test_finished();
+ }
+ },
+
+ // QueryInterface
+ QueryInterface: ChromeUtils.generateQI([
+ "nsIMsgSendListener",
+ "nsIMsgCopyServiceListener",
+ ]),
+};
+
+add_task(async function run_the_test() {
+ server = setupServerDaemon();
+
+ // Test file - for bug 429891
+ var testFile = do_get_file("data/429891_testcase.eml");
+ originalData = await IOUtils.readUTF8(testFile.path);
+
+ // Ensure we have at least one mail account
+ localAccountUtils.loadLocalMailAccount();
+
+ MailServices.accounts.setSpecialFolders();
+
+ server.start();
+ var smtpServer = getBasicSmtpServer(server.port);
+ var identity = getSmtpIdentity(kSender, smtpServer);
+
+ sentFolder = localAccountUtils.rootFolder.createLocalSubfolder("Sent");
+
+ Assert.equal(identity.doFcc, true);
+
+ var msgSend = Cc["@mozilla.org/messengercompose/send;1"].createInstance(
+ Ci.nsIMsgSend
+ );
+
+ // Handle the server in a try/catch/finally loop so that we always will stop
+ // the server if something fails.
+ try {
+ // A test to check that we are sending files correctly, including checking
+ // what the server receives and what we output.
+ test = "sendMessageFile";
+
+ // Msg Comp Fields
+
+ var compFields = Cc[
+ "@mozilla.org/messengercompose/composefields;1"
+ ].createInstance(Ci.nsIMsgCompFields);
+
+ compFields.from = identity.email;
+ compFields.to = kTo;
+
+ var messageListener = new msl();
+
+ msgSend.sendMessageFile(
+ identity,
+ "",
+ compFields,
+ testFile,
+ false,
+ false,
+ Ci.nsIMsgSend.nsMsgDeliverNow,
+ null,
+ messageListener,
+ null,
+ null
+ );
+
+ server.performTest();
+
+ do_timeout(10000, function () {
+ if (!finished) {
+ do_throw("Notifications of message send/copy not received");
+ }
+ });
+
+ do_test_pending();
+ } catch (e) {
+ do_throw(e);
+ } finally {
+ server.stop();
+
+ var thread = gThreadManager.currentThread;
+ while (thread.hasPendingEvents()) {
+ thread.processNextEvent(true);
+ }
+ }
+});