Tests: smtp tests with proxy protocol and realip.
diff --git a/mail_proxy_protocol.t b/mail_proxy_protocol.t
new file mode 100644
index 0000000..721fc29
--- /dev/null
+++ b/mail_proxy_protocol.t
@@ -0,0 +1,124 @@
+#!/usr/bin/perl
+
+# (C) Sergey Kandaurov
+# (C) Nginx, Inc.
+
+# Tests for mail proxy module, PROXY protocol with realip.
+
+###############################################################################
+
+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/)
+ ->write_file_expand('nginx.conf', <<'EOF');
+
+%%TEST_GLOBALS%%
+
+daemon off;
+
+events {
+}
+
+mail {
+ proxy_pass_error_message on;
+ proxy_smtp_auth on;
+ auth_http http://127.0.0.1:8080/mail/auth;
+ smtp_auth login plain;
+
+ server {
+ listen 127.0.0.1:8025 proxy_protocol;
+ protocol smtp;
+
+ auth_http_header X-Type proxy;
+ }
+
+ server {
+ listen 127.0.0.1:8027 proxy_protocol;
+ protocol smtp;
+
+ set_real_ip_from 127.0.0.1/32;
+ auth_http_header X-Type realip;
+ }
+}
+
+http {
+ %%TEST_GLOBALS_HTTP%%
+
+ server {
+ listen 127.0.0.1:8080;
+ server_name localhost;
+
+ location = /mail/auth {
+ set $reply ERROR;
+ set $test $http_x_type:$http_client_ip:$http_proxy_protocol_addr;
+
+ if ($test = proxy:127.0.0.1:192.0.2.1) {
+ set $reply OK;
+ }
+
+ if ($test = realip:192.0.2.1:192.0.2.1) {
+ set $reply OK;
+ }
+
+ add_header Auth-Status $reply;
+ 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->try_run('no proxy_protocol')->plan(6);
+
+$t->waitforsocket('127.0.0.1:' . port(8026));
+
+###############################################################################
+
+# connection with PROXY protocol
+
+my $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8025));
+$s->send('PROXY TCP4 192.0.2.1 192.0.2.2 123 5678');
+$s->check(qr/^220 /, "greeting with proxy_protocol");
+
+$s->send('EHLO example.com');
+$s->check(qr/^250 /, "ehlo with proxy_protocol");
+
+$s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0secret", ''));
+$s->authok('auth with proxy_protocol');
+
+# connection with PROXY protocol and set_realip_from
+
+$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8027));
+
+$s->send('PROXY TCP4 192.0.2.1 192.0.2.2 123 5678');
+$s->check(qr/^220 /, "greeting with proxy_protocol and realip");
+
+$s->send('EHLO example.com');
+$s->check(qr/^250 /, "ehlo with proxy_protocol and realip");
+
+$s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0secret", ''));
+$s->authok('auth with proxy_protocol and realip');
+
+###############################################################################