blob: 8a048ab0b2e3b3fa43062f502fac15e16fbfc10f [file] [log] [blame]
# 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