changeset 970:c227348453db

Tests: simplified parallel modifications in mail tests.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 08 Jul 2016 02:21:16 +0300
parents 1edb092149e2
children ed99be008b52
files mail_error_log.t mail_imap.t mail_imap_ssl.t mail_pop3.t mail_resolver.t mail_smtp.t mail_smtp_greeting_delay.t mail_smtp_xclient.t
diffstat 8 files changed, 113 insertions(+), 112 deletions(-) [+]
line wrap: on
line diff
--- a/mail_error_log.t
+++ b/mail_error_log.t
@@ -28,7 +28,7 @@ select STDOUT; $| = 1;
 plan(skip_all => 'win32') if $^O eq 'MSWin32';
 
 my $t = Test::Nginx->new()->has(qw/mail imap http rewrite/)
-	->run_daemon(\&Test::Nginx::IMAP::imap_test_daemon, port(4));
+	->run_daemon(\&Test::Nginx::IMAP::imap_test_daemon, port(8144));
 
 plan(skip_all => 'no error_log') unless $t->has_version('1.9.0');
 
@@ -38,7 +38,7 @@ plan(skip_all => 'no error_log') unless 
 
 error_log %%TESTDIR%%/e_glob.log info;
 error_log %%TESTDIR%%/e_glob2.log info;
-error_log syslog:server=127.0.0.1:%%PORT_1_UDP%% info;
+error_log syslog:server=127.0.0.1:%%PORT_8081_UDP%% info;
 
 daemon off;
 
@@ -46,23 +46,23 @@ events {
 }
 
 mail {
-    auth_http  http://127.0.0.1:%%PORT_0%%/mail/auth;
+    auth_http  http://127.0.0.1:8080/mail/auth;
 
     server {
-        listen     127.0.0.1:%%PORT_3%%;
+        listen     127.0.0.1:8143;
         protocol   imap;
 
         error_log %%TESTDIR%%/e_debug.log debug;
         error_log %%TESTDIR%%/e_info.log info;
-        error_log syslog:server=127.0.0.1:%%PORT_2_UDP%%  info;
+        error_log syslog:server=127.0.0.1:%%PORT_8082_UDP%% info;
         error_log stderr info;
     }
 
     server {
-        listen     127.0.0.1:%%PORT_5%%;
+        listen     127.0.0.1:8145;
         protocol   imap;
 
-        error_log syslog:server=127.0.0.1:%%PORT_6_UDP%% info;
+        error_log syslog:server=127.0.0.1:%%PORT_8083_UDP%% info;
     }
 }
 
@@ -70,13 +70,13 @@ http {
     %%TEST_GLOBALS_HTTP%%
 
     server {
-        listen       127.0.0.1:%%PORT_0%%;
+        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_4%%;
+            add_header Auth-Port %%PORT_8144%%;
             add_header Auth-Wait 1;
             return 204;
         }
@@ -90,8 +90,8 @@ open STDERR, '>', $t->testdir() . '/stde
 open my $stderr, '<', $t->testdir() . '/stderr'
 	or die "Can't open stderr file: $!";
 
-$t->run_daemon(\&syslog_daemon, port(1), $t, 's_glob.log');
-$t->run_daemon(\&syslog_daemon, port(2), $t, 's_info.log');
+$t->run_daemon(\&syslog_daemon, port(8081), $t, 's_glob.log');
+$t->run_daemon(\&syslog_daemon, port(8082), $t, 's_info.log');
 
 $t->waitforfile($t->testdir . '/s_glob.log');
 $t->waitforfile($t->testdir . '/s_info.log');
@@ -102,7 +102,7 @@ open STDERR, ">&", \*OLDERR;
 
 ###############################################################################
 
-my $s = Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(3));
+my $s = Test::Nginx::IMAP->new();
 $s->ok('greeting');
 
 # error_log levels
