1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
package TestDirective::env;
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use Apache2::RequestRec ();
use APR::Table ();
use Apache2::Const -compile => 'OK';
sub handler {
my $r = shift;
plan $r, tests => 8;
# %ENV
ok t_cmp(env_get('srv1'),
'env_dir1',
'%ENV per-dir override per-srv');
ok t_cmp(env_get('srv2'),
'env_srv2',
'%ENV per-srv');
ok t_cmp(env_get('dir2'),
'env_dir2',
'%ENV per-dir');
# setup by Apache::TestRun
ok t_cmp($ENV{APACHE_TEST_HOSTNAME},
'test.host.name',
'%ENV PerlPassEnv');
# $r->subprocess_env
ok t_cmp(env_get('srv1', $r),
'env_dir1',
'$r->subprocess_env per-dir override per-srv');
ok t_cmp(env_get('srv2', $r),
'env_srv2',
'$r->subprocess_env per-srv');
ok t_cmp(env_get('dir2', $r),
'env_dir2',
'$r->subprocess_env per-dir');
# setup by Apache::TestRun
ok t_cmp($r->subprocess_env->get('APACHE_TEST_HOSTNAME'),
'test.host.name',
'$r->subprocess_env PerlPassEnv');
Apache2::Const::OK;
}
sub env_get {
my ($name, $r) = @_;
my $key = 'TestDirective__env_' . $name;
my $value = $ENV{$key};
if ($r) {
my @values = $r->subprocess_env->get($key);
if (@values > 1) {
$value = "too many values for $key!";
}
else {
$value = $values[0];
}
}
return $value;
}
1;
__END__
# SetupEnv ought to have no effect on PerlSetEnv or PerlPassEnv
PerlOptions -SetupEnv
<Base>
# per-server entry overwritten by per-directory entry
PerlSetEnv TestDirective__env_srv1 env_srv1
# per-server entry not overwritten
PerlSetEnv TestDirective__env_srv2 env_srv2
# PerlPassEnv is only per-server
PerlPassEnv APACHE_TEST_HOSTNAME
</Base>
# per-directory entry overwrites per-server
PerlSetEnv TestDirective__env_srv1 env_dir1
# PerlSetEnv resets the table for each directive
PerlSetEnv TestDirective__env_dir2 ToBeLost
PerlSetEnv TestDirective__env_dir2 env_dir2
|