1
package TestModperl::setupenv;
4
use warnings FATAL => 'all';
6
use Apache::RequestRec ();
12
use Apache::Const -compile => qw(OK DECLINED);
18
# how many different URIs will be hit?
19
my $requests = $r->args;
21
# $requests locations with 7 tests each
22
plan $r, tests => $requests * 7;
31
Apache::Test::init_test_pm($r); # tie STDOUT
33
(my $value) = $r->uri =~ /TestModperl__setupenv_(\w+)/;
35
ok t_cmp(Apache::Test::vars('remote_addr'),
37
'found REMOTE_ADDR in %ENV');
41
'found subprocess_env table entry SRV_SUBPROCESS in %ENV');
45
'found subprocess_env table entry DIR_SUBPROCESS in %ENV');
49
'found per-directory SetEnv entry in %ENV');
53
'found per-server SetEnv entry in %ENV');
55
# PerlSetEnv always set
58
'found per-directory PerlSetEnv entry in %ENV');
62
'found per-server PerlSetEnv entry in %ENV');
71
Apache::Test::init_test_pm($r); # tie STDOUT
73
(my $value) = $r->uri =~ /TestModperl__setupenv_(\w+)/;
77
'REMOTE_ADDR not found in %ENV');
81
'subprocess_env table entry SRV_SUBPROCESS not found in %ENV');
85
'subprocess_env table entry DIR_SUBPROCESS not found in %ENV');
89
'per-directory SetEnv entry not found in %ENV');
93
'per-server SetEnv entry not found in %ENV');
95
# PerlSetEnv always set
98
'found per-directory PerlSetEnv entry in %ENV');
101
$ENV{SRV_PERLSETENV},
102
'found per-server PerlSetEnv entry in %ENV');
111
Apache::Test::init_test_pm($r); # tie STDOUT
113
(my $value) = $r->uri =~ /TestModperl__setupenv_(\w+)/;
115
ok t_cmp(Apache::Test::vars('remote_addr'),
117
'found REMOTE_ADDR in %ENV');
119
# set before void call
121
$ENV{SRV_SUBPROCESS},
122
'found subprocess_env table entry one in %ENV');
125
$ENV{DIR_SUBPROCESS},
126
'subprocess_env table entry DIR_SUBPROCESS not found in %ENV');
130
'per-directory SetEnv entry not found in %ENV');
134
'per-server SetEnv entry not found in %ENV');
136
# PerlSetEnv always set
138
$ENV{DIR_PERLSETENV},
139
'found per-directory PerlSetEnv entry in %ENV');
142
$ENV{SRV_PERLSETENV},
143
'found per-server PerlSetEnv entry in %ENV');
150
shift->subprocess_env;
157
shift->subprocess_env->set(SRV_SUBPROCESS => 'server');
166
(my $value) = $r->uri =~ /TestModperl__setupenv_(\w+)/;
168
$r->subprocess_env->set(DIR_SUBPROCESS => $value);
175
# create a separate virtual host so we can use
176
# keepalives - a per-connection interpreter is
177
# the only way to make sure that we can plan in
178
# one request and test in subsequent tests
180
<VirtualHost TestModperl::setupenv>
184
<IfDefine PERL_ITHREADS>
185
PerlInterpScope connection
188
PerlModule TestModperl::setupenv
190
PerlPostReadRequestHandler TestModperl::setupenv::subenv_one
192
# SetEnv is affected by +SetupEnv
193
SetEnv SRV_SETENV server
195
# PerlSetEnv is not affected by +SetupEnv or -SetupEnv
196
# it is entirely separate and always set if configured
197
PerlSetEnv SRV_PERLSETENV server
200
<Location /TestModperl__setupenv>
202
PerlResponseHandler TestModperl::setupenv
205
# default modperl handler
206
# %ENV should not contain standard CGI variables
207
# or entries from the subprocess_env table
208
<Location /TestModperl__setupenv_mpdefault>
210
PerlResponseHandler TestModperl::setupenv::noenv
212
PerlFixupHandler TestModperl::setupenv::subenv_two
214
SetEnv DIR_SETENV mpdefault
215
PerlSetEnv DIR_PERLSETENV mpdefault
218
# modperl handler + SetupEnv
219
# %ENV should contain CGI variables as well as
220
# anything put into the subprocess_env table
221
<Location /TestModperl__setupenv_mpsetup>
223
PerlResponseHandler TestModperl::setupenv::env
225
PerlOptions +SetupEnv
227
PerlFixupHandler TestModperl::setupenv::subenv_two
229
SetEnv DIR_SETENV mpsetup
230
PerlSetEnv DIR_PERLSETENV mpsetup
233
# $r->subprocess_env in a void context with no args
234
# should do the same as +SetupEnv wrt CGI variables
235
# and entries already in the subprocess_env table
236
# but subprocess_env entries that appear later will
237
# not show up in %ENV
238
<Location /TestModperl__setupenv_mpvoid>
240
PerlResponseHandler TestModperl::setupenv::someenv
242
PerlHeaderParserHandler TestModperl::setupenv::subenv_void
243
PerlFixupHandler TestModperl::setupenv::subenv_two
245
SetEnv DIR_SETENV mpvoid
246
PerlSetEnv DIR_PERLSETENV mpvoid
249
# +SetupEnv should always populate %ENV fully prior
250
# to running the content handler (regardless of when
251
# $r->subprocess_env() was called) to ensure that
252
# %ENV is an accurate representation of the
253
# subprocess_env table
254
<Location /TestModperl__setupenv_mpsetupvoid>
256
PerlResponseHandler TestModperl::setupenv::env
258
PerlOptions +SetupEnv
260
PerlHeaderParserHandler TestModperl::setupenv::subenv_void
261
PerlFixupHandler TestModperl::setupenv::subenv_two
263
SetEnv DIR_SETENV mpsetupvoid
264
PerlSetEnv DIR_PERLSETENV mpsetupvoid
267
# default perl-script handler is equivalent to +SetupEnv
268
# CGI variables and subprocess_env entries will be in %ENV
269
<Location /TestModperl__setupenv_psdefault>
270
SetHandler perl-script
271
PerlResponseHandler TestModperl::setupenv::env
273
PerlFixupHandler TestModperl::setupenv::subenv_two
275
SetEnv DIR_SETENV psdefault
276
PerlSetEnv DIR_PERLSETENV psdefault
279
# -SetupEnv should not put CGI variables or subprocess_env
281
<Location /TestModperl__setupenv_psnosetup>
282
SetHandler perl-script
283
PerlResponseHandler TestModperl::setupenv::noenv
285
PerlOptions -SetupEnv
287
PerlFixupHandler TestModperl::setupenv::subenv_two
289
SetEnv DIR_SETENV psnosetup
290
PerlSetEnv DIR_PERLSETENV psnosetup
293
# +SetupEnv should always populate %ENV fully prior
294
# to running the content handler (regardless of when
295
# $r->subprocess_env() was called) to ensure that
296
# %ENV is an accurate representation of the
297
# subprocess_env table
298
<Location /TestModperl__setupenv_psvoid>
299
SetHandler perl-script
300
PerlResponseHandler TestModperl::setupenv::env
302
PerlHeaderParserHandler TestModperl::setupenv::subenv_void
303
PerlFixupHandler TestModperl::setupenv::subenv_two
305
SetEnv DIR_SETENV psvoid
306
PerlSetEnv DIR_PERLSETENV psvoid
309
# equivalent to modperl handler with $r->subprocess_env() -
310
# CGI variables are there, but not subprocess_env entries
311
# that are populated after the void call
312
<Location /TestModperl__setupenv_psnosetupvoid>
313
SetHandler perl-script
314
PerlResponseHandler TestModperl::setupenv::someenv
316
PerlOptions -SetupEnv
318
PerlHeaderParserHandler TestModperl::setupenv::subenv_void
319
PerlFixupHandler TestModperl::setupenv::subenv_two
321
SetEnv DIR_SETENV psnosetupvoid
322
PerlSetEnv DIR_PERLSETENV psnosetupvoid