blob: da4460a93bebfd26f9cdf6e6f6d08ba292d6ac2e [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 TestModperl::merge;
use strict;
use warnings FATAL => 'all';
use Apache2::ServerRec ();
use Apache2::ServerUtil ();
use Apache2::RequestUtil ();
use APR::Table ();
use Apache::Test;
use Apache::TestUtil;
use Apache2::Const -compile => 'OK';
# this is the configuration and handler for t/modperl/merge.t,
# t/modperl/merge2.t, and t/modperl/merge3.t. see any of those
# tests and/or the below configuration for more details
# result tables for the below tests (trying to make the code more
# simple...) the hash itself represents a request
# the keys to the main hash represent merge levels - 1 for the
# non-overriding merge, 2 for an overriding merge, and 3 for a
# two-level merge the rest should be self-explanatory - settings and
# expected values.
our %merge1 = (
1 => { PerlPassEnv => [APACHE_TEST_HOSTTYPE => 'z80'],
PerlSetEnv => [MergeSetEnv1 => 'SetEnv1Val'],
PerlSetVar => [MergeSetVar1 => 'SetVar1Val'],
PerlAddVar => [MergeAddVar1 => ['AddVar1Val1',
'AddVar1Val2']],
},
2 => { PerlSetEnv => [MergeSetEnv2 => 'SetEnv2Val'],
PerlSetVar => [MergeSetVar2 => 'SetVar2Val'],
PerlAddVar => [MergeAddVar2 => ['AddVar2Val1',
'AddVar2Val2']],
},
3 => { PerlSetEnv => [MergeSetEnv3 => 'SetEnv3Val'],
PerlSetVar => [MergeSetVar3 => 'SetVar3Val'],
PerlAddVar => [MergeAddVar3 => ['AddVar3Val1',
'AddVar3Val2']],
},
);
our %merge2 = (
1 => { PerlPassEnv => [APACHE_TEST_HOSTTYPE => 'z80'],
PerlSetEnv => [MergeSetEnv1 => 'SetEnv1Val'],
PerlSetVar => [MergeSetVar1 => 'SetVar1Val'],
PerlAddVar => [MergeAddVar1 => ['AddVar1Val1',
'AddVar1Val2']],
},
2 => { PerlSetEnv => [MergeSetEnv2 => 'SetEnv2Merge2Val'],
PerlSetVar => [MergeSetVar2 => 'SetVar2Merge2Val'],
PerlAddVar => [MergeAddVar2 => ['AddVar2Merge2Val1',
'AddVar2Merge2Val2']],
},
3 => { PerlSetEnv => [MergeSetEnv3 => 'SetEnv3Val'],
PerlSetVar => [MergeSetVar3 => 'SetVar3Val'],
PerlAddVar => [MergeAddVar3 => ['AddVar3Val1',
'AddVar3Val2']],
},
);
our %merge3 = (
1 => { PerlPassEnv => [APACHE_TEST_HOSTTYPE => 'z80'],
PerlSetEnv => [MergeSetEnv1 => 'SetEnv1Val'],
PerlSetVar => [MergeSetVar1 => 'SetVar1Val'],
PerlAddVar => [MergeAddVar1 => ['AddVar1Val1',
'AddVar1Val2']],
},
2 => { PerlSetEnv => [MergeSetEnv2 => 'SetEnv2Merge3Val'],
PerlSetVar => [MergeSetVar2 => 'SetVar2Merge3Val'],
PerlAddVar => [MergeAddVar2 => ['AddVar2Merge3Val1',
'AddVar2Merge3Val2']],
},
3 => { PerlSetEnv => [MergeSetEnv3 => 'SetEnv3Merge3Val'],
PerlSetVar => [MergeSetVar3 => 'SetVar3Merge3Val'],
PerlAddVar => [MergeAddVar3 => ['AddVar3Merge3Val1',
'AddVar3Merge3Val2']],
},
);
sub handler {
my $r = shift;
plan $r, tests => 10;
my $uri = $r->uri;
my $hash;
if ($uri =~ m/(merge3)/) {
$hash = $1;
} elsif ($uri =~ m/(merge2)/) {
$hash = $1;
} else {
$hash = 'merge1';
}
t_debug("testing against results in $hash");
no strict qw(refs);
foreach my $level (sort keys %$hash) {
foreach my $directive (sort keys %{ $hash->{$level} }) {
my $key = $hash->{$level}->{$directive}->[0];
my $value = $hash->{$level}->{$directive}->[1];
my @expected = ref $value ? @$value : $value;
my $comment = join ' ', $directive, $key, @expected;
if ($directive =~ m/Env/) {
my $received = $ENV{$key};
ok t_cmp($received, $expected[0], $comment);
}
elsif ($directive =~ m/Set/) {
my $received = $r->dir_config->get($key);
ok t_cmp($received, $expected[0], $comment);
}
else {
my @received = $r->dir_config->get($key);
ok t_cmp(\@received, \@expected, $comment);
}
}
}
Apache2::Const::OK;
}
1;
__END__
<NoAutoConfig>
PerlModule TestModperl::merge
<VirtualHost TestModperl::merge>
# these should pass through all merges untouched
PerlPassEnv APACHE_TEST_HOSTTYPE
PerlSetEnv MergeSetEnv1 SetEnv1Val
PerlSetVar MergeSetVar1 SetVar1Val
PerlSetVar MergeAddVar1 AddVar1Val1
PerlAddVar MergeAddVar1 AddVar1Val2
# these are overridden in /merge2 and /merge3
PerlSetEnv MergeSetEnv2 SetEnv2Val
PerlSetVar MergeSetVar2 SetVar2Val
PerlSetVar MergeAddVar2 AddVar2Val1
PerlAddVar MergeAddVar2 AddVar2Val2
# these are overridden in /merge3 only
PerlSetEnv MergeSetEnv3 SetEnv3Val
PerlSetVar MergeSetVar3 SetVar3Val
PerlSetVar MergeAddVar3 AddVar3Val1
PerlAddVar MergeAddVar3 AddVar3Val2
<Location /merge>
# same as per-server level
SetHandler perl-script
PerlResponseHandler TestModperl::merge
</Location>
<Location /merge2>
# overrides "2" values - "1" and "3" values left untouched
PerlSetEnv MergeSetEnv2 SetEnv2Merge2Val
PerlSetVar MergeSetVar2 SetVar2Merge2Val
PerlSetVar MergeAddVar2 AddVar2Merge2Val1
PerlAddVar MergeAddVar2 AddVar2Merge2Val2
SetHandler perl-script
PerlResponseHandler TestModperl::merge
</Location>
AccessFileName htaccess
<Directory @DocumentRoot@/merge3>
# overrides "2" values
PerlSetEnv MergeSetEnv2 SetEnv2Merge3Val
PerlSetVar MergeSetVar2 SetVar2Merge3Val
PerlSetVar MergeAddVar2 AddVar2Merge3Val1
PerlAddVar MergeAddVar2 AddVar2Merge3Val2
SetHandler perl-script
PerlResponseHandler TestModperl::merge
# override "3" values
AllowOverride all
</Directory>
</VirtualHost>
</NoAutoConfig>