Mercurial > hg > nginx-tests
annotate lib/Test/Nginx/SMTP.pm @ 60:11e33ba0656a
Tests: check for 235 code on successful smtp auth.
For now, convert only check for auth login with username test since it's
already marked as TODO.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 12 Jan 2009 21:53:49 +0300 |
parents | b5b4271554b0 |
children | 5f56040c39df |
rev | line source |
---|---|
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
1 package Test::Nginx::SMTP; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
5 # Module for nginx smtp tests. |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
12 use Test::More qw//; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 use IO::Socket; |
7
9eb509695651
Tests: drop our own CRLF constant, use Socket's one instead.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6
diff
changeset
|
14 use Socket qw/ CRLF /; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
16 use Test::Nginx; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
18 use base qw/ IO::Socket::INET /; |
12
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
19 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
20 sub new { |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
21 my $class = shift; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
23 my $self = return $class->SUPER::new( |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 Proto => "tcp", |
45
d68b85def521
Tests: use 127.0.0.1 instead of localhost.
Maxim Dounin <mdounin@mdounin.ru>
parents:
44
diff
changeset
|
25 PeerAddr => "127.0.0.1:8025", |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 @_ |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 ) |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 or die "Can't connect to nginx: $!\n"; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
30 $self->autoflush(1); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
32 return $self; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
35 sub send { |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
36 my ($self, $cmd) = @_; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 log_out($cmd); |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
38 $self->print($cmd . CRLF); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
41 sub read { |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
42 my ($self) = @_; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 eval { |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 alarm(2); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 local $SIG{ALRM} = sub { die "alarm\n" }; |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
46 while (<$self>) { |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 log_in($_); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 next if m/^\d\d\d-/; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 last; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 alarm(0); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 }; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 alarm(0); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 if ($@) { |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 return undef; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 return $_; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
60 sub check { |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
61 my ($self, $regex, $name) = @_; |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
62 Test::More->builder->like($self->read(), $regex, $name); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
65 sub ok { |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
66 my $self = shift; |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
67 Test::More->builder->like($self->read(), qr/^2\d\d /, @_); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 |
60
11e33ba0656a
Tests: check for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
70 sub authok { |
11e33ba0656a
Tests: check for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
71 my $self = shift; |
11e33ba0656a
Tests: check for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
72 Test::More->builder->like($self->read(), qr/^235 /, @_); |
11e33ba0656a
Tests: check for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
73 } |
11e33ba0656a
Tests: check for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
74 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
77 sub smtp_test_daemon { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
78 my $server = IO::Socket::INET->new( |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
79 Proto => 'tcp', |
44
daa295331acd
Tests: don't bind backend daemons to *, use 127.0.0.1 instead.
Maxim Dounin <mdounin@mdounin.ru>
parents:
26
diff
changeset
|
80 LocalAddr => '127.0.0.1:8026', |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
81 Listen => 5, |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
82 Reuse => 1 |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
83 ) |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
84 or die "Can't create listening socket: $!\n"; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
85 |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
86 while (my $client = $server->accept()) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
87 $client->autoflush(1); |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
88 print $client "220 fake esmtp server ready" . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
89 |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
90 while (<$client>) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
91 if (/^quit/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
92 print $client '221 quit ok' . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
93 } elsif (/^(ehlo|helo)/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
94 print $client '250 hello ok' . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
95 } elsif (/^rset/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
96 print $client '250 rset ok' . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
97 } elsif (/^mail from:[^@]+$/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
98 print $client '500 mail from error' . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
99 } elsif (/^mail from:/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
100 print $client '250 mail from ok' . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
101 } elsif (/^rcpt to:[^@]+$/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
102 print $client '500 rcpt to error' . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
103 } elsif (/^rcpt to:/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
104 print $client '250 rcpt to ok' . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
105 } else { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
106 print $client "500 unknown command" . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
107 } |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
108 } |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
109 |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
110 close $client; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
111 } |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
112 } |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
113 |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
114 ############################################################################### |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
115 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 1; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 ############################################################################### |