Mercurial > hg > nginx-tests
annotate lib/Test/Nginx.pm @ 1427:eb1d883305ea
Tests: avoid edge cases in upstream random two test.
Unavailable servers contribute to the number of attempts, if selected,
before the balancer would fall back to the default round-robin method.
This means that it's quite possible to get server with more connections.
To facilitate with selecting two alive servers, down server was removed
from the upstream configuration at the cost of slightly worse coverage.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 10 Jan 2019 17:42:34 +0300 |
parents | fda743e92b31 |
children | a328109be893 |
rev | line source |
---|---|
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
1 package Test::Nginx; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
155 | 5 # Generic module for nginx tests. |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 use base qw/ Exporter /; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
14 our @EXPORT = qw/ log_in log_out http http_get http_head port /; |
438
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
15 our @EXPORT_OK = qw/ http_gzip_request http_gzip_like http_start http_end /; |
93
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
16 our %EXPORT_TAGS = ( |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
17 gzip => [ qw/ http_gzip_request http_gzip_like / ] |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
18 ); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 |
290
f781b087b7aa
Tests: fixed possible test suite hang on exit.
Vladimir Homutov <vl@nginx.com>
parents:
289
diff
changeset
|
22 use File::Path qw/ rmtree /; |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
23 use File::Spec qw//; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 use File::Temp qw/ tempdir /; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 use IO::Socket; |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
26 use POSIX qw/ waitpid WNOHANG /; |
7
9eb509695651
Tests: drop our own CRLF constant, use Socket's one instead.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6
diff
changeset
|
27 use Socket qw/ CRLF /; |
27
fb94a224fef2
Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
24
diff
changeset
|
28 use Test::More qw//; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
30 ############################################################################### |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 |
48
acfafb52d393
Tests: use TEST_NGINX_BINARY to find nginx binary.
Maxim Dounin <mdounin@mdounin.ru>
parents:
46
diff
changeset
|
32 our $NGINX = defined $ENV{TEST_NGINX_BINARY} ? $ENV{TEST_NGINX_BINARY} |
acfafb52d393
Tests: use TEST_NGINX_BINARY to find nginx binary.
Maxim Dounin <mdounin@mdounin.ru>
parents:
46
diff
changeset
|
33 : '../nginx/objs/nginx'; |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
34 our %ports = (); |
27
fb94a224fef2
Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
24
diff
changeset
|
35 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
36 sub new { |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
37 my $self = {}; |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
38 bless $self; |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
39 |
296
a113f4d55b12
Tests: fix hang on exit after errors in child processes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
290
diff
changeset
|
40 $self->{_pid} = $$; |
592
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
41 $self->{_alerts} = 1; |
296
a113f4d55b12
Tests: fix hang on exit after errors in child processes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
290
diff
changeset
|
42 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
43 $self->{_testdir} = tempdir( |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
44 'nginx-test-XXXXXXXXXX', |
290
f781b087b7aa
Tests: fixed possible test suite hang on exit.
Vladimir Homutov <vl@nginx.com>
parents:
289
diff
changeset
|
45 TMPDIR => 1 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
46 ) |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
47 or die "Can't create temp directory: $!\n"; |
219
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
48 $self->{_testdir} =~ s!\\!/!g if $^O eq 'MSWin32'; |
395
d7d9b4367bab
Tests: start nginx prefixed to a temporary directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
392
diff
changeset
|
49 mkdir "$self->{_testdir}/logs" |
d7d9b4367bab
Tests: start nginx prefixed to a temporary directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
392
diff
changeset
|
50 or die "Can't create logs directory: $!\n"; |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
51 |
460
0342957cca37
Tests: check for nginx binary presence.
Sergey Kandaurov <pluknet@nginx.com>
parents:
438
diff
changeset
|
52 Test::More::BAIL_OUT("no $NGINX binary found") |
0342957cca37
Tests: check for nginx binary presence.
Sergey Kandaurov <pluknet@nginx.com>
parents:
438
diff
changeset
|
53 unless -x $NGINX; |
0342957cca37
Tests: check for nginx binary presence.
Sergey Kandaurov <pluknet@nginx.com>
parents:
438
diff
changeset
|
54 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
55 return $self; |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
56 } |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
57 |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
58 sub DESTROY { |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
59 my ($self) = @_; |
415
020c4e47ecac
Tests: revert 068d020a8f85 and localize $? instead.
Maxim Dounin <mdounin@mdounin.ru>
parents:
411
diff
changeset
|
60 local $?; |
020c4e47ecac
Tests: revert 068d020a8f85 and localize $? instead.
Maxim Dounin <mdounin@mdounin.ru>
parents:
411
diff
changeset
|
61 |
296
a113f4d55b12
Tests: fix hang on exit after errors in child processes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
290
diff
changeset
|
62 return if $self->{_pid} != $$; |
415
020c4e47ecac
Tests: revert 068d020a8f85 and localize $? instead.
Maxim Dounin <mdounin@mdounin.ru>
parents:
411
diff
changeset
|
63 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
64 $self->stop(); |
144
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
65 $self->stop_daemons(); |
415
020c4e47ecac
Tests: revert 068d020a8f85 and localize $? instead.
Maxim Dounin <mdounin@mdounin.ru>
parents:
411
diff
changeset
|
66 |
592
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
67 if (Test::More->builder->expected_tests) { |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
68 local $Test::Nginx::TODO = 'alerts' unless $self->{_alerts}; |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
69 |
891
f4189a38c3a4
Tests: mark 'phantom event' alerts on Solaris as TODO (iff any).
Sergey Kandaurov <pluknet@nginx.com>
parents:
865
diff
changeset
|
70 my @alerts = $self->read_file('error.log') =~ /.+\[alert\].+/gm; |
f4189a38c3a4
Tests: mark 'phantom event' alerts on Solaris as TODO (iff any).
Sergey Kandaurov <pluknet@nginx.com>
parents:
865
diff
changeset
|
71 |
f4189a38c3a4
Tests: mark 'phantom event' alerts on Solaris as TODO (iff any).
Sergey Kandaurov <pluknet@nginx.com>
parents:
865
diff
changeset
|
72 if ($^O eq 'solaris') { |
f4189a38c3a4
Tests: mark 'phantom event' alerts on Solaris as TODO (iff any).
Sergey Kandaurov <pluknet@nginx.com>
parents:
865
diff
changeset
|
73 $Test::Nginx::TODO = 'alerts' if @alerts |
f4189a38c3a4
Tests: mark 'phantom event' alerts on Solaris as TODO (iff any).
Sergey Kandaurov <pluknet@nginx.com>
parents:
865
diff
changeset
|
74 && ! grep { $_ !~ /phantom event/ } @alerts; |
f4189a38c3a4
Tests: mark 'phantom event' alerts on Solaris as TODO (iff any).
Sergey Kandaurov <pluknet@nginx.com>
parents:
865
diff
changeset
|
75 } |
918
8d489e743fcb
Tests: TODO certain alerts on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
910
diff
changeset
|
76 if ($^O eq 'MSWin32') { |
8d489e743fcb
Tests: TODO certain alerts on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
910
diff
changeset
|
77 my $re = qr/CloseHandle|TerminateProcess/; |
8d489e743fcb
Tests: TODO certain alerts on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
910
diff
changeset
|
78 $Test::Nginx::TODO = 'alerts' if @alerts |
8d489e743fcb
Tests: TODO certain alerts on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
910
diff
changeset
|
79 && ! grep { $_ !~ $re } @alerts; |
8d489e743fcb
Tests: TODO certain alerts on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
910
diff
changeset
|
80 } |
891
f4189a38c3a4
Tests: mark 'phantom event' alerts on Solaris as TODO (iff any).
Sergey Kandaurov <pluknet@nginx.com>
parents:
865
diff
changeset
|
81 |
f4189a38c3a4
Tests: mark 'phantom event' alerts on Solaris as TODO (iff any).
Sergey Kandaurov <pluknet@nginx.com>
parents:
865
diff
changeset
|
82 Test::More::is(join("\n", @alerts), '', 'no alerts'); |
592
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
83 } |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
84 |
861
6868e610eacc
Tests: detect Sanitizer errors.
Sergey Kandaurov <pluknet@nginx.com>
parents:
856
diff
changeset
|
85 if (Test::More->builder->expected_tests) { |
910
49579dd88e3f
Tests: localize $Test::Nginx::TODO for sanitizer errors.
Sergey Kandaurov <pluknet@nginx.com>
parents:
891
diff
changeset
|
86 local $Test::Nginx::TODO; |
861
6868e610eacc
Tests: detect Sanitizer errors.
Sergey Kandaurov <pluknet@nginx.com>
parents:
856
diff
changeset
|
87 my $errors = $self->read_file('error.log'); |
6868e610eacc
Tests: detect Sanitizer errors.
Sergey Kandaurov <pluknet@nginx.com>
parents:
856
diff
changeset
|
88 $errors = join "\n", $errors =~ /.+Sanitizer.+/gm; |
6868e610eacc
Tests: detect Sanitizer errors.
Sergey Kandaurov <pluknet@nginx.com>
parents:
856
diff
changeset
|
89 Test::More::is($errors, '', 'no sanitizer errors'); |
6868e610eacc
Tests: detect Sanitizer errors.
Sergey Kandaurov <pluknet@nginx.com>
parents:
856
diff
changeset
|
90 } |
6868e610eacc
Tests: detect Sanitizer errors.
Sergey Kandaurov <pluknet@nginx.com>
parents:
856
diff
changeset
|
91 |
51
d59ae7bab0a6
Tests: cat error log to stdout if TEST_NGINX_CATLOG set.
Maxim Dounin <mdounin@mdounin.ru>
parents:
50
diff
changeset
|
92 if ($ENV{TEST_NGINX_CATLOG}) { |
d59ae7bab0a6
Tests: cat error log to stdout if TEST_NGINX_CATLOG set.
Maxim Dounin <mdounin@mdounin.ru>
parents:
50
diff
changeset
|
93 system("cat $self->{_testdir}/error.log"); |
d59ae7bab0a6
Tests: cat error log to stdout if TEST_NGINX_CATLOG set.
Maxim Dounin <mdounin@mdounin.ru>
parents:
50
diff
changeset
|
94 } |
290
f781b087b7aa
Tests: fixed possible test suite hang on exit.
Vladimir Homutov <vl@nginx.com>
parents:
289
diff
changeset
|
95 if (not $ENV{TEST_NGINX_LEAVE}) { |
f781b087b7aa
Tests: fixed possible test suite hang on exit.
Vladimir Homutov <vl@nginx.com>
parents:
289
diff
changeset
|
96 eval { rmtree($self->{_testdir}); }; |
f781b087b7aa
Tests: fixed possible test suite hang on exit.
Vladimir Homutov <vl@nginx.com>
parents:
289
diff
changeset
|
97 } |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
98 } |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
100 sub has($;) { |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
101 my ($self, @features) = @_; |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
102 |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
103 foreach my $feature (@features) { |
574
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
104 Test::More::plan(skip_all => "no $feature available") |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
105 unless $self->has_module($feature) |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
106 or $self->has_feature($feature); |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
107 } |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
108 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
109 return $self; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
110 } |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
111 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
112 sub has_module($) { |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
113 my ($self, $feature) = @_; |
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
114 |
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
115 my %regex = ( |
237 | 116 sni => 'TLS SNI support enabled', |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
117 mail => '--with-mail((?!\S)|=dynamic)', |
33
4f57d57543e1
Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
29
diff
changeset
|
118 flv => '--with-http_flv_module', |
118
4bf7a819358c
Tests: add some embedded perl tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
107
diff
changeset
|
119 perl => '--with-http_perl_module', |
323
d48de852157c
Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
312
diff
changeset
|
120 auth_request |
d48de852157c
Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
312
diff
changeset
|
121 => '--with-http_auth_request_module', |
1035
c0accd6fab6c
Tests: distinguished realip and stream_ssl prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1027
diff
changeset
|
122 realip => '--with-http_realip_module', |
1133
9edf2f99c58f
Tests: fixed has() check for sub filter tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1081
diff
changeset
|
123 sub => '--with-http_sub_module', |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
124 charset => '(?s)^(?!.*--without-http_charset_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
125 gzip => '(?s)^(?!.*--without-http_gzip_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
126 ssi => '(?s)^(?!.*--without-http_ssi_module)', |
1208
a6453cf5786a
Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1206
diff
changeset
|
127 mirror => '(?s)^(?!.*--without-http_mirror_module)', |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
128 userid => '(?s)^(?!.*--without-http_userid_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
129 access => '(?s)^(?!.*--without-http_access_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
130 auth_basic |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
131 => '(?s)^(?!.*--without-http_auth_basic_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
132 autoindex |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
133 => '(?s)^(?!.*--without-http_autoindex_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
134 geo => '(?s)^(?!.*--without-http_geo_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
135 map => '(?s)^(?!.*--without-http_map_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
136 referer => '(?s)^(?!.*--without-http_referer_module)', |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
137 rewrite => '(?s)^(?!.*--without-http_rewrite_module)', |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
138 proxy => '(?s)^(?!.*--without-http_proxy_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
139 fastcgi => '(?s)^(?!.*--without-http_fastcgi_module)', |
139
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
140 uwsgi => '(?s)^(?!.*--without-http_uwsgi_module)', |
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
141 scgi => '(?s)^(?!.*--without-http_scgi_module)', |
1302
beed8146d045
Tests: grpc module prerequisite.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1263
diff
changeset
|
142 grpc => '(?s)^(?!.*--without-http_grpc_module)', |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
143 memcached |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
144 => '(?s)^(?!.*--without-http_memcached_module)', |
312
b639e76ba923
Tests: limit_zone regex updated to follow the module renaming.
Sergey Kandaurov <pluknet@nginx.com>
parents:
296
diff
changeset
|
145 limit_conn |
b639e76ba923
Tests: limit_zone regex updated to follow the module renaming.
Sergey Kandaurov <pluknet@nginx.com>
parents:
296
diff
changeset
|
146 => '(?s)^(?!.*--without-http_limit_conn_module)', |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
147 limit_req |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
148 => '(?s)^(?!.*--without-http_limit_req_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
149 empty_gif |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
150 => '(?s)^(?!.*--without-http_empty_gif_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
151 browser => '(?s)^(?!.*--without-http_browser_module)', |
411
17c5a1cc8757
Tests: upstream hash tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
395
diff
changeset
|
152 upstream_hash |
17c5a1cc8757
Tests: upstream hash tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
395
diff
changeset
|
153 => '(?s)^(?!.*--without-http_upstream_hash_module)', |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
154 upstream_ip_hash |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
155 => '(?s)^(?!.*--without-http_upstream_ip_hash_module)', |
275
6cbcfb4ef7ee
Tests: correct has() checks for upstream keepalive tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
271
diff
changeset
|
156 upstream_least_conn |
6cbcfb4ef7ee
Tests: correct has() checks for upstream keepalive tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
271
diff
changeset
|
157 => '(?s)^(?!.*--without-http_upstream_least_conn_mod)', |
1350
fda743e92b31
Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1308
diff
changeset
|
158 upstream_random |
fda743e92b31
Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1308
diff
changeset
|
159 => '(?s)^(?!.*--without-http_upstream_random_module)', |
275
6cbcfb4ef7ee
Tests: correct has() checks for upstream keepalive tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
271
diff
changeset
|
160 upstream_keepalive |
6cbcfb4ef7ee
Tests: correct has() checks for upstream keepalive tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
271
diff
changeset
|
161 => '(?s)^(?!.*--without-http_upstream_keepalive_modu)', |
560
f3434de79a7f
Tests: upstream zone tests with ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
557
diff
changeset
|
162 upstream_zone |
f3434de79a7f
Tests: upstream zone tests with ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
557
diff
changeset
|
163 => '(?s)^(?!.*--without-http_upstream_zone_module)', |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
164 http => '(?s)^(?!.*--without-http(?!\S))', |
106
7a712d3909ba
Tests: add cache availability checks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
104
diff
changeset
|
165 cache => '(?s)^(?!.*--without-http-cache)', |
121
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
166 pop3 => '(?s)^(?!.*--without-mail_pop3_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
167 imap => '(?s)^(?!.*--without-mail_imap_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
168 smtp => '(?s)^(?!.*--without-mail_smtp_module)', |
8ac1faaddd2c
Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents:
118
diff
changeset
|
169 pcre => '(?s)^(?!.*--without-pcre)', |
348
08bb2b3785a2
Tests: added basic test for split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
339
diff
changeset
|
170 split_clients |
08bb2b3785a2
Tests: added basic test for split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
339
diff
changeset
|
171 => '(?s)^(?!.*--without-http_split_clients_module)', |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
172 stream => '--with-stream((?!\S)|=dynamic)', |
977 | 173 stream_access |
174 => '(?s)^(?!.*--without-stream_access_module)', | |
978
04cb1849005a
Tests: basic tests for stream geo module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
977
diff
changeset
|
175 stream_geo |
04cb1849005a
Tests: basic tests for stream geo module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
977
diff
changeset
|
176 => '(?s)^(?!.*--without-stream_geo_module)', |
620 | 177 stream_limit_conn |
178 => '(?s)^(?!.*--without-stream_limit_conn_module)', | |
963
c26b0eaed67a
Tests: stream return and map modules prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents:
957
diff
changeset
|
179 stream_map |
c26b0eaed67a
Tests: stream return and map modules prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents:
957
diff
changeset
|
180 => '(?s)^(?!.*--without-stream_map_module)', |
c26b0eaed67a
Tests: stream return and map modules prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents:
957
diff
changeset
|
181 stream_return |
c26b0eaed67a
Tests: stream return and map modules prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents:
957
diff
changeset
|
182 => '(?s)^(?!.*--without-stream_return_module)', |
979
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
978
diff
changeset
|
183 stream_split_clients |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
978
diff
changeset
|
184 => '(?s)^(?!.*--without-stream_split_clients_module)', |
1035
c0accd6fab6c
Tests: distinguished realip and stream_ssl prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1027
diff
changeset
|
185 stream_ssl |
c0accd6fab6c
Tests: distinguished realip and stream_ssl prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1027
diff
changeset
|
186 => '--with-stream_ssl_module', |
571
5c3946ebd867
Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
560
diff
changeset
|
187 stream_upstream_hash |
5c3946ebd867
Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
560
diff
changeset
|
188 => '(?s)^(?!.*--without-stream_upstream_hash_module)', |
557
05cbe9e2def8
Tests: basic stream tests for upstream least_conn.
Sergey Kandaurov <pluknet@nginx.com>
parents:
552
diff
changeset
|
189 stream_upstream_least_conn |
05cbe9e2def8
Tests: basic stream tests for upstream least_conn.
Sergey Kandaurov <pluknet@nginx.com>
parents:
552
diff
changeset
|
190 => '(?s)^(?!.*--without-stream_upstream_least_conn_m)', |
1350
fda743e92b31
Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1308
diff
changeset
|
191 stream_upstream_random |
fda743e92b31
Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1308
diff
changeset
|
192 => '(?s)^(?!.*--without-stream_upstream_random_modul)', |
560
f3434de79a7f
Tests: upstream zone tests with ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
557
diff
changeset
|
193 stream_upstream_zone |
f3434de79a7f
Tests: upstream zone tests with ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
557
diff
changeset
|
194 => '(?s)^(?!.*--without-stream_upstream_zone_module)', |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
195 ); |
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
196 |
100
9ddc18214854
Tests: arbitrary regexp support in has().
Maxim Dounin <mdounin@mdounin.ru>
parents:
96
diff
changeset
|
197 my $re = $regex{$feature}; |
9ddc18214854
Tests: arbitrary regexp support in has().
Maxim Dounin <mdounin@mdounin.ru>
parents:
96
diff
changeset
|
198 $re = $feature if !defined $re; |
9ddc18214854
Tests: arbitrary regexp support in has().
Maxim Dounin <mdounin@mdounin.ru>
parents:
96
diff
changeset
|
199 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
200 $self->{_configure_args} = `$NGINX -V 2>&1` |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
201 if !defined $self->{_configure_args}; |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
202 |
1042
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
203 return 1 if $self->{_configure_args} =~ $re; |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
204 |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
205 my %modules = ( |
1063
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
206 http_geoip |
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
207 => 'ngx_http_geoip_module', |
1042
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
208 image_filter |
1053
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
209 => 'ngx_http_image_filter_module', |
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
210 perl => 'ngx_http_perl_module', |
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
211 xslt => 'ngx_http_xslt_filter_module', |
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
212 mail => 'ngx_mail_module', |
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
213 stream => 'ngx_stream_module', |
1063
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
214 stream_geoip |
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
215 => 'ngx_stream_geoip_module', |
1042
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
216 ); |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
217 |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
218 my $module = $modules{$feature}; |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
219 if (defined $module && defined $ENV{TEST_NGINX_GLOBALS}) { |
1053
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
220 $re = qr/load_module\s+[^;]*\Q$module\E[-\w]*\.so\s*;/; |
1042
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
221 return 1 if $ENV{TEST_NGINX_GLOBALS} =~ $re; |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
222 } |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
223 |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
224 return 0; |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
225 } |
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
226 |
574
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
227 sub has_feature($) { |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
228 my ($self, $feature) = @_; |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
229 |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
230 if ($feature eq 'symlink') { |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
231 return $^O ne 'MSWin32'; |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
232 } |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
233 |
800
51d3243a762f
Tests: skip tests with unix domain sockets on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
778
diff
changeset
|
234 if ($feature eq 'unix') { |
51d3243a762f
Tests: skip tests with unix domain sockets on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
778
diff
changeset
|
235 return $^O ne 'MSWin32'; |
51d3243a762f
Tests: skip tests with unix domain sockets on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
778
diff
changeset
|
236 } |
51d3243a762f
Tests: skip tests with unix domain sockets on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
778
diff
changeset
|
237 |
947
b9e42c554ba7
Tests: skip UDP tests on win32, udp feature introduced.
Sergey Kandaurov <pluknet@nginx.com>
parents:
918
diff
changeset
|
238 if ($feature eq 'udp') { |
b9e42c554ba7
Tests: skip UDP tests on win32, udp feature introduced.
Sergey Kandaurov <pluknet@nginx.com>
parents:
918
diff
changeset
|
239 return $^O ne 'MSWin32'; |
b9e42c554ba7
Tests: skip UDP tests on win32, udp feature introduced.
Sergey Kandaurov <pluknet@nginx.com>
parents:
918
diff
changeset
|
240 } |
b9e42c554ba7
Tests: skip UDP tests on win32, udp feature introduced.
Sergey Kandaurov <pluknet@nginx.com>
parents:
918
diff
changeset
|
241 |
574
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
242 return 0; |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
243 } |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
244 |
242
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
245 sub has_version($) { |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
246 my ($self, $need) = @_; |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
247 |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
248 $self->{_configure_args} = `$NGINX -V 2>&1` |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
249 if !defined $self->{_configure_args}; |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
250 |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
251 $self->{_configure_args} =~ m!nginx version: nginx/([0-9.]+)!; |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
252 |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
253 my @v = split(/\./, $1); |
284
8fcc46212e5e
Tests: fix has_version() to handle previous branch checks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
281
diff
changeset
|
254 my ($n, $v); |
242
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
255 |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
256 for $n (split(/\./, $need)) { |
284
8fcc46212e5e
Tests: fix has_version() to handle previous branch checks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
281
diff
changeset
|
257 $v = shift @v || 0; |
8fcc46212e5e
Tests: fix has_version() to handle previous branch checks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
281
diff
changeset
|
258 return 0 if $n > $v; |
8fcc46212e5e
Tests: fix has_version() to handle previous branch checks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
281
diff
changeset
|
259 return 1 if $v > $n; |
242
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
260 } |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
261 |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
262 return 1; |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
263 } |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
264 |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
265 sub has_daemon($) { |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
266 my ($self, $daemon) = @_; |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
267 |
220
f6f60780f758
Tests: fail has_daemon() on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
219
diff
changeset
|
268 if ($^O eq 'MSWin32') { |
1221
852856f8e7dc
Tests: added has_daemon() support for win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1208
diff
changeset
|
269 `for %i in ($daemon.exe) do \@echo | set /p x=%~\$PATH:i` |
852856f8e7dc
Tests: added has_daemon() support for win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1208
diff
changeset
|
270 or Test::More::plan(skip_all => "$daemon not found"); |
220
f6f60780f758
Tests: fail has_daemon() on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
219
diff
changeset
|
271 return $self; |
f6f60780f758
Tests: fail has_daemon() on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
219
diff
changeset
|
272 } |
f6f60780f758
Tests: fail has_daemon() on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
219
diff
changeset
|
273 |
232
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
274 if ($^O eq 'solaris') { |
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
275 Test::More::plan(skip_all => "$daemon not found") |
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
276 unless `command -v $daemon`; |
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
277 return $self; |
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
278 } |
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
279 |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
280 Test::More::plan(skip_all => "$daemon not found") |
232
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
281 unless `which $daemon`; |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
282 |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
283 return $self; |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
284 } |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
285 |
392
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
286 sub try_run($$) { |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
287 my ($self, $message) = @_; |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
288 |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
289 eval { |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
290 open OLDERR, ">&", \*STDERR; close STDERR; |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
291 $self->run(); |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
292 open STDERR, ">&", \*OLDERR; |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
293 }; |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
294 |
1238
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
295 return $self unless $@; |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
296 |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
297 if ($ENV{TEST_NGINX_VERBOSE}) { |
1308
58fdd9515f81
Tests: fixed printing try_run() diagnostics.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1302
diff
changeset
|
298 my $path = $self->{_configure_args} =~ m!--error-log-path=(\S+)! |
58fdd9515f81
Tests: fixed printing try_run() diagnostics.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1302
diff
changeset
|
299 ? $1 : 'logs/error.log'; |
1238
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
300 $path = "$self->{_testdir}/$path" if index($path, '/'); |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
301 |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
302 open F, '<', $path or die "Can't open $path: $!"; |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
303 log_core($_) while (<F>); |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
304 close F; |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
305 } |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
306 |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
307 Test::More::plan(skip_all => $message); |
392
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
308 return $self; |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
309 } |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
310 |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
311 sub plan($) { |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
312 my ($self, $plan) = @_; |
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
313 |
861
6868e610eacc
Tests: detect Sanitizer errors.
Sergey Kandaurov <pluknet@nginx.com>
parents:
856
diff
changeset
|
314 Test::More::plan(tests => $plan + 2); |
592
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
315 |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
316 return $self; |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
317 } |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
318 |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
319 sub todo_alerts() { |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
320 my ($self) = @_; |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
321 |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
322 $self->{_alerts} = 0; |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
323 |
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
324 return $self; |
27
fb94a224fef2
Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
24
diff
changeset
|
325 } |
fb94a224fef2
Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
24
diff
changeset
|
326 |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
327 sub run(;$) { |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
328 my ($self, $conf) = @_; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
329 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
330 my $testdir = $self->{_testdir}; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
331 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
332 if (defined $conf) { |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
333 my $c = `cat $conf`; |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
334 $self->write_file_expand('nginx.conf', $c); |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
335 } |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
336 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
337 my $pid = fork(); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
338 die "Unable to fork(): $!\n" unless defined $pid; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
339 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
340 if ($pid == 0) { |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
341 my @globals = $self->{_test_globals} ? |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
342 () : ('-g', "pid $testdir/nginx.pid; " |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
343 . "error_log $testdir/error.log debug;"); |
524
084f8c8cb648
Tests: compatibility with old nginx versions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
467
diff
changeset
|
344 exec($NGINX, '-p', "$testdir/", '-c', 'nginx.conf', @globals), |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
345 or die "Unable to exec(): $!\n"; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
346 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
347 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
348 # wait for nginx to start |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
349 |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
350 $self->waitforfile("$testdir/nginx.pid", $pid) |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
351 or die "Can't start nginx"; |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
352 |
1263
ea3c7659b6c1
Tests: handled early pidfile write on win32 in the run() routine.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1238
diff
changeset
|
353 for (1 .. 50) { |
ea3c7659b6c1
Tests: handled early pidfile write on win32 in the run() routine.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1238
diff
changeset
|
354 last if $^O ne 'MSWin32'; |
ea3c7659b6c1
Tests: handled early pidfile write on win32 in the run() routine.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1238
diff
changeset
|
355 last if $self->read_file('error.log') =~ /create thread/; |
ea3c7659b6c1
Tests: handled early pidfile write on win32 in the run() routine.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1238
diff
changeset
|
356 select undef, undef, undef, 0.1; |
ea3c7659b6c1
Tests: handled early pidfile write on win32 in the run() routine.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1238
diff
changeset
|
357 } |
ea3c7659b6c1
Tests: handled early pidfile write on win32 in the run() routine.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1238
diff
changeset
|
358 |
20
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
359 $self->{_started} = 1; |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
360 return $self; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
361 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
362 |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
363 sub port { |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
364 my ($num, %opts) = @_; |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
365 my ($sock, $lock, $port); |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
366 |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
367 goto done if defined $ports{$num}; |
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
368 |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
369 my $socket = sub { |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
370 IO::Socket::INET->new( |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
371 Proto => 'tcp', |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
372 LocalAddr => '127.0.0.1:' . shift, |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
373 Listen => 1, |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
374 Reuse => ($^O ne 'MSWin32'), |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
375 ); |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
376 }; |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
377 |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
378 my $socketl = sub { |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
379 IO::Socket::INET->new( |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
380 Proto => 'udp', |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
381 LocalAddr => '127.0.0.1:' . shift, |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
382 ); |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
383 }; |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
384 |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
385 ($socket, $socketl) = ($socketl, $socket) if $opts{udp}; |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
386 |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
387 $port = $num; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
388 |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
389 for (1 .. 10) { |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
390 $port = int($port / 500) * 500 + int(rand(500)) unless $_ == 1; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
391 |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
392 $lock = $socketl->($port) or next; |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
393 $sock = $socket->($port) and last; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
394 } |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
395 |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
396 die "Port limit exceeded" unless defined $lock and defined $sock; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
397 |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
398 $ports{$num} = { |
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
399 port => $port, |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
400 socket => $lock |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
401 }; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
402 |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
403 done: |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
404 return $ports{$num}{socket} if $opts{socket}; |
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
405 return $ports{$num}{port}; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
406 } |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
407 |
621
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
408 sub dump_config() { |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
409 my ($self) = @_; |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
410 |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
411 my $testdir = $self->{_testdir}; |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
412 |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
413 my @globals = $self->{_test_globals} ? |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
414 () : ('-g', "pid $testdir/nginx.pid; " |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
415 . "error_log $testdir/error.log debug;"); |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
416 my $command = "$NGINX -T -p $testdir/ -c nginx.conf " |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
417 . join(' ', @globals); |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
418 |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
419 return qx/$command 2>&1/; |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
420 } |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
421 |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
422 sub waitforfile($;$) { |
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
423 my ($self, $file, $pid) = @_; |
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
424 my $exited; |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
425 |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
426 # wait for file to appear |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
427 # or specified process to exit |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
428 |
628
0940773278c7
Tests: backed out previous change, adjusted general timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
621
diff
changeset
|
429 for (1 .. 50) { |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
430 return 1 if -e $file; |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
431 return 0 if $exited; |
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
432 $exited = waitpid($pid, WNOHANG) != 0 if $pid; |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
433 select undef, undef, undef, 0.1; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
434 } |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
435 |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
436 return undef; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
437 } |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
438 |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
439 sub waitforsocket($) { |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
440 my ($self, $peer) = @_; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
441 |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
442 # wait for socket to accept connections |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
443 |
628
0940773278c7
Tests: backed out previous change, adjusted general timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
621
diff
changeset
|
444 for (1 .. 50) { |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
445 my $s = IO::Socket::INET->new( |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
446 Proto => 'tcp', |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
447 PeerAddr => $peer |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
448 ); |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
449 |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
450 return 1 if defined $s; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
451 |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
452 select undef, undef, undef, 0.1; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
453 } |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
454 |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
455 return undef; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
456 } |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
457 |
1206
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
458 sub reload() { |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
459 my ($self) = @_; |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
460 |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
461 return $self unless $self->{_started}; |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
462 |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
463 my $pid = $self->read_file('nginx.pid'); |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
464 |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
465 if ($^O eq 'MSWin32') { |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
466 my $testdir = $self->{_testdir}; |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
467 my @globals = $self->{_test_globals} ? |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
468 () : ('-g', "pid $testdir/nginx.pid; " |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
469 . "error_log $testdir/error.log debug;"); |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
470 system($NGINX, '-p', $testdir, '-c', "nginx.conf", |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
471 '-s', 'reload', @globals) == 0 |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
472 or die "system() failed: $?\n"; |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
473 |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
474 } else { |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
475 kill 'HUP', $pid; |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
476 } |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
477 |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
478 return $self; |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
479 } |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
480 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
481 sub stop() { |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
482 my ($self) = @_; |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
483 |
144
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
484 return $self unless $self->{_started}; |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
485 |
1205
c0fa3f818103
Tests: use read_file() in Test::Nginx::stop().
Sergey Kandaurov <pluknet@nginx.com>
parents:
1170
diff
changeset
|
486 my $pid = $self->read_file('nginx.pid'); |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
487 |
219
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
488 if ($^O eq 'MSWin32') { |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
489 my $testdir = $self->{_testdir}; |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
490 my @globals = $self->{_test_globals} ? |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
491 () : ('-g', "pid $testdir/nginx.pid; " |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
492 . "error_log $testdir/error.log debug;"); |
395
d7d9b4367bab
Tests: start nginx prefixed to a temporary directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
392
diff
changeset
|
493 system($NGINX, '-p', $testdir, '-c', "nginx.conf", |
d7d9b4367bab
Tests: start nginx prefixed to a temporary directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
392
diff
changeset
|
494 '-s', 'stop', @globals) == 0 |
222
5b7883daaf82
Tests: use kill(9, $pid) on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
220
diff
changeset
|
495 or die "system() failed: $?\n"; |
219
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
496 |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
497 } else { |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
498 kill 'QUIT', $pid; |
219
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
499 } |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
500 |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
501 waitpid($pid, 0); |
144
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
502 |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
503 $self->{_started} = 0; |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
504 |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
505 return $self; |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
506 } |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
507 |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
508 sub stop_daemons() { |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
509 my ($self) = @_; |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
510 |
20
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
511 while ($self->{_daemons} && scalar @{$self->{_daemons}}) { |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
512 my $p = shift @{$self->{_daemons}}; |
222
5b7883daaf82
Tests: use kill(9, $pid) on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
220
diff
changeset
|
513 kill $^O eq 'MSWin32' ? 9 : 'TERM', $p; |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
514 waitpid($p, 0); |
20
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
515 } |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
516 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
517 return $self; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
518 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
519 |
467
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
520 sub read_file($) { |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
521 my ($self, $name) = @_; |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
522 local $/; |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
523 |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
524 open F, '<', $self->{_testdir} . '/' . $name |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
525 or die "Can't open $name: $!"; |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
526 my $content = <F>; |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
527 close F; |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
528 |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
529 return $content; |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
530 } |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
531 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
532 sub write_file($$) { |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
533 my ($self, $name, $content) = @_; |
12
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
534 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
535 open F, '>' . $self->{_testdir} . '/' . $name |
12
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
536 or die "Can't create $name: $!"; |
778
9e00ab661e87
Tests: use binmode in write_file().
Sergey Kandaurov <pluknet@nginx.com>
parents:
777
diff
changeset
|
537 binmode F; |
12
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
538 print F $content; |
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
539 close F; |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
540 |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
541 return $self; |
12
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
542 } |
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
543 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
544 sub write_file_expand($$) { |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
545 my ($self, $name, $content) = @_; |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
546 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
547 $content =~ s/%%TEST_GLOBALS%%/$self->test_globals()/gmse; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
548 $content =~ s/%%TEST_GLOBALS_HTTP%%/$self->test_globals_http()/gmse; |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
549 $content =~ s/%%TESTDIR%%/$self->{_testdir}/gms; |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
550 |
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
551 $content =~ s/127\.0\.0\.1:(8\d\d\d)/'127.0.0.1:' . port($1)/gmse; |
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
552 |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
553 $content =~ s/%%PORT_(\d+)%%/port($1)/gmse; |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
554 $content =~ s/%%PORT_(\d+)_UDP%%/port($1, udp => 1)/gmse; |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
555 |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
556 return $self->write_file($name, $content); |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
557 } |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
558 |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
559 sub run_daemon($;@) { |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
560 my ($self, $code, @args) = @_; |
20
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
561 |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
562 my $pid = fork(); |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
563 die "Can't fork daemon: $!\n" unless defined $pid; |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
564 |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
565 if ($pid == 0) { |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
566 if (ref($code) eq 'CODE') { |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
567 $code->(@args); |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
568 exit 0; |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
569 } else { |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
570 exec($code, @args); |
195
d73ab4b6ef4a
Tests: fix run_daemon() in case of exec() failure.
Maxim Dounin <mdounin@mdounin.ru>
parents:
194
diff
changeset
|
571 exit 0; |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
572 } |
20
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
573 } |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
574 |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
575 $self->{_daemons} = [] unless defined $self->{_daemons}; |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
576 push @{$self->{_daemons}}, $pid; |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
577 |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
578 return $self; |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
579 } |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
580 |
46
239a346b4913
Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
581 sub testdir() { |
239a346b4913
Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
582 my ($self) = @_; |
239a346b4913
Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
583 return $self->{_testdir}; |
239a346b4913
Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
584 } |
239a346b4913
Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
585 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
586 sub test_globals() { |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
587 my ($self) = @_; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
588 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
589 return $self->{_test_globals} |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
590 if defined $self->{_test_globals}; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
591 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
592 my $s = ''; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
593 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
594 $s .= "pid $self->{_testdir}/nginx.pid;\n"; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
595 $s .= "error_log $self->{_testdir}/error.log debug;\n"; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
596 |
375
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
597 $s .= $ENV{TEST_NGINX_GLOBALS} |
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
598 if $ENV{TEST_NGINX_GLOBALS}; |
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
599 |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
600 $s .= $self->test_globals_modules(); |
1027
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
601 $s .= $self->test_globals_perl5lib() if $s !~ /env PERL5LIB/; |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
602 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
603 $self->{_test_globals} = $s; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
604 } |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
605 |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
606 sub test_globals_modules() { |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
607 my ($self) = @_; |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
608 |
856
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
609 my $modules = $ENV{TEST_NGINX_MODULES}; |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
610 |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
611 if (!defined $modules) { |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
612 my ($volume, $dir) = File::Spec->splitpath($NGINX); |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
613 $modules = File::Spec->catpath($volume, $dir, ''); |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
614 } |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
615 |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
616 $modules = File::Spec->rel2abs($modules); |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
617 $modules =~ s!\\!/!g if $^O eq 'MSWin32'; |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
618 |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
619 my $s = ''; |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
620 |
1063
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
621 $s .= "load_module $modules/ngx_http_geoip_module.so;\n" |
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
622 if $self->has_module('http_geoip\S+=dynamic'); |
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
623 |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
624 $s .= "load_module $modules/ngx_http_image_filter_module.so;\n" |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
625 if $self->has_module('image_filter\S+=dynamic'); |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
626 |
865
f8f8304c8832
Tests: added support for perl dynamic module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
861
diff
changeset
|
627 $s .= "load_module $modules/ngx_http_perl_module.so;\n" |
f8f8304c8832
Tests: added support for perl dynamic module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
861
diff
changeset
|
628 if $self->has_module('perl\S+=dynamic'); |
f8f8304c8832
Tests: added support for perl dynamic module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
861
diff
changeset
|
629 |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
630 $s .= "load_module $modules/ngx_http_xslt_filter_module.so;\n" |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
631 if $self->has_module('xslt\S+=dynamic'); |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
632 |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
633 $s .= "load_module $modules/ngx_mail_module.so;\n" |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
634 if $self->has_module('mail=dynamic'); |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
635 |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
636 $s .= "load_module $modules/ngx_stream_module.so;\n" |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
637 if $self->has_module('stream=dynamic'); |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
638 |
1063
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
639 $s .= "load_module $modules/ngx_stream_geoip_module.so;\n" |
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
640 if $self->has_module('stream_geoip\S+=dynamic'); |
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
641 |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
642 return $s; |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
643 } |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
644 |
1027
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
645 sub test_globals_perl5lib() { |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
646 my ($self) = @_; |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
647 |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
648 return '' unless $self->has_module('perl'); |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
649 |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
650 my ($volume, $dir) = File::Spec->splitpath($NGINX); |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
651 my $objs = File::Spec->catpath($volume, $dir, ''); |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
652 |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
653 $objs = File::Spec->rel2abs($objs); |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
654 $objs =~ s!\\!/!g if $^O eq 'MSWin32'; |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
655 |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
656 return "env PERL5LIB=$objs/src/http/modules/perl:" |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
657 . "$objs/src/http/modules/perl/blib/arch;\n"; |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
658 } |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
659 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
660 sub test_globals_http() { |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
661 my ($self) = @_; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
662 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
663 return $self->{_test_globals_http} |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
664 if defined $self->{_test_globals_http}; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
665 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
666 my $s = ''; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
667 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
668 $s .= "root $self->{_testdir};\n"; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
669 $s .= "access_log $self->{_testdir}/access.log;\n"; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
670 $s .= "client_body_temp_path $self->{_testdir}/client_body_temp;\n"; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
671 |
243
de7338227832
Tests: removed trailing spaces.
Homutov Vladimir <vl@nginx.com>
parents:
242
diff
changeset
|
672 $s .= "fastcgi_temp_path $self->{_testdir}/fastcgi_temp;\n" |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
673 if $self->has_module('fastcgi'); |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
674 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
675 $s .= "proxy_temp_path $self->{_testdir}/proxy_temp;\n" |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
676 if $self->has_module('proxy'); |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
677 |
139
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
678 $s .= "uwsgi_temp_path $self->{_testdir}/uwsgi_temp;\n" |
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
679 if $self->has_module('uwsgi'); |
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
680 |
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
681 $s .= "scgi_temp_path $self->{_testdir}/scgi_temp;\n" |
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
682 if $self->has_module('scgi'); |
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
683 |
375
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
684 $s .= $ENV{TEST_NGINX_GLOBALS_HTTP} |
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
685 if $ENV{TEST_NGINX_GLOBALS_HTTP}; |
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
686 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
687 $self->{_test_globals_http} = $s; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
688 } |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
689 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
690 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
691 |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
692 sub log_core { |
67
5d16f380cd75
Tests: don't output in/out unless TEST_NGINX_VERBOSE set.
Maxim Dounin <mdounin@mdounin.ru>
parents:
51
diff
changeset
|
693 return unless $ENV{TEST_NGINX_VERBOSE}; |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
694 my ($prefix, $msg) = @_; |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
695 ($prefix, $msg) = ('', $prefix) unless defined $msg; |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
696 $prefix .= ' ' if length($prefix) > 0; |
164
f602276b9bb9
Tests: truncate huge messages while logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
163
diff
changeset
|
697 |
281
53068d38a3ce
Tests: truncate messages to 2048 bytes instead of 4096.
Maxim Dounin <mdounin@mdounin.ru>
parents:
275
diff
changeset
|
698 if (length($msg) > 2048) { |
53068d38a3ce
Tests: truncate messages to 2048 bytes instead of 4096.
Maxim Dounin <mdounin@mdounin.ru>
parents:
275
diff
changeset
|
699 $msg = substr($msg, 0, 2048) |
53068d38a3ce
Tests: truncate messages to 2048 bytes instead of 4096.
Maxim Dounin <mdounin@mdounin.ru>
parents:
275
diff
changeset
|
700 . "(...logged only 2048 of " . length($msg) |
165
fca70f483608
Tests: fix previous commit (print original message length).
Maxim Dounin <mdounin@mdounin.ru>
parents:
164
diff
changeset
|
701 . " bytes)"; |
164
f602276b9bb9
Tests: truncate huge messages while logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
163
diff
changeset
|
702 } |
f602276b9bb9
Tests: truncate huge messages while logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
163
diff
changeset
|
703 |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
704 $msg =~ s/^/# $prefix/gm; |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
705 $msg =~ s/([^\x20-\x7e])/sprintf('\\x%02x', ord($1)) . (($1 eq "\n") ? "\n" : '')/gmxe; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
706 $msg .= "\n" unless $msg =~ /\n\Z/; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
707 print $msg; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
708 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
709 |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
710 sub log_out { |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
711 log_core('>>', @_); |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
712 } |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
713 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
714 sub log_in { |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
715 log_core('<<', @_); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
716 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
717 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
718 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
719 |
79
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
720 sub http_get($;%) { |
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
721 my ($url, %extra) = @_; |
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
722 return http(<<EOF, %extra); |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
723 GET $url HTTP/1.0 |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
724 Host: localhost |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
725 |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
726 EOF |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
727 } |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
728 |
79
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
729 sub http_head($;%) { |
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
730 my ($url, %extra) = @_; |
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
731 return http(<<EOF, %extra); |
41
1b3c22a87e5d
Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
37
diff
changeset
|
732 HEAD $url HTTP/1.0 |
1b3c22a87e5d
Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
37
diff
changeset
|
733 Host: localhost |
1b3c22a87e5d
Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
37
diff
changeset
|
734 |
1b3c22a87e5d
Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
37
diff
changeset
|
735 EOF |
1b3c22a87e5d
Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
37
diff
changeset
|
736 } |
1b3c22a87e5d
Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
37
diff
changeset
|
737 |
79
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
738 sub http($;%) { |
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
739 my ($request, %extra) = @_; |
438
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
740 |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
741 my $s = http_start($request, %extra); |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
742 |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
743 return $s if $extra{start} or !defined $s; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
744 return http_end($s); |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
745 } |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
746 |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
747 sub http_start($;%) { |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
748 my ($request, %extra) = @_; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
749 my $s; |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
750 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
751 eval { |
96
ecff5407867c
Tests: better handle unexpected connection close from nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
93
diff
changeset
|
752 local $SIG{ALRM} = sub { die "timeout\n" }; |
ecff5407867c
Tests: better handle unexpected connection close from nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
93
diff
changeset
|
753 local $SIG{PIPE} = sub { die "sigpipe\n" }; |
628
0940773278c7
Tests: backed out previous change, adjusted general timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
621
diff
changeset
|
754 alarm(8); |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
755 |
438
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
756 $s = $extra{socket} || IO::Socket::INET->new( |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
757 Proto => 'tcp', |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
758 PeerAddr => '127.0.0.1:' . port(8080) |
253
f440a8acbf39
Tests: report connection errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
243
diff
changeset
|
759 ) |
f440a8acbf39
Tests: report connection errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
243
diff
changeset
|
760 or die "Can't connect to nginx: $!\n"; |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
761 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
762 log_out($request); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
763 $s->print($request); |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
764 |
79
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
765 select undef, undef, undef, $extra{sleep} if $extra{sleep}; |
87
f2d09159a8f3
Tests: proxy_store leaving temporary files bug test.
Maxim Dounin <mdounin@mdounin.ru>
parents:
79
diff
changeset
|
766 return '' if $extra{aborted}; |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
767 |
271
1a6eef7ac914
Tests: test for r->request_body->buf incorrect reuse.
Maxim Dounin <mdounin@mdounin.ru>
parents:
270
diff
changeset
|
768 if ($extra{body}) { |
1a6eef7ac914
Tests: test for r->request_body->buf incorrect reuse.
Maxim Dounin <mdounin@mdounin.ru>
parents:
270
diff
changeset
|
769 log_out($extra{body}); |
1a6eef7ac914
Tests: test for r->request_body->buf incorrect reuse.
Maxim Dounin <mdounin@mdounin.ru>
parents:
270
diff
changeset
|
770 $s->print($extra{body}); |
1a6eef7ac914
Tests: test for r->request_body->buf incorrect reuse.
Maxim Dounin <mdounin@mdounin.ru>
parents:
270
diff
changeset
|
771 } |
1a6eef7ac914
Tests: test for r->request_body->buf incorrect reuse.
Maxim Dounin <mdounin@mdounin.ru>
parents:
270
diff
changeset
|
772 |
438
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
773 alarm(0); |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
774 }; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
775 alarm(0); |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
776 if ($@) { |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
777 log_in("died: $@"); |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
778 return undef; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
779 } |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
780 |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
781 return $s; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
782 } |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
783 |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
784 sub http_end($;%) { |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
785 my ($s) = @_; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
786 my $reply; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
787 |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
788 eval { |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
789 local $SIG{ALRM} = sub { die "timeout\n" }; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
790 local $SIG{PIPE} = sub { die "sigpipe\n" }; |
628
0940773278c7
Tests: backed out previous change, adjusted general timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
621
diff
changeset
|
791 alarm(8); |
438
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
792 |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
793 local $/; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
794 $reply = $s->getline(); |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
795 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
796 alarm(0); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
797 }; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
798 alarm(0); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
799 if ($@) { |
96
ecff5407867c
Tests: better handle unexpected connection close from nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
93
diff
changeset
|
800 log_in("died: $@"); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
801 return undef; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
802 } |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
803 |
209
5137f27935b4
Tests: log timeouts in IMAP/POP3/SMTP.
Maxim Dounin <mdounin@mdounin.ru>
parents:
195
diff
changeset
|
804 log_in($reply); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
805 return $reply; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
806 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
807 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
808 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
809 |
93
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
810 sub http_gzip_request { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
811 my ($url) = @_; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
812 my $r = http(<<EOF); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
813 GET $url HTTP/1.1 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
814 Host: localhost |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
815 Connection: close |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
816 Accept-Encoding: gzip |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
817 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
818 EOF |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
819 } |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
820 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
821 sub http_content { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
822 my ($text) = @_; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
823 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
824 return undef if !defined $text; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
825 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
826 if ($text !~ /(.*?)\x0d\x0a?\x0d\x0a?(.*)/ms) { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
827 return undef; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
828 } |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
829 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
830 my ($headers, $body) = ($1, $2); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
831 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
832 if ($headers !~ /Transfer-Encoding: chunked/i) { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
833 return $body; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
834 } |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
835 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
836 my $content = ''; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
837 while ($body =~ /\G\x0d?\x0a?([0-9a-f]+)\x0d\x0a?/gcmsi) { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
838 my $len = hex($1); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
839 $content .= substr($body, pos($body), $len); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
840 pos($body) += $len; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
841 } |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
842 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
843 return $content; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
844 } |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
845 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
846 sub http_gzip_like { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
847 my ($text, $re, $name) = @_; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
848 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
849 SKIP: { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
850 eval { require IO::Uncompress::Gunzip; }; |
601
3a9a7b4f27f0
Tests: properly skip tests if run without IO::Uncompress::Gunzip.
Sergey Kandaurov <pluknet@nginx.com>
parents:
592
diff
changeset
|
851 Test::More::skip( |
93
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
852 "IO::Uncompress::Gunzip not installed", 1) if $@; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
853 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
854 my $in = http_content($text); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
855 my $out; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
856 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
857 IO::Uncompress::Gunzip::gunzip(\$in => \$out); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
858 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
859 Test::More->builder->like($out, $re, $name); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
860 } |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
861 } |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
862 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
863 ############################################################################### |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
864 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
865 1; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
866 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
867 ############################################################################### |