Mercurial > hg > nginx-tests
annotate lib/Test/Nginx/SMTP.pm @ 1825:3629eda94c1b
Tests: handling of EWOULDBLOCK from sysread() with IO::Socket::SSL.
With IO::Socket::SSL, when select() reports that the socket is readable,
reading from it might still fail with EWOULDBLOCK, since no application
data is available in the socket. In particular, this might happen with
TLSv1.3 when a session ticket is received after the handshake. Fix is
to explicitly check for EWOULDBLOCK errors.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 21 Mar 2023 02:57:39 +0300 |
parents | d0025a0dead7 |
children | 7b7b64569f55 |
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//; |
1244
575d39cc0e35
Tests: worker_shutdown_timeout within the mail module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
969
diff
changeset
|
13 use IO::Select; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 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
|
15 use Socket qw/ CRLF /; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
17 use Test::Nginx; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 |
540
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
19 sub new { |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
20 my $self = {}; |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
21 bless $self, shift @_; |
12
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
22 |
540
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
23 $self->{_socket} = IO::Socket::INET->new( |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 Proto => "tcp", |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
951
diff
changeset
|
25 PeerAddr => "127.0.0.1:" . port(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 |
540
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
30 if ({@_}->{'SSL'}) { |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
31 require IO::Socket::SSL; |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
32 IO::Socket::SSL->start_SSL($self->{_socket}, @_) |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
33 or die $IO::Socket::SSL::SSL_ERROR . "\n"; |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
34 } |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
35 |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
36 $self->{_socket}->autoflush(1); |
1678
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
37 $self->{_read_buffer} = ''; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
39 return $self; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 |
540
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
42 sub eof { |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
43 my $self = shift; |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
44 return $self->{_socket}->eof(); |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
45 } |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
46 |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
47 sub print { |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
48 my ($self, $cmd) = @_; |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
49 log_out($cmd); |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
50 $self->{_socket}->print($cmd); |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
51 } |
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
52 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
53 sub send { |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
54 my ($self, $cmd) = @_; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 log_out($cmd); |
540
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
56 $self->{_socket}->print($cmd . CRLF); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 |
1678
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
59 sub getline { |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
60 my ($self) = @_; |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
61 my $socket = $self->{_socket}; |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
62 |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
63 if ($self->{_read_buffer} =~ /^(.*?\x0a)(.*)/ms) { |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
64 $self->{_read_buffer} = $2; |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
65 return $1; |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
66 } |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
67 |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
68 while (IO::Select->new($socket)->can_read(8)) { |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
69 $socket->blocking(0); |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
70 my $n = $socket->sysread(my $buf, 1024); |
1825
3629eda94c1b
Tests: handling of EWOULDBLOCK from sysread() with IO::Socket::SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1678
diff
changeset
|
71 my $again = !defined $n && $!{EWOULDBLOCK}; |
1678
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
72 $socket->blocking(1); |
1825
3629eda94c1b
Tests: handling of EWOULDBLOCK from sysread() with IO::Socket::SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1678
diff
changeset
|
73 next if $again; |
1678
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
74 last unless $n; |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
75 |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
76 $self->{_read_buffer} .= $buf; |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
77 |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
78 if ($self->{_read_buffer} =~ /^(.*?\x0a)(.*)/ms) { |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
79 $self->{_read_buffer} = $2; |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
80 return $1; |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
81 } |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
82 }; |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
83 } |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
84 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
85 sub read { |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
86 my ($self) = @_; |
540
481d705b8610
Tests: SSL support in mail backends.
Sergey Kandaurov <pluknet@nginx.com>
parents:
539
diff
changeset
|
87 my $socket = $self->{_socket}; |
1678
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
88 |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
89 while (defined($_ = $self->getline())) { |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
90 log_in($_); |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
91 next if m/^\d\d\d-/; |
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
92 last; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 } |
1678
d0025a0dead7
Tests: better timeout handling in mail tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1660
diff
changeset
|
94 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 return $_; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
98 sub check { |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
99 my ($self, $regex, $name) = @_; |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
100 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
|
101 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
103 sub ok { |
243
de7338227832
Tests: removed trailing spaces.
Homutov Vladimir <vl@nginx.com>
parents:
209
diff
changeset
|
104 my $self = shift; |
57
b5b4271554b0
Test: use TODO for smtp pipelining tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
105 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
|
106 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 |
60
11e33ba0656a
Tests: check for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
108 sub authok { |
243
de7338227832
Tests: removed trailing spaces.
Homutov Vladimir <vl@nginx.com>
parents:
209
diff
changeset
|
109 my $self = shift; |
60
11e33ba0656a
Tests: check for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
110 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
|
111 } |
11e33ba0656a
Tests: check for 235 code on successful smtp auth.
Maxim Dounin <mdounin@mdounin.ru>
parents:
57
diff
changeset
|
112 |
1244
575d39cc0e35
Tests: worker_shutdown_timeout within the mail module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
969
diff
changeset
|
113 sub can_read { |
575d39cc0e35
Tests: worker_shutdown_timeout within the mail module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
969
diff
changeset
|
114 my ($self, $timo) = @_; |
575d39cc0e35
Tests: worker_shutdown_timeout within the mail module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
969
diff
changeset
|
115 IO::Select->new($self->{_socket})->can_read($timo || 3); |
575d39cc0e35
Tests: worker_shutdown_timeout within the mail module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
969
diff
changeset
|
116 } |
575d39cc0e35
Tests: worker_shutdown_timeout within the mail module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
969
diff
changeset
|
117 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
119 |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
120 sub smtp_test_daemon { |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
540
diff
changeset
|
121 my ($port) = @_; |
1660
068c30e9d2c6
Tests: smtp tests with proxy protocol to backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1599
diff
changeset
|
122 my $proxy_protocol; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
540
diff
changeset
|
123 |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
124 my $server = IO::Socket::INET->new( |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
125 Proto => 'tcp', |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
951
diff
changeset
|
126 LocalAddr => '127.0.0.1:' . ($port || port(8026)), |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
127 Listen => 5, |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
128 Reuse => 1 |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
129 ) |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
130 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
|
131 |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
132 while (my $client = $server->accept()) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
133 $client->autoflush(1); |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
134 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
|
135 |
1660
068c30e9d2c6
Tests: smtp tests with proxy protocol to backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1599
diff
changeset
|
136 $proxy_protocol = ''; |
068c30e9d2c6
Tests: smtp tests with proxy protocol to backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1599
diff
changeset
|
137 |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
138 while (<$client>) { |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
60
diff
changeset
|
139 Test::Nginx::log_core('||', $_); |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
60
diff
changeset
|
140 |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
141 if (/^quit/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
142 print $client '221 quit ok' . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
143 } elsif (/^(ehlo|helo)/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
144 print $client '250 hello ok' . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
145 } elsif (/^rset/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
146 print $client '250 rset ok' . CRLF; |
1599
4e0644119341
Tests: proxy_smtp_auth directive tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1423
diff
changeset
|
147 } elsif (/^auth plain/i) { |
4e0644119341
Tests: proxy_smtp_auth directive tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1423
diff
changeset
|
148 print $client '235 auth ok' . CRLF; |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
149 } elsif (/^mail from:[^@]+$/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
150 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
|
151 } elsif (/^mail from:/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
152 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
|
153 } elsif (/^rcpt to:[^@]+$/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
154 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
|
155 } elsif (/^rcpt to:/i) { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
156 print $client '250 rcpt to ok' . CRLF; |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
60
diff
changeset
|
157 } elsif (/^xclient/i) { |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
60
diff
changeset
|
158 print $client '220 xclient ok' . CRLF; |
1660
068c30e9d2c6
Tests: smtp tests with proxy protocol to backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1599
diff
changeset
|
159 } elsif (/^proxy/i) { |
068c30e9d2c6
Tests: smtp tests with proxy protocol to backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1599
diff
changeset
|
160 $proxy_protocol = $_; |
068c30e9d2c6
Tests: smtp tests with proxy protocol to backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1599
diff
changeset
|
161 } elsif (/^xproxy/i) { |
068c30e9d2c6
Tests: smtp tests with proxy protocol to backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1599
diff
changeset
|
162 print $client '211 ' . $proxy_protocol . CRLF; |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
163 } else { |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
164 print $client "500 unknown command" . CRLF; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
165 } |
539
3fcad5e66735
Tests: whitespace fixes in mail modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
526
diff
changeset
|
166 } |
26
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
167 |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
168 close $client; |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
169 } |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
170 } |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
171 |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
172 ############################################################################### |
0880e0fafde4
Tests: implement smtp test backend and use it.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
173 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 1; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
176 ############################################################################### |