1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.net.pop3;
18
19 import java.io.IOException;
20 import java.io.Reader;
21 import java.net.InetAddress;
22
23 import junit.framework.TestCase;
24
25
26
27
28
29
30
31
32
33
34
35 public class POP3ClientCommandsTest extends TestCase {
36 POP3Client pop3Client;
37
38 String user = POP3Constants.user;
39 String emptyUser = POP3Constants.emptyuser;
40 String password = POP3Constants.password;
41 String mailhost = POP3Constants.mailhost;
42
43 public POP3ClientCommandsTest(final String name) {
44 super(name);
45 }
46
47 private void connect() throws Exception {
48 pop3Client.connect(InetAddress.getByName(mailhost));
49 assertTrue(pop3Client.isConnected());
50 assertEquals(POP3.AUTHORIZATION_STATE, pop3Client.getState());
51 }
52
53 private void login() throws Exception {
54 assertTrue(pop3Client.login(user, password));
55 assertEquals(POP3.TRANSACTION_STATE, pop3Client.getState());
56 }
57
58 private void reset() throws IOException {
59
60 if (pop3Client == null) {
61
62 } else if (pop3Client.isConnected()) {
63 pop3Client.disconnect();
64 }
65 pop3Client = null;
66 pop3Client = new POP3Client();
67 }
68
69 public void testDelete() throws Exception {
70 reset();
71 connect();
72 login();
73
74 POP3MessageInfo[] msg = pop3Client.listMessages();
75 final int numMessages = msg.length;
76 int numDeleted = 0;
77
78
79 for (int i = 0; i < numMessages - 3; i++) {
80 pop3Client.deleteMessage(i + 1);
81 numDeleted++;
82 }
83
84 assertEquals(numMessages, numDeleted + 3);
85
86
87 pop3Client.logout();
88 reset();
89 connect();
90 login();
91
92
93
94 msg = pop3Client.listMessages();
95 assertEquals(numMessages - numDeleted, msg.length);
96 }
97
98 public void testDeleteWithReset() throws Exception {
99 reset();
100 connect();
101 login();
102
103 POP3MessageInfo[] msg = pop3Client.listMessages();
104 final int numMessages = msg.length;
105 int numDeleted = 0;
106
107
108 for (int i = 0; i < numMessages - 1; i++) {
109 pop3Client.deleteMessage(i + 1);
110 numDeleted++;
111 }
112
113 assertEquals(numMessages, numDeleted + 1);
114
115
116 pop3Client.reset();
117
118
119 pop3Client.logout();
120 reset();
121 connect();
122 login();
123
124
125
126 msg = pop3Client.listMessages();
127 assertEquals(numMessages, msg.length);
128 }
129
130 public void testListMessageOnEmptyMailbox() throws Exception {
131 reset();
132 connect();
133 assertTrue(pop3Client.login(emptyUser, password));
134
135
136 final POP3MessageInfo msg = pop3Client.listMessage(1);
137 assertNull(msg);
138 }
139
140 public void testListMessageOnFullMailbox() throws Exception {
141 reset();
142 connect();
143 login();
144
145
146 POP3MessageInfo msg = pop3Client.listMessage(1);
147 assertNotNull(msg);
148 assertEquals(1, msg.number);
149 assertTrue(msg.size > 0);
150 assertNull(msg.identifier);
151
152
153 msg = pop3Client.listMessage(0);
154 assertNull(msg);
155
156
157 msg = pop3Client.listMessage(100000);
158 assertNull(msg);
159
160
161 msg = pop3Client.listMessage(-2);
162 assertNull(msg);
163
164
165 pop3Client.setState(POP3.UPDATE_STATE);
166 msg = pop3Client.listMessage(1);
167 assertNull(msg);
168 }
169
170 public void testListMessagesOnEmptyMailbox() throws Exception {
171 reset();
172 connect();
173 assertTrue(pop3Client.login(emptyUser, password));
174
175 POP3MessageInfo[] msg = pop3Client.listMessages();
176 assertEquals(0, msg.length);
177
178
179 pop3Client.setState(POP3.UPDATE_STATE);
180 msg = pop3Client.listMessages();
181 assertNull(msg);
182 }
183
184 public void testListMessagesOnFullMailbox() throws Exception {
185 reset();
186 connect();
187 login();
188
189 POP3MessageInfo[] msg = pop3Client.listMessages();
190 assertTrue(msg.length > 0);
191
192 for (int i = 0; i < msg.length; i++) {
193 assertNotNull(msg[i]);
194 assertEquals(i + 1, msg[i].number);
195 assertTrue(msg[i].size > 0);
196 assertNull(msg[i].identifier);
197 }
198
199
200 pop3Client.setState(POP3.UPDATE_STATE);
201 msg = pop3Client.listMessages();
202 assertNull(msg);
203 }
204
205 public void testListUniqueIdentifierOnEmptyMailbox() throws Exception {
206 reset();
207 connect();
208 assertTrue(pop3Client.login(emptyUser, password));
209
210
211 final POP3MessageInfo msg = pop3Client.listUniqueIdentifier(1);
212 assertNull(msg);
213 }
214
215 public void testListUniqueIDOnFullMailbox() throws Exception {
216 reset();
217 connect();
218 login();
219
220
221 POP3MessageInfo msg = pop3Client.listUniqueIdentifier(1);
222 assertNotNull(msg);
223 assertEquals(1, msg.number);
224 assertNotNull(msg.identifier);
225
226
227 msg = pop3Client.listUniqueIdentifier(0);
228 assertNull(msg);
229
230
231 msg = pop3Client.listUniqueIdentifier(100000);
232 assertNull(msg);
233
234
235 msg = pop3Client.listUniqueIdentifier(-2);
236 assertNull(msg);
237
238
239 pop3Client.setState(POP3.UPDATE_STATE);
240 msg = pop3Client.listUniqueIdentifier(1);
241 assertNull(msg);
242 }
243
244 public void testListUniqueIDsOnEmptyMailbox() throws Exception {
245 reset();
246 connect();
247 assertTrue(pop3Client.login(emptyUser, password));
248
249 POP3MessageInfo[] msg = pop3Client.listUniqueIdentifiers();
250 assertEquals(0, msg.length);
251
252
253 pop3Client.setState(POP3.UPDATE_STATE);
254 msg = pop3Client.listUniqueIdentifiers();
255 assertNull(msg);
256 }
257
258 public void testListUniqueIDsOnFullMailbox() throws Exception {
259 reset();
260 connect();
261 login();
262
263 POP3MessageInfo[] msg = pop3Client.listUniqueIdentifiers();
264 assertTrue(msg.length > 0);
265
266 for (int i = 0; i < msg.length; i++) {
267 assertNotNull(msg[i]);
268 assertEquals(i + 1, msg[i].number);
269 assertNotNull(msg[i].identifier);
270 }
271
272
273 pop3Client.setState(POP3.UPDATE_STATE);
274 msg = pop3Client.listUniqueIdentifiers();
275 assertNull(msg);
276 }
277
278 public void testNoopCommand() throws Exception {
279 reset();
280 connect();
281
282
283 assertFalse(pop3Client.noop());
284
285
286 login();
287 assertTrue(pop3Client.noop());
288
289
290 pop3Client.setState(POP3.UPDATE_STATE);
291 assertFalse(pop3Client.noop());
292 }
293
294 public void testResetAndDeleteShouldFails() throws Exception {
295 reset();
296 connect();
297 login();
298
299 pop3Client.setState(POP3.UPDATE_STATE);
300 assertFalse(pop3Client.reset());
301
302 assertFalse(pop3Client.deleteMessage(1));
303 }
304
305 public void testRetrieveMessageOnEmptyMailbox() throws Exception {
306 reset();
307 connect();
308 assertTrue(pop3Client.login(emptyUser, password));
309 assertNull(pop3Client.retrieveMessage(1));
310 }
311
312 public void testRetrieveMessageOnFullMailbox() throws Exception {
313 reset();
314 connect();
315 login();
316 int reportedSize = 0;
317 int actualSize = 0;
318
319 final POP3MessageInfo[] msg = pop3Client.listMessages();
320 assertTrue(msg.length > 0);
321
322 for (int i = msg.length; i > 0; i--) {
323 reportedSize = msg[i - 1].size;
324 final Reader r = pop3Client.retrieveMessage(i);
325 assertNotNull(r);
326
327 int delaycount = 0;
328 if (!r.ready()) {
329
330
331 Thread.sleep(500);
332 delaycount++;
333
334 if (delaycount == 4) {
335 break;
336 }
337 }
338 while (r.ready()) {
339 r.read();
340 actualSize++;
341 }
342
343
344
345
346
347 assertTrue(actualSize >= reportedSize);
348 }
349 }
350
351 public void testRetrieveMessageShouldFails() throws Exception {
352 reset();
353 connect();
354 login();
355
356
357 assertNull(pop3Client.retrieveMessage(0));
358
359
360 assertNull(pop3Client.retrieveMessage(-2));
361
362
363 assertNull(pop3Client.retrieveMessage(100000));
364
365
366 pop3Client.setState(POP3.UPDATE_STATE);
367 assertNull(pop3Client.retrieveMessage(1));
368 }
369
370 public void testRetrieveMessageTopOnEmptyMailbox() throws Exception {
371 reset();
372 connect();
373 assertTrue(pop3Client.login(emptyUser, password));
374 assertNull(pop3Client.retrieveMessageTop(1, 10));
375 }
376
377 public void testRetrieveMessageTopOnFullMailbox() throws Exception {
378 reset();
379 connect();
380 login();
381 final int numLines = 10;
382
383 final POP3MessageInfo[] msg = pop3Client.listMessages();
384 assertTrue(msg.length > 0);
385
386 for (int i = 0; i < msg.length; i++) {
387 try (Reader reader = pop3Client.retrieveMessageTop(i + 1, numLines)) {
388 assertNotNull(reader);
389 }
390 }
391 }
392
393 public void testRetrieveMessageTopShouldFails() throws Exception {
394 reset();
395 connect();
396 login();
397
398
399 assertNull(pop3Client.retrieveMessageTop(0, 10));
400
401
402 assertNull(pop3Client.retrieveMessageTop(-2, 10));
403
404
405 assertNull(pop3Client.retrieveMessageTop(100000, 10));
406
407
408 pop3Client.setState(POP3.UPDATE_STATE);
409 assertNull(pop3Client.retrieveMessageTop(1, 10));
410 }
411
412 public void testRetrieveOverSizedMessageTopOnFullMailbox() throws Exception {
413 reset();
414 connect();
415 login();
416 int actualSize = 0;
417
418 final POP3MessageInfo msg = pop3Client.listMessage(1);
419 final int reportedSize = msg.size;
420
421
422 final Reader r = pop3Client.retrieveMessageTop(1, 100000);
423 assertNotNull(r);
424
425 int delaycount = 0;
426 while (!r.ready()) {
427
428
429 Thread.sleep(500);
430 delaycount++;
431
432 if (delaycount == 4) {
433 break;
434 }
435 }
436 while (r.ready()) {
437 r.read();
438 actualSize++;
439 }
440
441
442
443
444
445 assertTrue(actualSize >= reportedSize);
446 }
447
448 public void testStatus() throws Exception {
449 reset();
450 connect();
451
452
453 assertNull(pop3Client.status());
454
455
456 login();
457 final POP3MessageInfo msg = pop3Client.status();
458 assertTrue(msg.number > 0);
459 assertTrue(msg.size > 0);
460 assertNull(msg.identifier);
461 pop3Client.logout();
462
463
464 reset();
465 connect();
466 assertTrue(pop3Client.login(emptyUser, password));
467 final POP3MessageInfo msg2 = pop3Client.status();
468 assertEquals(0, msg2.number);
469 assertEquals(0, msg2.size);
470 assertNull(msg2.identifier);
471 pop3Client.logout();
472
473
474 reset();
475 connect();
476 login();
477 pop3Client.setState(POP3.UPDATE_STATE);
478 assertNull(pop3Client.status());
479 }
480 }