Mercurial > hg > nginx-tests
annotate lib/Test/Nginx.pm @ 1593:a328109be893
Tests: stream set tests.
author | Vladimir Kokshenev <v.kokshenev@f5.com> |
---|---|
date | Thu, 24 Sep 2020 14:30:06 -0700 |
parents | fda743e92b31 |
children | f3ba4c74de31 |
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)', |
1593
a328109be893
Tests: stream set tests.
Vladimir Kokshenev <v.kokshenev@f5.com>
parents:
1350
diff
changeset
|
183 stream_set |
a328109be893
Tests: stream set tests.
Vladimir Kokshenev <v.kokshenev@f5.com>
parents:
1350
diff
changeset
|
184 => '(?s)^(?!.*--without-stream_set_module)', |
979
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
978
diff
changeset
|
185 stream_split_clients |
ef6be3201851
Tests: basic tests for stream split_clients module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
978
diff
changeset
|
186 => '(?s)^(?!.*--without-stream_split_clients_module)', |
1035
c0accd6fab6c
Tests: distinguished realip and stream_ssl prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1027
diff
changeset
|
187 stream_ssl |
c0accd6fab6c
Tests: distinguished realip and stream_ssl prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1027
diff
changeset
|
188 => '--with-stream_ssl_module', |
571
5c3946ebd867
Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
560
diff
changeset
|
189 stream_upstream_hash |
5c3946ebd867
Tests: basic stream tests for upstream hash.
Sergey Kandaurov <pluknet@nginx.com>
parents:
560
diff
changeset
|
190 => '(?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
|
191 stream_upstream_least_conn |
05cbe9e2def8
Tests: basic stream tests for upstream least_conn.
Sergey Kandaurov <pluknet@nginx.com>
parents:
552
diff
changeset
|
192 => '(?s)^(?!.*--without-stream_upstream_least_conn_m)', |
1350
fda743e92b31
Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1308
diff
changeset
|
193 stream_upstream_random |
fda743e92b31
Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1308
diff
changeset
|
194 => '(?s)^(?!.*--without-stream_upstream_random_modul)', |
560
f3434de79a7f
Tests: upstream zone tests with ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
557
diff
changeset
|
195 stream_upstream_zone |
f3434de79a7f
Tests: upstream zone tests with ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
557
diff
changeset
|
196 => '(?s)^(?!.*--without-stream_upstream_zone_module)', |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
197 ); |
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
198 |
100
9ddc18214854
Tests: arbitrary regexp support in has().
Maxim Dounin <mdounin@mdounin.ru>
parents:
96
diff
changeset
|
199 my $re = $regex{$feature}; |
9ddc18214854
Tests: arbitrary regexp support in has().
Maxim Dounin <mdounin@mdounin.ru>
parents:
96
diff
changeset
|
200 $re = $feature if !defined $re; |
9ddc18214854
Tests: arbitrary regexp support in has().
Maxim Dounin <mdounin@mdounin.ru>
parents:
96
diff
changeset
|
201 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
202 $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
|
203 if !defined $self->{_configure_args}; |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
204 |
1042
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
205 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
|
206 |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
207 my %modules = ( |
1063
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
208 http_geoip |
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
209 => '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
|
210 image_filter |
1053
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
211 => 'ngx_http_image_filter_module', |
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
212 perl => 'ngx_http_perl_module', |
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
213 xslt => 'ngx_http_xslt_filter_module', |
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
214 mail => 'ngx_mail_module', |
fbf731526f49
Tests: relaxed check for known dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1045
diff
changeset
|
215 stream => 'ngx_stream_module', |
1063
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
216 stream_geoip |
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
217 => '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
|
218 ); |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
219 |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
220 my $module = $modules{$feature}; |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
221 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
|
222 $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
|
223 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
|
224 } |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
225 |
9339673bb454
Tests: check for known dynamic modules via TEST_NGINX_GLOBALS.
Andrei Belov <defan@nginx.com>
parents:
1035
diff
changeset
|
226 return 0; |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
227 } |
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
228 |
574
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
229 sub has_feature($) { |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
230 my ($self, $feature) = @_; |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
231 |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
232 if ($feature eq 'symlink') { |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
233 return $^O ne 'MSWin32'; |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
234 } |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
235 |
800
51d3243a762f
Tests: skip tests with unix domain sockets on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
778
diff
changeset
|
236 if ($feature eq 'unix') { |
51d3243a762f
Tests: skip tests with unix domain sockets on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
778
diff
changeset
|
237 return $^O ne 'MSWin32'; |
51d3243a762f
Tests: skip tests with unix domain sockets on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
778
diff
changeset
|
238 } |
51d3243a762f
Tests: skip tests with unix domain sockets on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
778
diff
changeset
|
239 |
947
b9e42c554ba7
Tests: skip UDP tests on win32, udp feature introduced.
Sergey Kandaurov <pluknet@nginx.com>
parents:
918
diff
changeset
|
240 if ($feature eq 'udp') { |
b9e42c554ba7
Tests: skip UDP tests on win32, udp feature introduced.
Sergey Kandaurov <pluknet@nginx.com>
parents:
918
diff
changeset
|
241 return $^O ne 'MSWin32'; |
b9e42c554ba7
Tests: skip UDP tests on win32, udp feature introduced.
Sergey Kandaurov <pluknet@nginx.com>
parents:
918
diff
changeset
|
242 } |
b9e42c554ba7
Tests: skip UDP tests on win32, udp feature introduced.
Sergey Kandaurov <pluknet@nginx.com>
parents:
918
diff
changeset
|
243 |
574
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
244 return 0; |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
245 } |
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
571
diff
changeset
|
246 |
242
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
247 sub has_version($) { |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
248 my ($self, $need) = @_; |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
249 |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
250 $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
|
251 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
|
252 |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
253 $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
|
254 |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
255 my @v = split(/\./, $1); |
284
8fcc46212e5e
Tests: fix has_version() to handle previous branch checks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
281
diff
changeset
|
256 my ($n, $v); |
242
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
257 |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
258 for $n (split(/\./, $need)) { |
284
8fcc46212e5e
Tests: fix has_version() to handle previous branch checks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
281
diff
changeset
|
259 $v = shift @v || 0; |
8fcc46212e5e
Tests: fix has_version() to handle previous branch checks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
281
diff
changeset
|
260 return 0 if $n > $v; |
8fcc46212e5e
Tests: fix has_version() to handle previous branch checks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
281
diff
changeset
|
261 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
|
262 } |
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 return 1; |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
265 } |
8f280348d76f
Tests: add has_version() method and use it as appropriate.
Maxim Dounin <mdounin@mdounin.ru>
parents:
237
diff
changeset
|
266 |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
267 sub has_daemon($) { |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
268 my ($self, $daemon) = @_; |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
269 |
220
f6f60780f758
Tests: fail has_daemon() on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
219
diff
changeset
|
270 if ($^O eq 'MSWin32') { |
1221
852856f8e7dc
Tests: added has_daemon() support for win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1208
diff
changeset
|
271 `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
|
272 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
|
273 return $self; |
f6f60780f758
Tests: fail has_daemon() on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
219
diff
changeset
|
274 } |
f6f60780f758
Tests: fail has_daemon() on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
219
diff
changeset
|
275 |
232
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
276 if ($^O eq 'solaris') { |
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
277 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
|
278 unless `command -v $daemon`; |
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
279 return $self; |
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
280 } |
4c43b3a0117c
Tests: revert 5db96b64cead, use "which" instead of "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents:
222
diff
changeset
|
281 |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
282 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
|
283 unless `which $daemon`; |
29
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 return $self; |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
286 } |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
287 |
392
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
288 sub try_run($$) { |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
289 my ($self, $message) = @_; |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
290 |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
291 eval { |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
292 open OLDERR, ">&", \*STDERR; close STDERR; |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
293 $self->run(); |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
294 open STDERR, ">&", \*OLDERR; |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
295 }; |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
296 |
1238
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
297 return $self unless $@; |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
298 |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
299 if ($ENV{TEST_NGINX_VERBOSE}) { |
1308
58fdd9515f81
Tests: fixed printing try_run() diagnostics.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1302
diff
changeset
|
300 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
|
301 ? $1 : 'logs/error.log'; |
1238
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
302 $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
|
303 |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
304 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
|
305 log_core($_) while (<F>); |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
306 close F; |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
307 } |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
308 |
e35cc79ed4a1
Tests: show try_run() errors in verbose mode.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1236
diff
changeset
|
309 Test::More::plan(skip_all => $message); |
392
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
310 return $self; |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
311 } |
c28ecaef065f
Tests: try_run() introduced.
Maxim Dounin <mdounin@mdounin.ru>
parents:
375
diff
changeset
|
312 |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
313 sub plan($) { |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
314 my ($self, $plan) = @_; |
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
315 |
861
6868e610eacc
Tests: detect Sanitizer errors.
Sergey Kandaurov <pluknet@nginx.com>
parents:
856
diff
changeset
|
316 Test::More::plan(tests => $plan + 2); |
592
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 return $self; |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
319 } |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
320 |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
321 sub todo_alerts() { |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
322 my ($self) = @_; |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
323 |
355f2d5ff60f
Tests: catch nginx alerts on exit.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
324 $self->{_alerts} = 0; |
28
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
325 |
8f1519472ece
Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
27
diff
changeset
|
326 return $self; |
27
fb94a224fef2
Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
24
diff
changeset
|
327 } |
fb94a224fef2
Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
24
diff
changeset
|
328 |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
329 sub run(;$) { |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
330 my ($self, $conf) = @_; |
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 my $testdir = $self->{_testdir}; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
333 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
334 if (defined $conf) { |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
335 my $c = `cat $conf`; |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
336 $self->write_file_expand('nginx.conf', $c); |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
337 } |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
338 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
339 my $pid = fork(); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
340 die "Unable to fork(): $!\n" unless defined $pid; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
341 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
342 if ($pid == 0) { |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
343 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
|
344 () : ('-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
|
345 . "error_log $testdir/error.log debug;"); |
524
084f8c8cb648
Tests: compatibility with old nginx versions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
467
diff
changeset
|
346 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
|
347 or die "Unable to exec(): $!\n"; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
348 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
349 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
350 # wait for nginx to start |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
351 |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
352 $self->waitforfile("$testdir/nginx.pid", $pid) |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
353 or die "Can't start nginx"; |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
354 |
1263
ea3c7659b6c1
Tests: handled early pidfile write on win32 in the run() routine.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1238
diff
changeset
|
355 for (1 .. 50) { |
ea3c7659b6c1
Tests: handled early pidfile write on win32 in the run() routine.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1238
diff
changeset
|
356 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
|
357 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
|
358 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
|
359 } |
ea3c7659b6c1
Tests: handled early pidfile write on win32 in the run() routine.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1238
diff
changeset
|
360 |
20
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
361 $self->{_started} = 1; |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
362 return $self; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
363 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
364 |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
365 sub port { |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
366 my ($num, %opts) = @_; |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
367 my ($sock, $lock, $port); |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
368 |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
369 goto done if defined $ports{$num}; |
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
370 |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
371 my $socket = sub { |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
372 IO::Socket::INET->new( |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
373 Proto => 'tcp', |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
374 LocalAddr => '127.0.0.1:' . shift, |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
375 Listen => 1, |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
376 Reuse => ($^O ne 'MSWin32'), |
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 }; |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
379 |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
380 my $socketl = sub { |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
381 IO::Socket::INET->new( |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
382 Proto => 'udp', |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
383 LocalAddr => '127.0.0.1:' . shift, |
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 }; |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
386 |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
387 ($socket, $socketl) = ($socketl, $socket) if $opts{udp}; |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
388 |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
389 $port = $num; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
390 |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
391 for (1 .. 10) { |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
392 $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
|
393 |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
394 $lock = $socketl->($port) or next; |
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
395 $sock = $socket->($port) and last; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
396 } |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
397 |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
398 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
|
399 |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
400 $ports{$num} = { |
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
401 port => $port, |
1236
93f749c1d5c5
Tests: fixed parallel tests execution with UDP.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
1221
diff
changeset
|
402 socket => $lock |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
403 }; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
404 |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
405 done: |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
406 return $ports{$num}{socket} if $opts{socket}; |
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
407 return $ports{$num}{port}; |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
408 } |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
409 |
621
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
410 sub dump_config() { |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
411 my ($self) = @_; |
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 $testdir = $self->{_testdir}; |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
414 |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
415 my @globals = $self->{_test_globals} ? |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
416 () : ('-g', "pid $testdir/nginx.pid; " |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
417 . "error_log $testdir/error.log debug;"); |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
418 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
|
419 . join(' ', @globals); |
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 return qx/$command 2>&1/; |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
422 } |
884b2f0c173f
Tests: tests for dumped nginx configuration ("nginx -T").
Sergey Kandaurov <pluknet@nginx.com>
parents:
620
diff
changeset
|
423 |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
424 sub waitforfile($;$) { |
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
425 my ($self, $file, $pid) = @_; |
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
426 my $exited; |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
427 |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
428 # 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
|
429 # or specified process to exit |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
430 |
628
0940773278c7
Tests: backed out previous change, adjusted general timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
621
diff
changeset
|
431 for (1 .. 50) { |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
432 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
|
433 return 0 if $exited; |
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
434 $exited = waitpid($pid, WNOHANG) != 0 if $pid; |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
435 select undef, undef, undef, 0.1; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
436 } |
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 return undef; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
439 } |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
440 |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
441 sub waitforsocket($) { |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
442 my ($self, $peer) = @_; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
443 |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
444 # wait for socket to accept connections |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
445 |
628
0940773278c7
Tests: backed out previous change, adjusted general timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
621
diff
changeset
|
446 for (1 .. 50) { |
50
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
447 my $s = IO::Socket::INET->new( |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
448 Proto => 'tcp', |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
449 PeerAddr => $peer |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
450 ); |
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 return 1 if defined $s; |
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 select undef, undef, undef, 0.1; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
455 } |
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 return undef; |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
458 } |
b494fe5b12d1
Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
49
diff
changeset
|
459 |
1206
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
460 sub reload() { |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
461 my ($self) = @_; |
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 return $self unless $self->{_started}; |
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 my $pid = $self->read_file('nginx.pid'); |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
466 |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
467 if ($^O eq 'MSWin32') { |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
468 my $testdir = $self->{_testdir}; |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
469 my @globals = $self->{_test_globals} ? |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
470 () : ('-g', "pid $testdir/nginx.pid; " |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
471 . "error_log $testdir/error.log debug;"); |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
472 system($NGINX, '-p', $testdir, '-c', "nginx.conf", |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
473 '-s', 'reload', @globals) == 0 |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
474 or die "system() failed: $?\n"; |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
475 |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
476 } else { |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
477 kill 'HUP', $pid; |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
478 } |
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 return $self; |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
481 } |
c99c1f43cb15
Tests: reload() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1205
diff
changeset
|
482 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
483 sub stop() { |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
484 my ($self) = @_; |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
485 |
144
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
486 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
|
487 |
1205
c0fa3f818103
Tests: use read_file() in Test::Nginx::stop().
Sergey Kandaurov <pluknet@nginx.com>
parents:
1170
diff
changeset
|
488 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
|
489 |
219
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
490 if ($^O eq 'MSWin32') { |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
491 my $testdir = $self->{_testdir}; |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
492 my @globals = $self->{_test_globals} ? |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
493 () : ('-g', "pid $testdir/nginx.pid; " |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
494 . "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
|
495 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
|
496 '-s', 'stop', @globals) == 0 |
222
5b7883daaf82
Tests: use kill(9, $pid) on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
220
diff
changeset
|
497 or die "system() failed: $?\n"; |
219
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
498 |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
499 } else { |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
500 kill 'QUIT', $pid; |
219
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
501 } |
ce2e23daa1da
Tests: minimal win32 support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
209
diff
changeset
|
502 |
289
cbd4f6eca676
Tests: check if started process is alive while starting nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
284
diff
changeset
|
503 waitpid($pid, 0); |
144
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 $self->{_started} = 0; |
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 return $self; |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
508 } |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
509 |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
510 sub stop_daemons() { |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
511 my ($self) = @_; |
6e11354cae8a
Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents:
139
diff
changeset
|
512 |
20
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
513 while ($self->{_daemons} && scalar @{$self->{_daemons}}) { |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
514 my $p = shift @{$self->{_daemons}}; |
222
5b7883daaf82
Tests: use kill(9, $pid) on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
220
diff
changeset
|
515 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
|
516 waitpid($p, 0); |
20
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
517 } |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
518 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
519 return $self; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
520 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
521 |
467
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
522 sub read_file($) { |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
523 my ($self, $name) = @_; |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
524 local $/; |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
525 |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
526 open F, '<', $self->{_testdir} . '/' . $name |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
527 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
|
528 my $content = <F>; |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
529 close F; |
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 return $content; |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
532 } |
43e05ac6c23c
Tests: the read_file function added in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
460
diff
changeset
|
533 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
534 sub write_file($$) { |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
535 my ($self, $name, $content) = @_; |
12
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
536 |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
537 open F, '>' . $self->{_testdir} . '/' . $name |
12
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
538 or die "Can't create $name: $!"; |
778
9e00ab661e87
Tests: use binmode in write_file().
Sergey Kandaurov <pluknet@nginx.com>
parents:
777
diff
changeset
|
539 binmode F; |
12
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
540 print F $content; |
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
541 close F; |
14
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
542 |
d4b74207a627
Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents:
12
diff
changeset
|
543 return $self; |
12
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
544 } |
d19146b30334
Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8
diff
changeset
|
545 |
15
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
546 sub write_file_expand($$) { |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
547 my ($self, $name, $content) = @_; |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
548 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
549 $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
|
550 $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
|
551 $content =~ s/%%TESTDIR%%/$self->{_testdir}/gms; |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
552 |
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
553 $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
|
554 |
951
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
555 $content =~ s/%%PORT_(\d+)%%/port($1)/gmse; |
9361c7eddfc1
Tests: parallel tests support.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
947
diff
changeset
|
556 $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
|
557 |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
558 return $self->write_file($name, $content); |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
559 } |
c6c36d7a4d90
Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
560 |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
561 sub run_daemon($;@) { |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
562 my ($self, $code, @args) = @_; |
20
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
563 |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
564 my $pid = fork(); |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
565 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
|
566 |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
567 if ($pid == 0) { |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
568 if (ref($code) eq 'CODE') { |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
569 $code->(@args); |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
570 exit 0; |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
571 } else { |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
572 exec($code, @args); |
195
d73ab4b6ef4a
Tests: fix run_daemon() in case of exec() failure.
Maxim Dounin <mdounin@mdounin.ru>
parents:
194
diff
changeset
|
573 exit 0; |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
574 } |
20
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
575 } |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
576 |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
577 $self->{_daemons} = [] unless defined $self->{_daemons}; |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
578 push @{$self->{_daemons}}, $pid; |
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 return $self; |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
581 } |
c57e8bd7bfc7
Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
582 |
46
239a346b4913
Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
583 sub testdir() { |
239a346b4913
Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
584 my ($self) = @_; |
239a346b4913
Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
585 return $self->{_testdir}; |
239a346b4913
Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
586 } |
239a346b4913
Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
45
diff
changeset
|
587 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
588 sub test_globals() { |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
589 my ($self) = @_; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
590 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
591 return $self->{_test_globals} |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
592 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
|
593 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
594 my $s = ''; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
595 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
596 $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
|
597 $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
|
598 |
375
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
599 $s .= $ENV{TEST_NGINX_GLOBALS} |
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
600 if $ENV{TEST_NGINX_GLOBALS}; |
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
601 |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
602 $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
|
603 $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
|
604 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
605 $self->{_test_globals} = $s; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
606 } |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
607 |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
608 sub test_globals_modules() { |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
609 my ($self) = @_; |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
610 |
856
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
611 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
|
612 |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
613 if (!defined $modules) { |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
614 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
|
615 $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
|
616 } |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
617 |
d39e98893265
Tests: use TEST_NGINX_MODULES to find dynamic modules directory.
Sergey Kandaurov <pluknet@nginx.com>
parents:
854
diff
changeset
|
618 $modules = File::Spec->rel2abs($modules); |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
619 $modules =~ s!\\!/!g if $^O eq 'MSWin32'; |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
620 |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
621 my $s = ''; |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
622 |
1063
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
623 $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
|
624 if $self->has_module('http_geoip\S+=dynamic'); |
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
625 |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
626 $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
|
627 if $self->has_module('image_filter\S+=dynamic'); |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
628 |
865
f8f8304c8832
Tests: added support for perl dynamic module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
861
diff
changeset
|
629 $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
|
630 if $self->has_module('perl\S+=dynamic'); |
f8f8304c8832
Tests: added support for perl dynamic module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
861
diff
changeset
|
631 |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
632 $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
|
633 if $self->has_module('xslt\S+=dynamic'); |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
634 |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
635 $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
|
636 if $self->has_module('mail=dynamic'); |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
637 |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
638 $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
|
639 if $self->has_module('stream=dynamic'); |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
640 |
1063
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
641 $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
|
642 if $self->has_module('stream_geoip\S+=dynamic'); |
d62747c321a6
Tests: support dynamic geoip modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1053
diff
changeset
|
643 |
854
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
644 return $s; |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
645 } |
b237eda210e3
Tests: added support for dynamic modules.
Sergey Kandaurov <pluknet@nginx.com>
parents:
800
diff
changeset
|
646 |
1027
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
647 sub test_globals_perl5lib() { |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
648 my ($self) = @_; |
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 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
|
651 |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
652 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
|
653 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
|
654 |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
655 $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
|
656 $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
|
657 |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
658 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
|
659 . "$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
|
660 } |
6ef255ed4bbc
Tests: set "env PERL5LIB" modules paths fallback for perl module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1020
diff
changeset
|
661 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
662 sub test_globals_http() { |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
663 my ($self) = @_; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
664 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
665 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
|
666 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
|
667 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
668 my $s = ''; |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
669 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
670 $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
|
671 $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
|
672 $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
|
673 |
243
de7338227832
Tests: removed trailing spaces.
Homutov Vladimir <vl@nginx.com>
parents:
242
diff
changeset
|
674 $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
|
675 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
|
676 |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
677 $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
|
678 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
|
679 |
139
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
680 $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
|
681 if $self->has_module('uwsgi'); |
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
682 |
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
683 $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
|
684 if $self->has_module('scgi'); |
8b62dd9b8615
Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
133
diff
changeset
|
685 |
375
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
686 $s .= $ENV{TEST_NGINX_GLOBALS_HTTP} |
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
687 if $ENV{TEST_NGINX_GLOBALS_HTTP}; |
5fdde9f755c9
Tests: a couple of auxiliary environment variables introduced.
Andrei Belov <defan@nginx.com>
parents:
348
diff
changeset
|
688 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
689 $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
|
690 } |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
106
diff
changeset
|
691 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
692 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
693 |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
694 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
|
695 return unless $ENV{TEST_NGINX_VERBOSE}; |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
696 my ($prefix, $msg) = @_; |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
697 ($prefix, $msg) = ('', $prefix) unless defined $msg; |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
698 $prefix .= ' ' if length($prefix) > 0; |
164
f602276b9bb9
Tests: truncate huge messages while logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
163
diff
changeset
|
699 |
281
53068d38a3ce
Tests: truncate messages to 2048 bytes instead of 4096.
Maxim Dounin <mdounin@mdounin.ru>
parents:
275
diff
changeset
|
700 if (length($msg) > 2048) { |
53068d38a3ce
Tests: truncate messages to 2048 bytes instead of 4096.
Maxim Dounin <mdounin@mdounin.ru>
parents:
275
diff
changeset
|
701 $msg = substr($msg, 0, 2048) |
53068d38a3ce
Tests: truncate messages to 2048 bytes instead of 4096.
Maxim Dounin <mdounin@mdounin.ru>
parents:
275
diff
changeset
|
702 . "(...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
|
703 . " bytes)"; |
164
f602276b9bb9
Tests: truncate huge messages while logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
163
diff
changeset
|
704 } |
f602276b9bb9
Tests: truncate huge messages while logging.
Maxim Dounin <mdounin@mdounin.ru>
parents:
163
diff
changeset
|
705 |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
706 $msg =~ s/^/# $prefix/gm; |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
707 $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
|
708 $msg .= "\n" unless $msg =~ /\n\Z/; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
709 print $msg; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
710 } |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
711 |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
712 sub log_out { |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
713 log_core('>>', @_); |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
714 } |
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
715 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
716 sub log_in { |
68
5f56040c39df
Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
67
diff
changeset
|
717 log_core('<<', @_); |
5
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 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
720 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
721 |
79
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
722 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
|
723 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
|
724 return http(<<EOF, %extra); |
29
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
725 GET $url HTTP/1.0 |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
726 Host: localhost |
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 EOF |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
729 } |
71ea39729fa0
Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
28
diff
changeset
|
730 |
79
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
731 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
|
732 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
|
733 return http(<<EOF, %extra); |
41
1b3c22a87e5d
Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
37
diff
changeset
|
734 HEAD $url HTTP/1.0 |
1b3c22a87e5d
Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
37
diff
changeset
|
735 Host: localhost |
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 EOF |
1b3c22a87e5d
Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
37
diff
changeset
|
738 } |
1b3c22a87e5d
Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
37
diff
changeset
|
739 |
79
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
740 sub http($;%) { |
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
741 my ($request, %extra) = @_; |
438
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 my $s = http_start($request, %extra); |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
744 |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
745 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
|
746 return http_end($s); |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
747 } |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
748 |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
749 sub http_start($;%) { |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
750 my ($request, %extra) = @_; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
751 my $s; |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
752 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
753 eval { |
96
ecff5407867c
Tests: better handle unexpected connection close from nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
93
diff
changeset
|
754 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
|
755 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
|
756 alarm(8); |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
757 |
438
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
758 $s = $extra{socket} || IO::Socket::INET->new( |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
759 Proto => 'tcp', |
969
1edb092149e2
Tests: simplified parallel tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
963
diff
changeset
|
760 PeerAddr => '127.0.0.1:' . port(8080) |
253
f440a8acbf39
Tests: report connection errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
243
diff
changeset
|
761 ) |
f440a8acbf39
Tests: report connection errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
243
diff
changeset
|
762 or die "Can't connect to nginx: $!\n"; |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
763 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
764 log_out($request); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
765 $s->print($request); |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
766 |
79
d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents:
77
diff
changeset
|
767 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
|
768 return '' if $extra{aborted}; |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
769 |
271
1a6eef7ac914
Tests: test for r->request_body->buf incorrect reuse.
Maxim Dounin <mdounin@mdounin.ru>
parents:
270
diff
changeset
|
770 if ($extra{body}) { |
1a6eef7ac914
Tests: test for r->request_body->buf incorrect reuse.
Maxim Dounin <mdounin@mdounin.ru>
parents:
270
diff
changeset
|
771 log_out($extra{body}); |
1a6eef7ac914
Tests: test for r->request_body->buf incorrect reuse.
Maxim Dounin <mdounin@mdounin.ru>
parents:
270
diff
changeset
|
772 $s->print($extra{body}); |
1a6eef7ac914
Tests: test for r->request_body->buf incorrect reuse.
Maxim Dounin <mdounin@mdounin.ru>
parents:
270
diff
changeset
|
773 } |
1a6eef7ac914
Tests: test for r->request_body->buf incorrect reuse.
Maxim Dounin <mdounin@mdounin.ru>
parents:
270
diff
changeset
|
774 |
438
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 }; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
777 alarm(0); |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
778 if ($@) { |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
779 log_in("died: $@"); |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
780 return undef; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
781 } |
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 return $s; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
784 } |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
785 |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
786 sub http_end($;%) { |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
787 my ($s) = @_; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
788 my $reply; |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
789 |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
790 eval { |
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
791 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
|
792 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
|
793 alarm(8); |
438
60888e2c3f5a
Tests: new http_start() and http_end() functions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
415
diff
changeset
|
794 |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
795 local $/; |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
796 $reply = $s->getline(); |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
797 |
5
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 }; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
800 alarm(0); |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
801 if ($@) { |
96
ecff5407867c
Tests: better handle unexpected connection close from nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents:
93
diff
changeset
|
802 log_in("died: $@"); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
803 return undef; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
804 } |
270
f857180657c9
Tests: whitespace, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
268
diff
changeset
|
805 |
209
5137f27935b4
Tests: log timeouts in IMAP/POP3/SMTP.
Maxim Dounin <mdounin@mdounin.ru>
parents:
195
diff
changeset
|
806 log_in($reply); |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
807 return $reply; |
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 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
810 ############################################################################### |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
811 |
93
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
812 sub http_gzip_request { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
813 my ($url) = @_; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
814 my $r = http(<<EOF); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
815 GET $url HTTP/1.1 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
816 Host: localhost |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
817 Connection: close |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
818 Accept-Encoding: gzip |
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 EOF |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
821 } |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
822 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
823 sub http_content { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
824 my ($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 return undef if !defined $text; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
827 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
828 if ($text !~ /(.*?)\x0d\x0a?\x0d\x0a?(.*)/ms) { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
829 return undef; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
830 } |
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 my ($headers, $body) = ($1, $2); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
833 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
834 if ($headers !~ /Transfer-Encoding: chunked/i) { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
835 return $body; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
836 } |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
837 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
838 my $content = ''; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
839 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
|
840 my $len = hex($1); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
841 $content .= substr($body, pos($body), $len); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
842 pos($body) += $len; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
843 } |
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 return $content; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
846 } |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
847 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
848 sub http_gzip_like { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
849 my ($text, $re, $name) = @_; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
850 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
851 SKIP: { |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
852 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
|
853 Test::More::skip( |
93
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
854 "IO::Uncompress::Gunzip not installed", 1) if $@; |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
855 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
856 my $in = http_content($text); |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
857 my $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 IO::Uncompress::Gunzip::gunzip(\$in => \$out); |
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 Test::More->builder->like($out, $re, $name); |
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 |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
865 ############################################################################### |
5276d85d5040
Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
87
diff
changeset
|
866 |
5
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
867 1; |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
868 |
4d75bdb05ecf
Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
869 ############################################################################### |