Mercurial > hg > nginx-tests
annotate smtp.t @ 114:44b281ac4bc6
Tests: add server name tests, including fancy regex ones.
With test config nginx will fail to start as of 0.8.28 due to incorrect
conversion of regular expressions to lowercase. Patch was discussed on
mailing list and will be included in next release.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 30 Nov 2009 14:47:17 +0300 |
parents | 1c0ec30614c6 |
children | 8ac1faaddd2c |
rev | line source |
---|---|
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Tests for nginx mail smtp module. |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
27
fb94a224fef2
Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
26
diff
changeset
|
12 use Test::More; |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 use MIME::Base64; |
7
9eb509695651
Tests: drop our own CRLF constant, use Socket's one instead.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5
diff
changeset
|
15 use Socket qw/ CRLF /; |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 |
9
f772e2a1a13f
Tests: change directory to allow runing from outside.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
17 BEGIN { use FindBin; chdir($FindBin::Bin); } |
f772e2a1a13f
Tests: change directory to allow runing from outside.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7
diff
changeset
|
18 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
19 use lib 'lib'; |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
20 use Test::Nginx; |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
21 use Test::Nginx::SMTP; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4
diff
changeset
|
22 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4
diff
changeset
|
23 ############################################################################### |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 |
2
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
25 select STDERR; $| = 1; |
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
26 select STDOUT; $| = 1; |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 |
96
ecff5407867c
Tests: better handle unexpected connection close from nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
72
diff
changeset
|
28 local $SIG{PIPE} = 'IGNORE'; |
ecff5407867c
Tests: better handle unexpected connection close from nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
72
diff
changeset
|
29 |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
17
diff
changeset
|
30 my $t = Test::Nginx->new() |
58
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
31 ->has('mail')->plan(25) |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
17
diff
changeset
|
32 ->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon) |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
17
diff
changeset
|
33 ->write_file_expand('nginx.conf', <<'EOF')->run(); |
17
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
34 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
96
diff
changeset
|
35 %%TEST_GLOBALS%% |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
96
diff
changeset
|
36 |
17
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
37 master_process off; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
38 daemon off; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
39 |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
40 events { |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
41 } |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
42 |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
43 mail { |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
44 proxy_pass_error_message on; |
45
d68b85def521
Tests: use 127.0.0.1 instead of localhost.
Maxim Dounin <mdounin@mdounin.ru>
parents:
35
diff
changeset
|
45 auth_http http://127.0.0.1:8080/mail/auth; |
17
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
46 xclient off; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
47 |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
48 server { |
45
d68b85def521
Tests: use 127.0.0.1 instead of localhost.
Maxim Dounin <mdounin@mdounin.ru>
parents:
35
diff
changeset
|
49 listen 127.0.0.1:8025; |
17
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
50 protocol smtp; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
51 smtp_auth login plain none; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
52 } |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
53 } |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
54 |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
55 http { |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
96
diff
changeset
|
56 %%TEST_GLOBALS_HTTP%% |
35
7bf0e8a1d66c
Tests: always define temp paths.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
57 |
17
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
58 server { |
45
d68b85def521
Tests: use 127.0.0.1 instead of localhost.
Maxim Dounin <mdounin@mdounin.ru>
parents:
35
diff
changeset
|
59 listen 127.0.0.1:8080; |
17
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
60 server_name localhost; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
61 |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
62 location = /mail/auth { |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
63 set $reply ERROR; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
64 |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
65 if ($http_auth_smtp_to ~ example.com) { |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
66 set $reply OK; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
67 } |
56
573c8293ac38
Tests: fix smtp auth plain tests to check username.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
68 |
573c8293ac38
Tests: fix smtp auth plain tests to check username.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
69 set $userpass "$http_auth_user:$http_auth_pass"; |
573c8293ac38
Tests: fix smtp auth plain tests to check username.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
70 if ($userpass ~ '^test@example.com:secret$') { |
17
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
71 set $reply OK; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
72 } |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
73 |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
74 add_header Auth-Status $reply; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
75 add_header Auth-Server 127.0.0.1; |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
17
diff
changeset
|
76 add_header Auth-Port 8026; |
17
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
77 add_header Auth-Wait 1; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
78 return 204; |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
79 } |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
80 } |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
81 } |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
82 |
7e28c64edf55
Tests: reorganize smtp tests (no real changes).
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
83 EOF |
4
6c41dbb2954f
Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
3
diff
changeset
|
84 |
6c41dbb2954f
Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
3
diff
changeset
|
85 ############################################################################### |
6c41dbb2954f
Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
3
diff
changeset
|
86 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
87 my $s = Test::Nginx::SMTP->new(); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
88 $s->check(qr/^220 /, "greeting"); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
90 $s->send('EHLO example.com'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
91 $s->check(qr/^250 /, "ehlo"); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 |
56
573c8293ac38
Tests: fix smtp auth plain tests to check username.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
93 $s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0bad", '')); |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
94 $s->check(qr/^5.. /, 'auth plain with bad password'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 |
56
573c8293ac38
Tests: fix smtp auth plain tests to check username.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
96 $s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0secret", '')); |
69
30d6cce3f0bd
Tests: more checks for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
97 $s->authok('auth plain'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 # We are talking to backend from this point |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
101 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
102 $s->ok('mail from after auth'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
104 $s->send('RSET'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
105 $s->ok('rset'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
107 $s->send('MAIL FROM:<test@xn--e1afmkfd.xn--80akhbyknj4f> SIZE=100'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
108 $s->ok("idn mail from (example.test in russian)"); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
110 $s->send('QUIT'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
111 $s->ok("quit"); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 |
58
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
113 # Try auth login in simple form |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
114 |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
115 $s = Test::Nginx::SMTP->new(); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
116 $s->read(); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
117 $s->send('EHLO example.com'); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
118 $s->read(); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
119 |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
120 $s->send('AUTH LOGIN'); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
121 $s->check(qr/^334 VXNlcm5hbWU6/, 'auth login simple username challenge'); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
122 $s->send(encode_base64('test@example.com', '')); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
123 $s->check(qr/^334 UGFzc3dvcmQ6/, 'auth login simple password challenge'); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
124 $s->send(encode_base64('secret', '')); |
69
30d6cce3f0bd
Tests: more checks for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
125 $s->authok('auth login simple'); |
58
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
126 |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
127 # Try auth plain with username. Details: |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
128 # |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
129 # [MS-XLOGIN]: SMTP Protocol AUTH LOGIN Extension Specification |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
130 # http://download.microsoft.com/download/5/D/D/5DD33FDF-91F5-496D-9884-0A0B0EE698BB/%5BMS-XLOGIN%5D.pdf |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
131 |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
132 $s = Test::Nginx::SMTP->new(); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
133 $s->read(); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
134 $s->send('EHLO example.com'); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
135 $s->read(); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
136 |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
137 $s->send('AUTH LOGIN ' . encode_base64('test@example.com', '')); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
138 $s->check(qr/^334 UGFzc3dvcmQ6/, 'auth login with username password challenge'); |
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
139 $s->send(encode_base64('secret', '')); |
60
11e33ba0656a
Tests: check for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
58
diff
changeset
|
140 $s->authok('auth login with username'); |
58
d053b4bf6ec6
Tests: add smtp auth login tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
141 |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 # Try auth plain with pipelining |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
143 |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
144 TODO: { |
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
145 local $TODO = 'pipelining not in official nginx'; |
72
24143894b91b
Tests: shut up warnings for TODO tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
71
diff
changeset
|
146 local $SIG{__WARN__} = sub {}; |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
147 |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
148 $s = Test::Nginx::SMTP->new(); |
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
149 $s->read(); |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
150 $s->send('EHLO example.com'); |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
151 $s->read(); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
153 $s->send('INVALID COMMAND WITH ARGUMENTS' . CRLF |
2
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
154 . 'RSET'); |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
155 $s->read(); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
156 $s->ok('pipelined rset after invalid command'); |
1
c731d50dd6b1
Tests: check pipelining after invalid command.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
157 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
158 $s->send('AUTH PLAIN ' |
56
573c8293ac38
Tests: fix smtp auth plain tests to check username.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
159 . encode_base64("\0test\@example.com\0bad", '') . CRLF |
2
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
160 . 'MAIL FROM:<test@example.com> SIZE=100'); |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
161 $s->read(); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
162 $s->ok('mail from after failed pipelined auth'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
163 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
164 $s->send('AUTH PLAIN ' |
56
573c8293ac38
Tests: fix smtp auth plain tests to check username.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
165 . encode_base64("\0test\@example.com\0secret", '') . CRLF |
2
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
166 . 'MAIL FROM:<test@example.com> SIZE=100'); |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
167 $s->read(); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
168 $s->ok('mail from after pipelined auth'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
169 |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
170 } |
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
171 |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 # Try auth none |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
174 $s = Test::Nginx::SMTP->new(); |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
175 $s->read(); |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
176 $s->send('EHLO example.com'); |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
177 $s->read(); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
178 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
179 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
180 $s->ok('auth none - mail from'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
182 $s->send('RCPT TO:<test@example.com>'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
183 $s->ok('auth none - rcpt to'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
184 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
185 $s->send('RSET'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
186 $s->ok('auth none - rset, should go to backend'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
187 |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
188 # Auth none with pipelining |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
189 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
190 $s = Test::Nginx::SMTP->new(); |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
191 $s->read(); |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
192 $s->send('EHLO example.com'); |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
193 $s->read(); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
194 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
195 $s->send('MAIL FROM:<test@example.com> SIZE=100' . CRLF |
2
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
196 . 'RCPT TO:<test@example.com>' . CRLF |
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
197 . 'RSET'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
198 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
199 $s->ok('pipelined mail from'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
200 |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
201 TODO: { |
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
202 local $TODO = 'pipelining not in official nginx'; |
72
24143894b91b
Tests: shut up warnings for TODO tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
71
diff
changeset
|
203 local $SIG{__WARN__} = sub {}; |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
204 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
205 $s->ok('pipelined rcpt to'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
206 $s->ok('pipelined rset'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
207 |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
208 } |
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
209 |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
210 # Connection must stay even if error returned to rcpt to command |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
211 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
212 $s = Test::Nginx::SMTP->new(); |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
213 $s->read(); |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
214 $s->send('EHLO example.com'); |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
56
diff
changeset
|
215 $s->read(); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
216 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
217 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
218 $s->read(); # skip mail from reply |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
219 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
220 $s->send('RCPT TO:<example.com>'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
221 $s->check(qr/^5.. /, "bad rcpt to"); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
222 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
223 $s->send('RCPT TO:<test@example.com>'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
224 $s->ok('good rcpt to'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
225 |
2
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
226 # Make sure command splitted into many packets processed correctly |
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
227 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
228 $s = Test::Nginx::SMTP->new(); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
229 $s->read(); |
2
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
230 |
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
231 log_out('HEL'); |
33cb557f69d4
Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
232 $s->print('HEL'); |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
233 $s->send('O example.com'); |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
9
diff
changeset
|
234 $s->ok('splitted command'); |
0
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
235 |
de28d9f761be
Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
236 ############################################################################### |