annotate smtp.t @ 0:de28d9f761be

Tests for nginx. Initial smtp testing.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 15 Aug 2008 18:17:24 +0400
parents
children c731d50dd6b1
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
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More tests => 24;
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 IO::Socket;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 use MIME::Base64;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use constant CRLF => "\x0D\x0A";
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 $| = 1;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 my $s = smtp_connect();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 smtp_check(qr/^220 /, "greeting");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 smtp_send('EHLO example.com');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 smtp_check(qr/^250 /, "ehlo");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 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
28 smtp_check(qr/^5.. /, 'auth plain with bad password');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 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
31 smtp_ok('auth plain');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 # We are talking to backend from this point
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 smtp_send('MAIL FROM:<test@example.com> SIZE=100');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 smtp_ok('mail from after auth');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 smtp_send('RSET');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 smtp_ok('rset');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 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
42 smtp_ok("idn mail from (example.test in russian)");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 smtp_send('QUIT');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 smtp_ok("quit");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 # Try auth plain with pipelining
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 $s = smtp_connect();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 smtp_check(qr/^220 /, "greeting");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 smtp_send('EHLO example.com');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 smtp_check(qr/^250 /, "ehlo");
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 TODO: {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 local $TODO = "pipelining not implemented yet";
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 '
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 . encode_base64("test\@example.com\0\0bad", '') . CRLF
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 . 'MAIL FROM:<test@example.com> SIZE=100');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 smtp_read();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 smtp_ok('mail from after failed pipelined auth');
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 smtp_send('AUTH PLAIN '
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 . encode_base64("test\@example.com\0\0secret", '') . CRLF
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 . 'MAIL FROM:<test@example.com> SIZE=100');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 smtp_read();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 smtp_ok('mail from after pipelined auth');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 # Try auth none
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 $s = smtp_connect();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 smtp_check(qr/^220 /, "greeting");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 smtp_send('EHLO example.com');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 smtp_check(qr/^250 /, "ehlo");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 smtp_send('MAIL FROM:<test@example.com> SIZE=100');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 smtp_ok('auth none - mail from');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 smtp_send('RCPT TO:<test@example.com>');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 smtp_ok('auth none - rcpt to');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 smtp_send('RSET');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 smtp_ok('auth none - rset, should go to backend');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 # Auth none with pipelining
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 $s = smtp_connect();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 smtp_check(qr/^220 /, "greeting");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 smtp_send('EHLO example.com');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 smtp_check(qr/^250 /, "ehlo");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 TODO: {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 smtp_send('MAIL FROM:<test@example.com> SIZE=100' . CRLF
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 . 'RCPT TO:<test@example.com>' . CRLF
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 . 'RSET');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 smtp_ok('pipelined mail from');
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 local $TODO = "pipelining not implemented yet";
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 smtp_ok('pipelined rcpt to');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 smtp_ok('pipelined rset');
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
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 # 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
110
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 $s = smtp_connect();
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 smtp_read(); # skip greeting
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('EHLO example.com');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 smtp_read(); # skip ehlo reply
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('MAIL FROM:<test@example.com> SIZE=100');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 smtp_read(); # skip mail from reply
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 smtp_send('RCPT TO:<example.com>');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 smtp_check(qr/^5.. /, "bad rcpt to");
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 smtp_send('RCPT TO:<test@example.com>');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 smtp_ok('good rcpt to');
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 ###############################################################################
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 sub log_out {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 my ($msg) = @_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 $msg =~ s/^/# >> /gm;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 $msg .= "\n" unless $msg =~ /\n\Z/;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 print $msg;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 sub log_in {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 my ($msg) = @_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 $msg =~ s/\x0d/\\x0d/gm;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 $msg =~ s/\x0a/\\x0a/gm;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 print '# << ' . $msg . "\n";
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
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 sub smtp_connect {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 my $s = IO::Socket::INET->new(
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 Proto => "tcp",
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 PeerAddr => "localhost",
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 PeerPort => 10025,
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 )
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 or die "Can't connect to nginx: $!\n";
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 $s->autoflush(1);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 return $s;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 sub smtp_send {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 my ($cmd) = @_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 log_out($cmd);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159 $s->print($cmd . CRLF);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 sub smtp_read {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 my ($regex, $name) = @_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 eval {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 alarm(2);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 local $SIG{ALRM} = sub { die "alarm\n" };
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 while (<$s>) {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168 log_in($_);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 next if m/^\d\d\d-/;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170 last;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172 alarm(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 alarm(0);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 if ($@) {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 return undef;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 return $_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 }
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 sub smtp_check {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 my ($regex, $name) = @_;
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183 like(smtp_read(), $regex, $name);
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 }
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 sub smtp_ok {
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 smtp_check(qr/^2\d\d /, @_);
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
de28d9f761be Tests for nginx. Initial smtp testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 ###############################################################################