annotate lib/Test/Nginx.pm @ 195:d73ab4b6ef4a

Tests: fix run_daemon() in case of exec() failure.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 10 Jan 2012 23:02:33 +0400
parents 5db96b64cead
children 5137f27935b4
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
41
1b3c22a87e5d Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 37
diff changeset
14 our @EXPORT = qw/ log_in log_out http http_get http_head /;
93
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
15 our @EXPORT_OK = qw/ http_gzip_request http_gzip_like /;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
16 our %EXPORT_TAGS = (
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
17 gzip => [ qw/ http_gzip_request http_gzip_like / ]
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
18 );
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 ###############################################################################
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 use File::Temp qw/ tempdir /;
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 use IO::Socket;
7
9eb509695651 Tests: drop our own CRLF constant, use Socket's one instead.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
24 use Socket qw/ CRLF /;
27
fb94a224fef2 Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 24
diff changeset
25 use Test::More qw//;
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
27 ###############################################################################
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
48
acfafb52d393 Tests: use TEST_NGINX_BINARY to find nginx binary.
Maxim Dounin <mdounin@mdounin.ru>
parents: 46
diff changeset
29 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
30 : '../nginx/objs/nginx';
27
fb94a224fef2 Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 24
diff changeset
31
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
32 sub new {
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
33 my $self = {};
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
34 bless $self;
15
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
35
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
36 $self->{_testdir} = tempdir(
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
37 'nginx-test-XXXXXXXXXX',
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
38 TMPDIR => 1,
133
342b31c8f3af Tests: use TEST_NGINX_LEAVE instead of LEAVE.
Maxim Dounin <mdounin@mdounin.ru>
parents: 121
diff changeset
39 CLEANUP => not $ENV{TEST_NGINX_LEAVE}
15
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
40 )
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
41 or die "Can't create temp directory: $!\n";
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
42
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
43 return $self;
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
44 }
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
45
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
46 sub DESTROY {
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
47 my ($self) = @_;
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
48 $self->stop();
144
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
49 $self->stop_daemons();
51
d59ae7bab0a6 Tests: cat error log to stdout if TEST_NGINX_CATLOG set.
Maxim Dounin <mdounin@mdounin.ru>
parents: 50
diff changeset
50 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
51 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
52 }
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
53 }
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54
121
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
55 sub has($;) {
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
56 my ($self, @features) = @_;
107
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
57
121
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
58 foreach my $feature (@features) {
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
59 Test::More::plan(skip_all => "$feature not compiled in")
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
60 unless $self->has_module($feature);
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
61 }
107
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
62
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
63 return $self;
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
64 }
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
65
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
66 sub has_module($) {
28
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
67 my ($self, $feature) = @_;
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
68
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
69 my %regex = (
121
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
70 mail => '--with-mail(?!\S)',
33
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 29
diff changeset
71 flv => '--with-http_flv_module',
118
4bf7a819358c Tests: add some embedded perl tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 107
diff changeset
72 perl => '--with-http_perl_module',
121
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
73 charset => '(?s)^(?!.*--without-http_charset_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
74 gzip => '(?s)^(?!.*--without-http_gzip_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
75 ssi => '(?s)^(?!.*--without-http_ssi_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
76 userid => '(?s)^(?!.*--without-http_userid_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
77 access => '(?s)^(?!.*--without-http_access_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
78 auth_basic
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
79 => '(?s)^(?!.*--without-http_auth_basic_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
80 autoindex
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
81 => '(?s)^(?!.*--without-http_autoindex_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
82 geo => '(?s)^(?!.*--without-http_geo_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
83 map => '(?s)^(?!.*--without-http_map_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
84 referer => '(?s)^(?!.*--without-http_referer_module)',
28
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
85 rewrite => '(?s)^(?!.*--without-http_rewrite_module)',
121
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
86 proxy => '(?s)^(?!.*--without-http_proxy_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
87 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
88 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
89 scgi => '(?s)^(?!.*--without-http_scgi_module)',
121
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
90 memcached
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
91 => '(?s)^(?!.*--without-http_memcached_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
92 limit_zone
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
93 => '(?s)^(?!.*--without-http_limit_zone_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
94 limit_req
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
95 => '(?s)^(?!.*--without-http_limit_req_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
96 empty_gif
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
97 => '(?s)^(?!.*--without-http_empty_gif_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
98 browser => '(?s)^(?!.*--without-http_browser_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
99 upstream_ip_hash
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
100 => '(?s)^(?!.*--without-http_upstream_ip_hash_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
101 http => '(?s)^(?!.*--without-http(?!\S))',
106
7a712d3909ba Tests: add cache availability checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 104
diff changeset
102 cache => '(?s)^(?!.*--without-http-cache)',
121
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
103 pop3 => '(?s)^(?!.*--without-mail_pop3_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
104 imap => '(?s)^(?!.*--without-mail_imap_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
105 smtp => '(?s)^(?!.*--without-mail_smtp_module)',
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 118
diff changeset
106 pcre => '(?s)^(?!.*--without-pcre)',
28
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
107 );
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
108
100
9ddc18214854 Tests: arbitrary regexp support in has().
Maxim Dounin <mdounin@mdounin.ru>
parents: 96
diff changeset
109 my $re = $regex{$feature};
9ddc18214854 Tests: arbitrary regexp support in has().
Maxim Dounin <mdounin@mdounin.ru>
parents: 96
diff changeset
110 $re = $feature if !defined $re;
9ddc18214854 Tests: arbitrary regexp support in has().
Maxim Dounin <mdounin@mdounin.ru>
parents: 96
diff changeset
111
107
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
112 $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
113 if !defined $self->{_configure_args};
28
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
114
107
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
115 return ($self->{_configure_args} =~ $re) ? 1 : 0;
28
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
29
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
118 sub has_daemon($) {
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
119 my ($self, $daemon) = @_;
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
120
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
121 Test::More::plan(skip_all => "$daemon not found")
194
5db96b64cead Tests: replace "which" with "command -v".
Maxim Dounin <mdounin@mdounin.ru>
parents: 165
diff changeset
122 unless `command -v $daemon`;
29
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
123
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
124 return $self;
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
125 }
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
126
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
127 sub plan($) {
28
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
128 my ($self, $plan) = @_;
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
129
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
130 Test::More::plan(tests => $plan);
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
131
8f1519472ece Tests: unbreak and extend has() functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
132 return $self;
27
fb94a224fef2 Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 24
diff changeset
133 }
fb94a224fef2 Tests: add has() functions for feature testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 24
diff changeset
134
29
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
135 sub run(;$) {
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
136 my ($self, $conf) = @_;
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137
15
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
138 my $testdir = $self->{_testdir};
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139
15
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
140 if (defined $conf) {
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
141 my $c = `cat $conf`;
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
142 $self->write_file_expand('nginx.conf', $c);
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
143 }
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 my $pid = fork();
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 die "Unable to fork(): $!\n" unless defined $pid;
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 if ($pid == 0) {
107
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
149 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
150 () : ('-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
151 . "error_log $testdir/error.log debug;");
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
152 exec($NGINX, '-c', "$testdir/nginx.conf", @globals)
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 or die "Unable to exec(): $!\n";
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 }
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 # wait for nginx to start
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157
50
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
158 $self->waitforfile("$testdir/nginx.pid")
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
159 or die "Can't start nginx";
29
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
160
20
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
161 $self->{_started} = 1;
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
162 return $self;
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 }
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164
50
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
165 sub waitforfile($) {
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
166 my ($self, $file) = @_;
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
167
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
168 # wait for file to appear
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
169
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
170 for (1 .. 30) {
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
171 return 1 if -e $file;
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
172 select undef, undef, undef, 0.1;
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
173 }
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
174
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
175 return undef;
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
176 }
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
177
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
178 sub waitforsocket($) {
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
179 my ($self, $peer) = @_;
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
180
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
181 # wait for socket to accept connections
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
182
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
183 for (1 .. 30) {
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
184 my $s = IO::Socket::INET->new(
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
185 Proto => 'tcp',
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
186 PeerAddr => $peer
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
187 );
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
188
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
189 return 1 if defined $s;
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
190
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
191 select undef, undef, undef, 0.1;
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
192 }
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
193
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
194 return undef;
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
195 }
b494fe5b12d1 Tests: add waitforfile() and waitforsocket() functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
196
15
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
197 sub stop() {
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
198 my ($self) = @_;
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
199
144
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
200 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
201
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
202 kill 'QUIT', `cat $self->{_testdir}/nginx.pid`;
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
203 wait;
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
204
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
205 $self->{_started} = 0;
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
206
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
207 return $self;
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
208 }
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
209
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
210 sub stop_daemons() {
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
211 my ($self) = @_;
6e11354cae8a Tests: rework stopping to make "open socket left" alerts visible.
Maxim Dounin <mdounin@mdounin.ru>
parents: 139
diff changeset
212
20
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
213 while ($self->{_daemons} && scalar @{$self->{_daemons}}) {
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
214 my $p = shift @{$self->{_daemons}};
76
c7e29639f915 Tests: backout process group creation (b01ae969181b).
Maxim Dounin <mdounin@mdounin.ru>
parents: 49
diff changeset
215 kill 'TERM', $p;
20
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
216 wait;
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
217 }
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
218
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
219 return $self;
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 }
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221
15
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
222 sub write_file($$) {
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
223 my ($self, $name, $content) = @_;
12
d19146b30334 Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8
diff changeset
224
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
225 open F, '>' . $self->{_testdir} . '/' . $name
12
d19146b30334 Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8
diff changeset
226 or die "Can't create $name: $!";
d19146b30334 Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8
diff changeset
227 print F $content;
d19146b30334 Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8
diff changeset
228 close F;
14
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
229
d4b74207a627 Tests: refactor common functions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
230 return $self;
12
d19146b30334 Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8
diff changeset
231 }
d19146b30334 Tests: move write_file() into _common.pm.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8
diff changeset
232
15
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
233 sub write_file_expand($$) {
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
234 my ($self, $name, $content) = @_;
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
235
107
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
236 $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
237 $content =~ s/%%TEST_GLOBALS_HTTP%%/$self->test_globals_http()/gmse;
15
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
238 $content =~ s/%%TESTDIR%%/$self->{_testdir}/gms;
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
239
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
240 return $self->write_file($name, $content);
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
241 }
c6c36d7a4d90 Tests: support config embedded in test itself.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
242
29
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
243 sub run_daemon($;@) {
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
244 my ($self, $code, @args) = @_;
20
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
245
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
246 my $pid = fork();
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
247 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
248
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
249 if ($pid == 0) {
29
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
250 if (ref($code) eq 'CODE') {
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
251 $code->(@args);
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
252 exit 0;
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
253 } else {
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
254 exec($code, @args);
195
d73ab4b6ef4a Tests: fix run_daemon() in case of exec() failure.
Maxim Dounin <mdounin@mdounin.ru>
parents: 194
diff changeset
255 exit 0;
29
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
256 }
20
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
257 }
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
258
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
259 $self->{_daemons} = [] unless defined $self->{_daemons};
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
260 push @{$self->{_daemons}}, $pid;
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
261
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
262 return $self;
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
263 }
c57e8bd7bfc7 Tests: running simple daemons supplied as coderef.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
264
46
239a346b4913 Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 45
diff changeset
265 sub testdir() {
239a346b4913 Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 45
diff changeset
266 my ($self) = @_;
239a346b4913 Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 45
diff changeset
267 return $self->{_testdir};
239a346b4913 Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 45
diff changeset
268 }
239a346b4913 Tests: add proxy_store basic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 45
diff changeset
269
107
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
270 sub test_globals() {
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
271 my ($self) = @_;
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
272
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
273 return $self->{_test_globals}
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
274 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
275
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
276 my $s = '';
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
277
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
278 $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
279 $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
280
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
281 $self->{_test_globals} = $s;
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
282 }
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
283
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
284 sub test_globals_http() {
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
285 my ($self) = @_;
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
286
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
287 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
288 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
289
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
290 my $s = '';
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
291
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
292 $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
293 $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
294 $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
295
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
296 $s .= "fastcgi_temp_path $self->{_testdir}/fastcgi_temp;\n"
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
297 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
298
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
299 $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
300 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
301
139
8b62dd9b8615 Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 133
diff changeset
302 $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
303 if $self->has_module('uwsgi');
8b62dd9b8615 Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 133
diff changeset
304
8b62dd9b8615 Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 133
diff changeset
305 $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
306 if $self->has_module('scgi');
8b62dd9b8615 Tests: set temp paths for uwsgi and scgi modules.
Maxim Dounin <mdounin@mdounin.ru>
parents: 133
diff changeset
307
107
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
308 $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
309 }
1c0ec30614c6 Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 106
diff changeset
310
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
311 ###############################################################################
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
312
68
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
313 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
314 return unless $ENV{TEST_NGINX_VERBOSE};
68
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
315 my ($prefix, $msg) = @_;
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
316 ($prefix, $msg) = ('', $prefix) unless defined $msg;
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
317 $prefix .= ' ' if length($prefix) > 0;
164
f602276b9bb9 Tests: truncate huge messages while logging.
Maxim Dounin <mdounin@mdounin.ru>
parents: 163
diff changeset
318
f602276b9bb9 Tests: truncate huge messages while logging.
Maxim Dounin <mdounin@mdounin.ru>
parents: 163
diff changeset
319 if (length($msg) > 4096) {
165
fca70f483608 Tests: fix previous commit (print original message length).
Maxim Dounin <mdounin@mdounin.ru>
parents: 164
diff changeset
320 $msg = substr($msg, 0, 4096)
fca70f483608 Tests: fix previous commit (print original message length).
Maxim Dounin <mdounin@mdounin.ru>
parents: 164
diff changeset
321 . "(...logged only 4096 of " . length($msg)
fca70f483608 Tests: fix previous commit (print original message length).
Maxim Dounin <mdounin@mdounin.ru>
parents: 164
diff changeset
322 . " bytes)";
164
f602276b9bb9 Tests: truncate huge messages while logging.
Maxim Dounin <mdounin@mdounin.ru>
parents: 163
diff changeset
323 }
f602276b9bb9 Tests: truncate huge messages while logging.
Maxim Dounin <mdounin@mdounin.ru>
parents: 163
diff changeset
324
68
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
325 $msg =~ s/^/# $prefix/gm;
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
326 $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
327 $msg .= "\n" unless $msg =~ /\n\Z/;
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
328 print $msg;
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
329 }
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
330
68
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
331 sub log_out {
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
332 log_core('>>', @_);
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
333 }
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
334
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
335 sub log_in {
68
5f56040c39df Tests: smtp xclient tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 67
diff changeset
336 log_core('<<', @_);
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
337 }
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
338
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
339 ###############################################################################
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
340
79
d5330d926fac Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 77
diff changeset
341 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
342 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
343 return http(<<EOF, %extra);
29
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
344 GET $url HTTP/1.0
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
345 Host: localhost
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
346
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
347 EOF
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
348 }
71ea39729fa0 Tests: memcached module generic tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 28
diff changeset
349
79
d5330d926fac Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 77
diff changeset
350 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
351 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
352 return http(<<EOF, %extra);
41
1b3c22a87e5d Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 37
diff changeset
353 HEAD $url HTTP/1.0
1b3c22a87e5d Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 37
diff changeset
354 Host: localhost
1b3c22a87e5d Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 37
diff changeset
355
1b3c22a87e5d Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 37
diff changeset
356 EOF
1b3c22a87e5d Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 37
diff changeset
357 }
1b3c22a87e5d Tests: add some HEAD tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 37
diff changeset
358
79
d5330d926fac Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 77
diff changeset
359 sub http($;%) {
d5330d926fac Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 77
diff changeset
360 my ($request, %extra) = @_;
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
361 my $reply;
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
362 eval {
96
ecff5407867c Tests: better handle unexpected connection close from nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents: 93
diff changeset
363 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
364 local $SIG{PIPE} = sub { die "sigpipe\n" };
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
365 alarm(2);
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
366 my $s = IO::Socket::INET->new(
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
367 Proto => 'tcp',
45
d68b85def521 Tests: use 127.0.0.1 instead of localhost.
Maxim Dounin <mdounin@mdounin.ru>
parents: 41
diff changeset
368 PeerAddr => '127.0.0.1:8080'
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
369 );
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
370 log_out($request);
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
371 $s->print($request);
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
372 local $/;
79
d5330d926fac Tests: add test for limit_req not clearing write timeout on delay.
Maxim Dounin <mdounin@mdounin.ru>
parents: 77
diff changeset
373 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
374 return '' if $extra{aborted};
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
375 $reply = $s->getline();
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
376 alarm(0);
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
377 };
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
378 alarm(0);
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
379 if ($@) {
96
ecff5407867c Tests: better handle unexpected connection close from nginx.
Maxim Dounin <mdounin@mdounin.ru>
parents: 93
diff changeset
380 log_in("died: $@");
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
381 return undef;
163
450206ed1fd2 Tests: move logging out of alarm.
Maxim Dounin <mdounin@mdounin.ru>
parents: 155
diff changeset
382 } else {
450206ed1fd2 Tests: move logging out of alarm.
Maxim Dounin <mdounin@mdounin.ru>
parents: 155
diff changeset
383 log_in($reply);
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
384 }
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
385 return $reply;
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
386 }
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
387
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
388 ###############################################################################
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
389
93
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
390 sub http_gzip_request {
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
391 my ($url) = @_;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
392 my $r = http(<<EOF);
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
393 GET $url HTTP/1.1
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
394 Host: localhost
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
395 Connection: close
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
396 Accept-Encoding: gzip
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
397
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
398 EOF
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
399 }
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
400
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
401 sub http_content {
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
402 my ($text) = @_;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
403
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
404 return undef if !defined $text;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
405
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
406 if ($text !~ /(.*?)\x0d\x0a?\x0d\x0a?(.*)/ms) {
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
407 return undef;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
408 }
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
409
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
410 my ($headers, $body) = ($1, $2);
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
411
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
412 if ($headers !~ /Transfer-Encoding: chunked/i) {
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
413 return $body;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
414 }
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
415
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
416 my $content = '';
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
417 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
418 my $len = hex($1);
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
419 $content .= substr($body, pos($body), $len);
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
420 pos($body) += $len;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
421 }
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
422
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
423 return $content;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
424 }
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
425
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
426 sub http_gzip_like {
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
427 my ($text, $re, $name) = @_;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
428
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
429 SKIP: {
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
430 eval { require IO::Uncompress::Gunzip; };
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
431 Test::More->builder->skip(
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
432 "IO::Uncompress::Gunzip not installed", 1) if $@;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
433
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
434 my $in = http_content($text);
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
435 my $out;
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
436
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
437 IO::Uncompress::Gunzip::gunzip(\$in => \$out);
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
438
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
439 Test::More->builder->like($out, $re, $name);
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
440 }
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
441 }
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
442
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
443 ###############################################################################
5276d85d5040 Tests: add basic gzip tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 87
diff changeset
444
5
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
445 1;
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
446
4d75bdb05ecf Tests: some generic code and ssi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
447 ###############################################################################