@@ -128,7 +128,7 @@ is_deeply(levels($t, 'e_glob.log'), leve
 
 # syslog
 
-parse_syslog_message('syslog', get_syslog(port(6)));
+parse_syslog_message('syslog', get_syslog());
 
 is_deeply(levels($t, 's_glob.log'), levels($t, 'e_glob.log'),
 	'global syslog messages');
@@ -161,7 +161,6 @@ sub levels {
 }
 
 sub get_syslog {
-	my ($port) = @_;
 	my $data = '';
 	my ($s);
 
@@ -171,7 +170,7 @@ sub get_syslog {
 		alarm(1);
 		$s = IO::Socket::INET->new(
 			Proto => 'udp',
-			LocalAddr => "127.0.0.1:$port"
+			LocalAddr => '127.0.0.1:' . port(8083)
 		);
 		alarm(0);
 	};
@@ -181,7 +180,7 @@ sub get_syslog {
 		return undef;
 	}
 
-	Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(5))->read();
+	Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(8145))->read();
 
 	IO::Select->new($s)->can_read(1.5);
 	while (IO::Select->new($s)->can_read(0.1)) {
--- a/mail_imap.t
+++ b/mail_imap.t
@@ -28,7 +28,7 @@ local $SIG{PIPE} = 'IGNORE';
 
 my $t = Test::Nginx->new()
 	->has(qw/mail imap http rewrite/)->plan(9)
-	->run_daemon(\&Test::Nginx::IMAP::imap_test_daemon, port(2))
+	->run_daemon(\&Test::Nginx::IMAP::imap_test_daemon, port(8144))
 	->write_file_expand('nginx.conf', <<'EOF')->run();
 
 %%TEST_GLOBALS%%
@@ -40,10 +40,10 @@ events {
 
 mail {
     proxy_pass_error_message  on;
-    auth_http  http://127.0.0.1:%%PORT_0%%/mail/auth;
+    auth_http  http://127.0.0.1:8080/mail/auth;
 
     server {
-        listen     127.0.0.1:%%PORT_1%%;
+        listen     127.0.0.1:8143;
         protocol   imap;
     }
 }
@@ -52,7 +52,7 @@ http {
     %%TEST_GLOBALS_HTTP%%
 
     server {
-        listen       127.0.0.1:%%PORT_0%%;
+        listen       127.0.0.1:8080;
         server_name  localhost;
 
         location = /mail/auth {
@@ -69,7 +69,7 @@ http {
 
             add_header Auth-Status $reply;
             add_header Auth-Server 127.0.0.1;
-            add_header Auth-Port %%PORT_2%%;
+            add_header Auth-Port %%PORT_8144%%;
             add_header Auth-Wait 1;
             return 204;
         }
@@ -80,7 +80,7 @@ EOF
 
 ###############################################################################
 
-my $s = Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(1));
+my $s = Test::Nginx::IMAP->new();
 $s->ok('greeting');
 
 # bad auth
@@ -98,7 +98,7 @@ my $s = Test::Nginx::IMAP->new(PeerAddr 
 
 # auth login simple
 
-$s = Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::IMAP->new();
 $s->read();
 
 $s->send('1 AUTHENTICATE LOGIN');
@@ -112,7 +112,7 @@ my $s = Test::Nginx::IMAP->new(PeerAddr 
 
 # auth login with username
 
-$s = Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::IMAP->new();
 $s->read();
 
 $s->send('1 AUTHENTICATE LOGIN ' . encode_base64('test@example.com', ''));
--- a/mail_imap_ssl.t
+++ b/mail_imap_ssl.t
@@ -35,7 +35,8 @@ local $SIG{PIPE} = 'IGNORE';
 
 my $t = Test::Nginx->new()
 	->has(qw/mail mail_ssl imap http rewrite/)->has_daemon('openssl')
-	->run_daemon(\&Test::Nginx::IMAP::imap_test_daemon, port(6))->plan(12);
+	->run_daemon(\&Test::Nginx::IMAP::imap_test_daemon, port(8144))
+	->plan(12);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -48,19 +49,19 @@ events {
 
 mail {
     proxy_pass_error_message  on;
-    auth_http  http://127.0.0.1:%%PORT_0%%/mail/auth;
+    auth_http  http://127.0.0.1:8080/mail/auth;
     auth_http_pass_client_cert on;
 
     ssl_certificate_key 1.example.com.key;
     ssl_certificate 1.example.com.crt;
 
     server {
-        listen     127.0.0.1:%%PORT_1%%;
+        listen     127.0.0.1:8142;
         protocol   imap;
     }
 
     server {
-        listen     127.0.0.1:%%PORT_2%% ssl;
+        listen     127.0.0.1:8143 ssl;
         protocol   imap;
 
         ssl_verify_client on;
@@ -68,7 +69,7 @@ mail {
     }
 
     server {
-        listen     127.0.0.1:%%PORT_3%% ssl;
+        listen     127.0.0.1:8145 ssl;
         protocol   imap;
 
         ssl_verify_client optional;
@@ -76,7 +77,7 @@ mail {
     }
 
     server {
-        listen     127.0.0.1:%%PORT_4%% ssl;
+        listen     127.0.0.1:8146 ssl;
         protocol   imap;
 
         ssl_verify_client optional;
@@ -85,7 +86,7 @@ mail {
     }
 
     server {
-        listen     127.0.0.1:%%PORT_5%% ssl;
+        listen     127.0.0.1:8147 ssl;
         protocol   imap;
 
         ssl_verify_client optional_no_ca;
@@ -102,7 +103,7 @@ http {
                       '$http_auth_ssl_cert:$http_auth_pass';
 
     server {
-        listen       127.0.0.1:%%PORT_0%%;
+        listen       127.0.0.1:8080;
         server_name  localhost;
 
         location = /mail/auth {
@@ -110,7 +111,7 @@ http {
 
             add_header Auth-Status OK;
             add_header Auth-Server 127.0.0.1;
-            add_header Auth-Port %%PORT_6%%;
+            add_header Auth-Port %%PORT_8144%%;
             add_header Auth-Wait 1;
             return 204;
         }
@@ -150,25 +151,25 @@ my %ssl = (
 
 # no ssl connection
 
-my $s = Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(1));
+my $s = Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(8142));
 $s->ok('plain connection');
 $s->send('1 AUTHENTICATE PLAIN ' . $cred->("s1"));
 
 # no cert
 
-$s = Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(2), %ssl);
+$s = Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(8143), %ssl);
 $s->check(qr/BYE No required SSL certificate/, 'no cert');
 
 # no cert with ssl_verify_client optional
 
-$s = Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(3), %ssl);
+$s = Test::Nginx::IMAP->new(PeerAddr => '127.0.0.1:' . port(8145), %ssl);
 $s->ok('no optional cert');
 $s->send('1 AUTHENTICATE PLAIN ' . $cred->("s2"));
 
 # wrong cert with ssl_verify_client optional
 
 $s = Test::Nginx::IMAP->new(
-	PeerAddr => '127.0.0.1:' . port(3),
+	PeerAddr => '127.0.0.1:' . port(8145),
 	SSL_cert_file => "$d/1.example.com.crt",
 	SSL_key_file => "$d/1.example.com.key",
 	%ssl,
@@ -178,7 +179,7 @@ my $s = Test::Nginx::IMAP->new(PeerAddr 
 # wrong cert with ssl_verify_client optional_no_ca
 
 $s = Test::Nginx::IMAP->new(
-	PeerAddr => '127.0.0.1:'  . port(5),
+	PeerAddr => '127.0.0.1:' . port(8147),
 	SSL_cert_file => "$d/1.example.com.crt",
 	SSL_key_file => "$d/1.example.com.key",
 	%ssl,
@@ -189,7 +190,7 @@ my $s = Test::Nginx::IMAP->new(PeerAddr 
 # matching cert with ssl_verify_client optional
 
 $s = Test::Nginx::IMAP->new(
-	PeerAddr => '127.0.0.1:' . port(3),
+	PeerAddr => '127.0.0.1:' . port(8145),
 	SSL_cert_file => "$d/2.example.com.crt",
 	SSL_key_file => "$d/2.example.com.key",
 	%ssl,
@@ -200,7 +201,7 @@ my $s = Test::Nginx::IMAP->new(PeerAddr 
 # trusted cert with ssl_verify_client optional
 
 $s = Test::Nginx::IMAP->new(
-	PeerAddr => '127.0.0.1:' . port(4),
+	PeerAddr => '127.0.0.1:' . port(8146),
 	SSL_cert_file => "$d/3.example.com.crt",
 	SSL_key_file => "$d/3.example.com.key",
 	%ssl,
--- a/mail_pop3.t
+++ b/mail_pop3.t
@@ -28,7 +28,7 @@ local $SIG{PIPE} = 'IGNORE';
 
 my $t = Test::Nginx->new()
 	->has(qw/mail pop3 http rewrite/)->plan(8)
-	->run_daemon(\&Test::Nginx::POP3::pop3_test_daemon, port(2))
+	->run_daemon(\&Test::Nginx::POP3::pop3_test_daemon, port(8111))
 	->write_file_expand('nginx.conf', <<'EOF')->run();
 
 %%TEST_GLOBALS%%
@@ -40,10 +40,10 @@ events {
 
 mail {
     proxy_pass_error_message  on;
-    auth_http  http://127.0.0.1:%%PORT_0%%/mail/auth;
+    auth_http  http://127.0.0.1:8080/mail/auth;
 
     server {
-        listen     127.0.0.1:%%PORT_1%%;
+        listen     127.0.0.1:8110;
         protocol   pop3;
     }
 }
@@ -52,7 +52,7 @@ http {
     %%TEST_GLOBALS_HTTP%%
 
     server {
-        listen       127.0.0.1:%%PORT_0%%;
+        listen       127.0.0.1:8080;
         server_name  localhost;
 
         location = /mail/auth {
@@ -69,7 +69,7 @@ http {
 
             add_header Auth-Status $reply;
             add_header Auth-Server 127.0.0.1;
-            add_header Auth-Port %%PORT_2%%;
+            add_header Auth-Port %%PORT_8111%%;
             add_header Auth-Wait 1;
             return 204;
         }
@@ -80,7 +80,7 @@ EOF
 
 ###############################################################################
 
-my $s = Test::Nginx::POP3->new(PeerAddr => '127.0.0.1:' . port(1));
+my $s = Test::Nginx::POP3->new();
 $s->ok('greeting');
 
 # auth plain
@@ -93,7 +93,7 @@ my $s = Test::Nginx::POP3->new(PeerAddr 
 
 # auth login simple
 
-$s = Test::Nginx::POP3->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::POP3->new();
 $s->read();
 
 $s->send('AUTH LOGIN');
@@ -107,7 +107,7 @@ my $s = Test::Nginx::POP3->new(PeerAddr 
 
 # auth login with username
 
-$s = Test::Nginx::POP3->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::POP3->new();
 $s->read();
 
 $s->send('AUTH LOGIN ' . encode_base64('test@example.com', ''));
--- a/mail_resolver.t
+++ b/mail_resolver.t
@@ -26,7 +26,7 @@ select STDOUT; $| = 1;
 local $SIG{PIPE} = 'IGNORE';
 
 my $t = Test::Nginx->new()->has(qw/mail smtp http rewrite/)
-	->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon, port(15));
+	->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon, port(8026));
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -38,7 +38,7 @@ events {
 }
 
 mail {
-    auth_http    http://127.0.0.1:%%PORT_0%%/mail/auth;
+    auth_http    http://127.0.0.1:8080/mail/auth;
     smtp_auth    none;
     server_name  locahost;
 
@@ -46,47 +46,48 @@ mail {
     resolver_timeout 2s;
 
     server {
-        listen    127.0.0.1:%%PORT_1%%;
+        listen    127.0.0.1:8025;
         protocol  smtp;
-        resolver  127.0.0.1:%%PORT_8_UDP%% 127.0.0.1:%%PORT_9_UDP%%
-                  127.0.0.1:%%PORT_10_UDP%%;
+        resolver  127.0.0.1:%%PORT_8081_UDP%%
+                  127.0.0.1:%%PORT_8082_UDP%%
+                  127.0.0.1:%%PORT_8083_UDP%%;
     }
 
     server {
-        listen    127.0.0.1:%%PORT_2%%;
+        listen    127.0.0.1:8027;
         protocol  smtp;
-        resolver  127.0.0.1:%%PORT_9_UDP%%;
+        resolver  127.0.0.1:%%PORT_8082_UDP%%;
     }
 
     server {
-        listen    127.0.0.1:%%PORT_3%%;
+        listen    127.0.0.1:8028;
         protocol  smtp;
-        resolver  127.0.0.1:%%PORT_10_UDP%%;
+        resolver  127.0.0.1:%%PORT_8083_UDP%%;
 
     }
 
     server {
-        listen    127.0.0.1:%%PORT_4%%;
+        listen    127.0.0.1:8029;
         protocol  smtp;
-        resolver  127.0.0.1:%%PORT_11_UDP%%;
+        resolver  127.0.0.1:%%PORT_8084_UDP%%;
     }
 
     server {
-        listen    127.0.0.1:%%PORT_5%%;
+        listen    127.0.0.1:8030;
         protocol  smtp;
-        resolver  127.0.0.1:%%PORT_12_UDP%%;
+        resolver  127.0.0.1:%%PORT_8085_UDP%%;
     }
 
     server {
-        listen    127.0.0.1:%%PORT_6%%;
+        listen    127.0.0.1:8031;
         protocol  smtp;
-        resolver  127.0.0.1:%%PORT_13_UDP%%;
+        resolver  127.0.0.1:%%PORT_8086_UDP%%;
     }
 
     server {
-        listen    127.0.0.1:%%PORT_7%%;
+        listen    127.0.0.1:8032;
         protocol  smtp;
-        resolver  127.0.0.1:%%PORT_14_UDP%%;
+        resolver  127.0.0.1:%%PORT_8087_UDP%%;
     }
 
 }
@@ -95,7 +96,7 @@ http {
     %%TEST_GLOBALS_HTTP%%
 
     server {
-        listen       127.0.0.1:%%PORT_0%%;
+        listen       127.0.0.1:8080;
         server_name  localhost;
 
         location = /mail/auth {
@@ -107,7 +108,7 @@ http {
 
             add_header Auth-Status $reply;
             add_header Auth-Server 127.0.0.1;
-            add_header Auth-Port %%PORT_15%%;
+            add_header Auth-Port %%PORT_8026%%;
             return 204;
         }
     }
@@ -115,12 +116,12 @@ http {
 
 EOF
 
-for (8 .. 14) {
+for (8081 .. 8087) {
 	$t->run_daemon(\&dns_daemon, port($_), $t);
 }
 $t->run();
 
-for (8 .. 14) {
+for (8081 .. 8087) {
 	$t->waitforfile($t->testdir . '/' . port($_));
 }
 
@@ -130,7 +131,7 @@ for (8 .. 14) {
 
 # PTR
 
-my $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+my $s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -143,9 +144,9 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 $s->send('QUIT');
 $s->read();
 
-# Cached PTR prevents from querying bad ns on the first port
+# Cached PTR prevents from querying bad ns on port 8083
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -160,7 +161,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # SERVFAIL
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(2));
+$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8027));
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -175,7 +176,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # PTR with zero length RDATA
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(3));
+$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8028));
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -193,7 +194,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 TODO: {
 local $TODO = 'support for CNAME RR';
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(4));
+$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8029));
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -214,7 +215,7 @@ TODO: {
 local $TODO = 'support for uncompressed name in PTR'
 	unless $t->has_version('1.9.11');
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(5));
+$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8030));
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -232,7 +233,7 @@ local $TODO = 'support for uncompressed 
 TODO: {
 local $TODO = 'PTR type checking' unless $t->has_version('1.9.11');
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(6));
+$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8031));
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -252,7 +253,7 @@ local $TODO = 'PTR type checking' unless
 TODO: {
 local $TODO = 'not yet' unless $t->has_version('1.9.11');
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(7));
+$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8032));
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -308,34 +309,34 @@ sub reply_handler {
 		push @rdata, rd_addr($ttl, '127.0.0.1');
 
 	} elsif ($name eq '1.0.0.127.in-addr.arpa' && $type == PTR) {
-		if ($port == port(8)) {
+		if ($port == port(8081)) {
 			push @rdata, rd_name(PTR, $ttl, 'a.example.net');
 
-		} elsif ($port == port(9)) {
+		} elsif ($port == port(8082)) {
 			$rcode = SERVFAIL;
 
-		} elsif ($port == port(10)) {
+		} elsif ($port == port(8083)) {
 			# zero length RDATA
 
 			push @rdata, pack("n3N n", 0xc00c, PTR, IN, $ttl, 0);
 
-		} elsif ($port == port(11)) {
+		} elsif ($port == port(8084)) {
 			# PTR answered with CNAME
 
 			push @rdata, rd_name(CNAME, $ttl,
 				'1.1.0.0.127.in-addr.arpa');
 
-		} elsif ($port == port(12)) {
+		} elsif ($port == port(8085)) {
 			# uncompressed answer
 
 			push @rdata, pack("(C/a*)6x n2N n(C/a*)3x",
 				('1', '0', '0', '127', 'in-addr', 'arpa'),
 				PTR, IN, $ttl, 15, ('a', 'example', 'net'));
 
-		} elsif ($port == port(13)) {
+		} elsif ($port == port(8086)) {
 			push @rdata, rd_name(DNAME, $ttl, 'a.example.net');
 
-		} elsif ($port == port(14)) {
+		} elsif ($port == port(8087)) {
 			# PTR answered with CNAME+PTR
 
 			push @rdata, rd_name(CNAME, $ttl,
--- a/mail_smtp.t
+++ b/mail_smtp.t
@@ -29,7 +29,7 @@ local $SIG{PIPE} = 'IGNORE';
 
 my $t = Test::Nginx->new()
 	->has(qw/mail smtp http rewrite/)->plan(25)
-	->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon, port(2))
+	->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon, port(8026))
 	->write_file_expand('nginx.conf', <<'EOF')->run();
 
 %%TEST_GLOBALS%%
@@ -41,11 +41,11 @@ events {
 
 mail {
     proxy_pass_error_message  on;
-    auth_http  http://127.0.0.1:%%PORT_0%%/mail/auth;
+    auth_http  http://127.0.0.1:8080/mail/auth;
     xclient    off;
 
     server {
-        listen     127.0.0.1:%%PORT_1%%;
+        listen     127.0.0.1:8025;
         protocol   smtp;
         smtp_auth  login plain none;
     }
@@ -55,7 +55,7 @@ http {
     %%TEST_GLOBALS_HTTP%%
 
     server {
-        listen       127.0.0.1:%%PORT_0%%;
+        listen       127.0.0.1:8080;
         server_name  localhost;
 
         location = /mail/auth {
@@ -72,7 +72,7 @@ http {
 
             add_header Auth-Status $reply;
             add_header Auth-Server 127.0.0.1;
-            add_header Auth-Port %%PORT_2%%;
+            add_header Auth-Port %%PORT_8026%%;
             add_header Auth-Wait 1;
             return 204;
         }
@@ -83,7 +83,7 @@ EOF
 
 ###############################################################################
 
-my $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+my $s = Test::Nginx::SMTP->new();
 $s->check(qr/^220 /, "greeting");
 
 $s->send('EHLO example.com');
@@ -111,7 +111,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # Try auth login in simple form
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -128,7 +128,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 # [MS-XLOGIN]: SMTP Protocol AUTH LOGIN Extension Specification
 # http://download.microsoft.com/download/5/D/D/5DD33FDF-91F5-496D-9884-0A0B0EE698BB/%5BMS-XLOGIN%5D.pdf
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -140,7 +140,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # Try auth plain with pipelining
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -164,7 +164,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # Try auth none
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -180,7 +180,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # Auth none with pipelining
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -195,7 +195,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # Connection must stay even if error returned to rcpt to command
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -211,7 +211,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # Make sure command split into many packets processed correctly
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 
 $s->print('HEL');
--- a/mail_smtp_greeting_delay.t
+++ b/mail_smtp_greeting_delay.t
@@ -34,11 +34,11 @@ events {
 
 mail {
     proxy_pass_error_message  on;
-    auth_http  http://127.0.0.1:%%PORT_0%%/mail/auth;
+    auth_http  http://127.0.0.1:8080/mail/auth;
     xclient    off;
 
     server {
-        listen     127.0.0.1:%%PORT_1%%;
+        listen     127.0.0.1:8025;
         protocol   smtp;
         smtp_greeting_delay  1s;
     }
@@ -51,7 +51,7 @@ EOF
 # With smtp_greeting_delay session expected to be closed after first error
 # message if client sent something before greeting.
 
-my $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+my $s = Test::Nginx::SMTP->new();
 $s->send('HELO example.com');
 $s->check(qr/^5.. /, "command before greeting - session must be rejected");
 ok($s->eof(), "session have to be closed");
--- a/mail_smtp_xclient.t
+++ b/mail_smtp_xclient.t
@@ -25,7 +25,7 @@ select STDOUT; $| = 1;
 local $SIG{PIPE} = 'IGNORE';
 
 my $t = Test::Nginx->new()->has(qw/mail smtp http rewrite/)->plan(6)
-	->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon, port(2))
+	->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon, port(8026))
 	->write_file_expand('nginx.conf', <<'EOF')->run();
 
 %%TEST_GLOBALS%%
@@ -37,11 +37,11 @@ events {
 
 mail {
     proxy_pass_error_message  on;
-    auth_http  http://127.0.0.1:%%PORT_0%%/mail/auth;
+    auth_http  http://127.0.0.1:8080/mail/auth;
     xclient    on;
 
     server {
-        listen     127.0.0.1:%%PORT_1%%;
+        listen     127.0.0.1:8025;
         protocol   smtp;
         smtp_auth  login plain none;
     }
@@ -51,13 +51,13 @@ http {
     %%TEST_GLOBALS_HTTP%%
 
     server {
-        listen       127.0.0.1:%%PORT_0%%;
+        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_2%%;
+            add_header Auth-Port   %%PORT_8026%%;
             add_header Auth-Wait   1;
             return 204;
         }
@@ -82,14 +82,14 @@ EOF
 
 # xclient
 
-my $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+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(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('HELO example.com');
 $s->read();
@@ -98,7 +98,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # xclient, ehlo
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('EHLO example.com');
 $s->read();
@@ -107,7 +107,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # xclient, from, rcpt
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('MAIL FROM:<test@example.com>');
 $s->read();
@@ -116,7 +116,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # xclient, helo, from, rcpt
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('HELO example.com');
 $s->read();
@@ -127,7 +127,7 @@ my $s = Test::Nginx::SMTP->new(PeerAddr 
 
 # xclient, ehlo, from, rcpt
 
-$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(1));
+$s = Test::Nginx::SMTP->new();
 $s->read();
 $s->send('EHLO example.com');
 $s->read();