summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/local/test/unit/test_pop3Client.js
blob: 19e71a3e78a97f2d7be4ef6d3c3d12777dde29af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/* 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/. */

let [daemon, server, handler] = setupServerDaemon();
handler.kCapabilities = ["uidl", "top"]; // CAPA response is case-insensitive.
server.start();
registerCleanupFunction(() => {
  server.stop();
});

/**
 * Test when alwaysSTARTTLS is set, but the server doesn't support STARTTLS,
 * should abort after CAPA response.
 */
add_task(async function testSTARTTLS() {
  server.resetTest();

  let incomingServer = createPop3ServerAndLocalFolders(server.port);
  // Set to always use STARTTLS.
  incomingServer.socketType = Ci.nsMsgSocketType.alwaysSTARTTLS;

  let urlListener = {
    OnStartRunningUrl() {},
    OnStopRunningUrl(url, result) {
      try {
        let transaction = server.playTransaction();
        do_check_transaction(transaction, ["AUTH", "CAPA"]);
        Assert.equal(result, Cr.NS_ERROR_FAILURE);
      } catch (e) {
      } finally {
        MailServices.accounts.removeIncomingServer(incomingServer, false);
        do_test_finished();
      }
    },
  };

  // Now get the mail.
  MailServices.pop3.GetNewMail(
    null,
    urlListener,
    localAccountUtils.inboxFolder,
    incomingServer
  );

  server.performTest();

  do_test_pending();
});

/**
 * Test that depending on user prefs and message size, TOP or RETR should be used.
 *
 * @param {nsIMsgIncomingServer} incomingServer - A server instance.
 * @param {string[]} transaction - The commands sent to the server.
 */
async function testTopOrRetr(incomingServer, transaction) {
  server.resetTest();
  // Any message file larger than 50KB is good for this test.
  daemon.setMessages(["mailformed_subject.eml"]);

  let urlListener = {
    OnStartRunningUrl() {},
    OnStopRunningUrl(url, result) {
      try {
        do_check_transaction(server.playTransaction(), transaction);
        Assert.equal(result, 0);
      } catch (e) {
      } finally {
        MailServices.accounts.removeIncomingServer(incomingServer, false);
        do_test_finished();
      }
    },
  };

  // Now get the mail.
  MailServices.pop3.GetNewMail(
    null,
    urlListener,
    localAccountUtils.inboxFolder,
    incomingServer
  );

  server.performTest();

  do_test_pending();
}

/**
 * Turn off server.limitOfflineMessageSize, test RETR is used.
 */
add_task(async function testNoOfflineMessageSizeLimit() {
  let incomingServer = createPop3ServerAndLocalFolders(server.port);
  incomingServer.limitOfflineMessageSize = false;
  incomingServer.maxMessageSize = 1;

  testTopOrRetr(incomingServer, [
    "AUTH",
    "CAPA",
    "AUTH PLAIN",
    "STAT",
    "LIST",
    "UIDL",
    "RETR 1",
    "DELE 1",
  ]);
});

/**
 * Turn on server.limitOfflineMessageSize and set maxMessageSize to 1KB, test
 * TOP is used.
 */
add_task(async function testMaxMessageSize() {
  let incomingServer = createPop3ServerAndLocalFolders(server.port);
  incomingServer.limitOfflineMessageSize = true;
  incomingServer.maxMessageSize = 1;

  testTopOrRetr(incomingServer, [
    "AUTH",
    "CAPA",
    "AUTH PLAIN",
    "STAT",
    "LIST",
    "UIDL",
    "TOP 1 20",
  ]);
});

/**
 * Turn on server.headersOnly, test TOP is used.
 */
add_task(async function testHeadersOnly() {
  let incomingServer = createPop3ServerAndLocalFolders(server.port);
  incomingServer.headersOnly = true;

  testTopOrRetr(incomingServer, [
    "AUTH",
    "CAPA",
    "AUTH PLAIN",
    "STAT",
    "LIST",
    "UIDL",
    "TOP 1 0",
  ]);
});