# HG changeset patch # User Maxim Dounin # Date 1467933674 -10800 # Node ID 1edb092149e29fed2982ca6701051990b5459500 # Parent ce687b25ea49670e16b11ac6961b1377e226940b Tests: simplified parallel tests. Now configurations are automatically scanned for "127.0.0.1:8xxx", and ports are auto-replaced by free ones. The exact port specified is used if it's free. diff --git a/lib/Test/Nginx.pm b/lib/Test/Nginx.pm --- a/lib/Test/Nginx.pm +++ b/lib/Test/Nginx.pm @@ -31,7 +31,7 @@ use Test::More qw//; our $NGINX = defined $ENV{TEST_NGINX_BINARY} ? $ENV{TEST_NGINX_BINARY} : '../nginx/objs/nginx'; -our @ports = (); +our %ports = (); sub new { my $self = {}; @@ -313,10 +313,13 @@ sub port { my ($num, %opts) = @_; my ($s_tcp, $s_udp, $port); - goto done if defined $ports[$num]; + $num += 8080 if $num < 1000; + goto done if defined $ports{$num}; + + $port = $num; for (1 .. 10) { - $port = 8000 + int(rand(1000)); + $port = 8000 + int(rand(1000)) unless $_ == 1; $s_udp = IO::Socket::INET->new( Proto => 'udp', @@ -332,11 +335,14 @@ sub port { die "Port limit exceeded" unless defined $s_tcp and defined $s_udp; - $ports[$num] = {port => $port, socket => $opts{udp} ? $s_tcp : $s_udp}; + $ports{$num} = { + port => $port, + socket => $opts{udp} ? $s_tcp : $s_udp + }; done: - return $ports[$num]{socket} if $opts{socket}; - return $ports[$num]{port}; + return $ports{$num}{socket} if $opts{socket}; + return $ports{$num}{port}; } sub dump_config() { @@ -462,6 +468,9 @@ sub write_file_expand($$) { $content =~ s/%%TEST_GLOBALS%%/$self->test_globals()/gmse; $content =~ s/%%TEST_GLOBALS_HTTP%%/$self->test_globals_http()/gmse; $content =~ s/%%TESTDIR%%/$self->{_testdir}/gms; + + $content =~ s/127\.0\.0\.1:(8\d\d\d)/'127.0.0.1:' . port($1)/gmse; + $content =~ s/%%PORT_(\d+)%%/port($1)/gmse; $content =~ s/%%PORT_(\d+)_UDP%%/port($1, udp => 1)/gmse; @@ -645,7 +654,7 @@ sub http_start($;%) { $s = $extra{socket} || IO::Socket::INET->new( Proto => 'tcp', - PeerAddr => '127.0.0.1:' . ($ports[0]{port} || 8080) + PeerAddr => '127.0.0.1:' . port(8080) ) or die "Can't connect to nginx: $!\n"; diff --git a/lib/Test/Nginx/HTTP2.pm b/lib/Test/Nginx/HTTP2.pm --- a/lib/Test/Nginx/HTTP2.pm +++ b/lib/Test/Nginx/HTTP2.pm @@ -479,7 +479,7 @@ sub new_socket { my $alpn = $extra{'alpn'}; my $s; - $port = ($Test::Nginx::ports[0]{port} || 8080) unless defined $port; + $port ||= port(8080); eval { local $SIG{ALRM} = sub { die "timeout\n" }; diff --git a/lib/Test/Nginx/IMAP.pm b/lib/Test/Nginx/IMAP.pm --- a/lib/Test/Nginx/IMAP.pm +++ b/lib/Test/Nginx/IMAP.pm @@ -21,7 +21,7 @@ sub new { $self->{_socket} = IO::Socket::INET->new( Proto => "tcp", - PeerAddr => "127.0.0.1:8143", + PeerAddr => "127.0.0.1:" . port(8143), @_ ) or die "Can't connect to nginx: $!\n"; @@ -93,7 +93,7 @@ sub imap_test_daemon { my $server = IO::Socket::INET->new( Proto => 'tcp', - LocalAddr => '127.0.0.1:' . ($port || 8144), + LocalAddr => '127.0.0.1:' . ($port || port(8144)), Listen => 5, Reuse => 1 ) diff --git a/lib/Test/Nginx/POP3.pm b/lib/Test/Nginx/POP3.pm --- a/lib/Test/Nginx/POP3.pm +++ b/lib/Test/Nginx/POP3.pm @@ -21,7 +21,7 @@ sub new { $self->{_socket} = IO::Socket::INET->new( Proto => "tcp", - PeerAddr => "127.0.0.1:8110", + PeerAddr => "127.0.0.1:" . port(8110), @_ ) or die "Can't connect to nginx: $!\n"; @@ -93,7 +93,7 @@ sub pop3_test_daemon { my $server = IO::Socket::INET->new( Proto => 'tcp', - LocalAddr => '127.0.0.1:' . ($port || 8111), + LocalAddr => '127.0.0.1:' . ($port || port(8111)), Listen => 5, Reuse => 1 ) 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 @@ -21,7 +21,7 @@ sub new { $self->{_socket} = IO::Socket::INET->new( Proto => "tcp", - PeerAddr => "127.0.0.1:8025", + PeerAddr => "127.0.0.1:" . port(8025), @_ ) or die "Can't connect to nginx: $!\n"; @@ -97,7 +97,7 @@ sub smtp_test_daemon { my $server = IO::Socket::INET->new( Proto => 'tcp', - LocalAddr => '127.0.0.1:' . ($port || 8026), + LocalAddr => '127.0.0.1:' . ($port || port(8026)), Listen => 5, Reuse => 1 ) diff --git a/lib/Test/Nginx/Stream.pm b/lib/Test/Nginx/Stream.pm --- a/lib/Test/Nginx/Stream.pm +++ b/lib/Test/Nginx/Stream.pm @@ -41,7 +41,7 @@ sub new { $self->{_socket} = IO::Socket::INET->new( Proto => "tcp", PeerAddr => '127.0.0.1', - PeerPort => ($Test::Nginx::ports[0]{port} || 8080), + PeerPort => port(8080), @_ ) or die "Can't connect to nginx: $!\n";