annotate lib/Test/Nginx.pm @ 1612:8659123d2d37

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