annotate smtp.t @ 4:6c41dbb2954f

Tests: run nginx with appropriate config from test itself.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 03 Sep 2008 23:26:29 +0400
parents ce002b2323d3
children 4d75bdb05ecf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
4
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
12 use Test::More tests => 28;
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
4
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
14 use File::Temp qw/ tempdir /;
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 use IO::Socket;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use MIME::Base64;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use constant CRLF => "\x0D\x0A";
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
2
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
20 select STDERR; $| = 1;
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
21 select STDOUT; $| = 1;
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22
4
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
23 ###############################################################################
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
24
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
25 # Create temp directory and run nginx instance.
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
26
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
27 my $tempdir = tempdir('nginx-test-XXXXXXXXXX', TMPDIR => 1, CLEANUP => 1)
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
28 or die "Can't create temp directory: $!\n";
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
29
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
30 my $pid = fork();
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
31 die "Unable to fork(): $!\n" unless defined $pid;
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
32
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
33 if ($pid == 0) {
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
34 exec('../nginx/objs/nginx', '-c', 'smtp.conf', '-g',
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
35 "pid $tempdir/nginx.pid; error_log $tempdir/nginx-error.log info;")
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
36 or die "Unable to exec(): $!\n";
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
37 print "# child after exec - not reached\n";
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
38 }
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
39
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
40 END {
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
41 # terminate nginx by SIGTERM
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
42 kill 15, $pid;
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
43 wait;
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
44 }
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
45
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
46 # Give nginx some time to start.
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
47
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
48 sleep 1;
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
49
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
50 ###############################################################################
6c41dbb2954f Tests: run nginx with appropriate config from test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3
diff changeset
51
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 my $s = smtp_connect();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 smtp_check(qr/^220 /, "greeting");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 smtp_send('EHLO example.com');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 smtp_check(qr/^250 /, "ehlo");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 smtp_send('AUTH PLAIN ' . encode_base64("test\@example.com\0\0bad", ''));
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 smtp_check(qr/^5.. /, 'auth plain with bad password');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 smtp_send('AUTH PLAIN ' . encode_base64("test\@example.com\0\0secret", ''));
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 smtp_ok('auth plain');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 # We are talking to backend from this point
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 smtp_send('MAIL FROM:<test@example.com> SIZE=100');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 smtp_ok('mail from after auth');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 smtp_send('RSET');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 smtp_ok('rset');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 smtp_send('MAIL FROM:<test@xn--e1afmkfd.xn--80akhbyknj4f> SIZE=100');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 smtp_ok("idn mail from (example.test in russian)");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 smtp_send('QUIT');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 smtp_ok("quit");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 # Try auth plain with pipelining
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 $s = smtp_connect();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 smtp_check(qr/^220 /, "greeting");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 smtp_send('EHLO example.com');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 smtp_check(qr/^250 /, "ehlo");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85
2
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
86 smtp_send('INVALID COMMAND WITH ARGUMENTS' . CRLF
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
87 . 'RSET');
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
88 smtp_read();
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
89 smtp_ok('pipelined rset after invalid command');
1
c731d50dd6b1 Tests: check pipelining after invalid command.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
90
2
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
91 smtp_send('AUTH PLAIN '
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
92 . encode_base64("test\@example.com\0\0bad", '') . CRLF
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
93 . 'MAIL FROM:<test@example.com> SIZE=100');
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
94 smtp_read();
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
95 smtp_ok('mail from after failed pipelined auth');
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96
2
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
97 smtp_send('AUTH PLAIN '
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
98 . encode_base64("test\@example.com\0\0secret", '') . CRLF
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
99 . 'MAIL FROM:<test@example.com> SIZE=100');
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
100 smtp_read();
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
101 smtp_ok('mail from after pipelined auth');
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 # Try auth none
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 $s = smtp_connect();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 smtp_check(qr/^220 /, "greeting");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 smtp_send('EHLO example.com');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 smtp_check(qr/^250 /, "ehlo");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 smtp_send('MAIL FROM:<test@example.com> SIZE=100');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 smtp_ok('auth none - mail from');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 smtp_send('RCPT TO:<test@example.com>');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 smtp_ok('auth none - rcpt to');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 smtp_send('RSET');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 smtp_ok('auth none - rset, should go to backend');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 # Auth none with pipelining
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 $s = smtp_connect();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 smtp_check(qr/^220 /, "greeting");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 smtp_send('EHLO example.com');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 smtp_check(qr/^250 /, "ehlo");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127
2
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
128 smtp_send('MAIL FROM:<test@example.com> SIZE=100' . CRLF
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
129 . 'RCPT TO:<test@example.com>' . CRLF
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
130 . 'RSET');
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131
2
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
132 smtp_ok('pipelined mail from');
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133
2
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
134 smtp_ok('pipelined rcpt to');
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
135 smtp_ok('pipelined rset');
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 # 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
138
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 $s = smtp_connect();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 smtp_read(); # skip greeting
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 smtp_send('EHLO example.com');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 smtp_read(); # skip ehlo reply
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 smtp_send('MAIL FROM:<test@example.com> SIZE=100');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 smtp_read(); # skip mail from reply
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 smtp_send('RCPT TO:<example.com>');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 smtp_check(qr/^5.. /, "bad rcpt to");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151 smtp_send('RCPT TO:<test@example.com>');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 smtp_ok('good rcpt to');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153
2
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
154 # 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
155
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
156 $s = smtp_connect();
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
157 smtp_read();
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
158
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
159 log_out('HEL');
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
160 $s->print('HEL');
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
161 smtp_send('O example.com');
33cb557f69d4 Tests: smtp pipelining is here, remove todo flags.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
162 smtp_ok('splitted command');
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163
3
ce002b2323d3 Tests: test for smtp_greeting_delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
164 # With smtp_greeting_delay session expected to be closed after first error
ce002b2323d3 Tests: test for smtp_greeting_delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
165 # message if client sent something before greeting. Use 10026 port
ce002b2323d3 Tests: test for smtp_greeting_delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
166 # configured with smtp_greeting_delay 0.1s to check this.
ce002b2323d3 Tests: test for smtp_greeting_delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
167
ce002b2323d3 Tests: test for smtp_greeting_delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
168 $s = smtp_connect(PeerPort => 10026);
ce002b2323d3 Tests: test for smtp_greeting_delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
169 smtp_send('HELO example.com');
ce002b2323d3 Tests: test for smtp_greeting_delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
170 smtp_check(qr/^5.. /, "command before greeting - session must be rejected");
ce002b2323d3 Tests: test for smtp_greeting_delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
171 ok($s->eof(), "session have to be closed");
ce002b2323d3 Tests: test for smtp_greeting_delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
172
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 ###############################################################################
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 sub log_out {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 my ($msg) = @_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 $msg =~ s/^/# >> /gm;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 $msg .= "\n" unless $msg =~ /\n\Z/;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 print $msg;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 sub log_in {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183 my ($msg) = @_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 $msg =~ s/\x0d/\\x0d/gm;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185 $msg =~ s/\x0a/\\x0a/gm;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 print '# << ' . $msg . "\n";
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
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189 sub smtp_connect {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 my $s = IO::Socket::INET->new(
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 Proto => "tcp",
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 PeerAddr => "localhost",
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193 PeerPort => 10025,
3
ce002b2323d3 Tests: test for smtp_greeting_delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
194 @_
0
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 )
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196 or die "Can't connect to nginx: $!\n";
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198 $s->autoflush(1);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 return $s;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203 sub smtp_send {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 my ($cmd) = @_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 log_out($cmd);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206 $s->print($cmd . CRLF);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 sub smtp_read {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 my ($regex, $name) = @_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 eval {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
212 alarm(2);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
213 local $SIG{ALRM} = sub { die "alarm\n" };
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
214 while (<$s>) {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 log_in($_);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 next if m/^\d\d\d-/;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217 last;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 alarm(0);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 };
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 alarm(0);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
222 if ($@) {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
223 return undef;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
225 return $_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 sub smtp_check {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 my ($regex, $name) = @_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 like(smtp_read(), $regex, $name);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 sub smtp_ok {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 smtp_check(qr/^2\d\d /, @_);
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
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
237 ###############################################################################