# HG changeset patch # User Sergey Kandaurov # Date 1614961132 -10800 # Node ID 068c30e9d2c65fda45998c5c15586573371b03f4 # Parent d1c4059e1e728918a0a2f3f2e1e860ab755dbdbb Tests: smtp tests with proxy protocol to backend. diff --git a/lib/Test/Nginx/SMTP.pm b/lib/Test/Nginx/SMTP.pm --- a/lib/Test/Nginx/SMTP.pm +++ b/lib/Test/Nginx/SMTP.pm @@ -100,6 +100,7 @@ sub can_read { sub smtp_test_daemon { my ($port) = @_; + my $proxy_protocol; my $server = IO::Socket::INET->new( Proto => 'tcp', @@ -113,6 +114,8 @@ sub smtp_test_daemon { $client->autoflush(1); print $client "220 fake esmtp server ready" . CRLF; + $proxy_protocol = ''; + while (<$client>) { Test::Nginx::log_core('||', $_); @@ -134,6 +137,10 @@ sub smtp_test_daemon { print $client '250 rcpt to ok' . CRLF; } elsif (/^xclient/i) { print $client '220 xclient ok' . CRLF; + } elsif (/^proxy/i) { + $proxy_protocol = $_; + } elsif (/^xproxy/i) { + print $client '211 ' . $proxy_protocol . CRLF; } else { print $client "500 unknown command" . CRLF; } diff --git a/mail_proxy_protocol.t b/mail_proxy_protocol.t --- a/mail_proxy_protocol.t +++ b/mail_proxy_protocol.t @@ -40,6 +40,7 @@ events { mail { proxy_pass_error_message on; proxy_smtp_auth on; + proxy_protocol on; auth_http http://127.0.0.1:8080/mail/auth; smtp_auth login plain; @@ -90,7 +91,7 @@ http { EOF $t->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon); -$t->try_run('no proxy_protocol')->plan(6); +$t->try_run('no proxy_protocol')->plan(8); $t->waitforsocket('127.0.0.1:' . port(8026)); @@ -108,6 +109,10 @@ my $s = Test::Nginx::SMTP->new(PeerAddr $s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0secret", '')); $s->authok('auth with proxy_protocol'); +$s->send('XPROXY'); +$s->check(qr/^211 PROXY TCP4 127.0.0.1 127.0.0.1 \d+ \d+/, + 'proxy protocol to backend'); + # connection with PROXY protocol and set_realip_from $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8027)); @@ -121,4 +126,8 @@ my $s = Test::Nginx::SMTP->new(PeerAddr $s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0secret", '')); $s->authok('auth with proxy_protocol and realip'); +$s->send('XPROXY'); +$s->check(qr/^211 PROXY TCP4 192.0.2.1 127.0.0.1 \d+ \d+/, + 'proxy_protocol to backend and realip'); + ###############################################################################