-
Notifications
You must be signed in to change notification settings - Fork 81
/
Copy pathmail_smtp_xclient.t
142 lines (106 loc) · 2.92 KB
/
mail_smtp_xclient.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/usr/bin/perl
# (C) Maxim Dounin
###############################################################################
use warnings;
use strict;
use Test::More;
use MIME::Base64;
BEGIN { use FindBin; chdir($FindBin::Bin); }
use lib 'lib';
use Test::Nginx;
use Test::Nginx::SMTP;
###############################################################################
select STDERR; $| = 1;
select STDOUT; $| = 1;
local $SIG{PIPE} = 'IGNORE';
my $t = Test::Nginx->new()->has(qw/mail smtp http rewrite/)->plan(6)
->write_file_expand('nginx.conf', <<'EOF');
%%TEST_GLOBALS%%
daemon off;
events {
}
mail {
proxy_pass_error_message on;
proxy_timeout 15s;
auth_http http://127.0.0.1:8080/mail/auth;
xclient on;
server {
listen 127.0.0.1:8025;
protocol smtp;
smtp_auth login plain none;
}
}
http {
%%TEST_GLOBALS_HTTP%%
server {
listen 127.0.0.1:8080;
server_name localhost;
location = /mail/auth {
add_header Auth-Status OK;
add_header Auth-Server 127.0.0.1;
add_header Auth-Port %%PORT_8026%%;
add_header Auth-Wait 1;
return 204;
}
}
}
EOF
$t->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon);
$t->run()->waitforsocket('127.0.0.1:' . port(8026));
###############################################################################
# When XCLIENT's HELO= argument isn't used, the following combinations may be
# send to backend with xclient on:
#
# xclient
# xclient, helo
# xclient, ehlo
# xclient, from, rcpt
# xclient, helo, from, rcpt
# xclient, ehlo, from, rcpt
#
# Test them in order.
# xclient
my $s = Test::Nginx::SMTP->new();
$s->read();
$s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0secret", ''));
$s->authok('xclient');
# xclient, helo
$s = Test::Nginx::SMTP->new();
$s->read();
$s->send('HELO example.com');
$s->read();
$s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0secret", ''));
$s->authok('xclient, helo');
# xclient, ehlo
$s = Test::Nginx::SMTP->new();
$s->read();
$s->send('EHLO example.com');
$s->read();
$s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0secret", ''));
$s->authok('xclient, ehlo');
# xclient, from, rcpt
$s = Test::Nginx::SMTP->new();
$s->read();
$s->send('MAIL FROM:<[email protected]>');
$s->read();
$s->send('RCPT TO:<[email protected]>');
$s->ok('xclient, from');
# xclient, helo, from, rcpt
$s = Test::Nginx::SMTP->new();
$s->read();
$s->send('HELO example.com');
$s->read();
$s->send('MAIL FROM:<[email protected]>');
$s->read();
$s->send('RCPT TO:<[email protected]>');
$s->ok('xclient, helo, from');
# xclient, ehlo, from, rcpt
$s = Test::Nginx::SMTP->new();
$s->read();
$s->send('EHLO example.com');
$s->read();
$s->send('MAIL FROM:<[email protected]>');
$s->read();
$s->send('RCPT TO:<[email protected]>');
$s->ok('xclient, ehlo, from');
###############################################################################