blob: 1a37130765c26712640bb9e2c2aa5e12d7f7e42b [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::perlrequire;
# Test whether vhost with 'PerlOptions +Parent', which doesn't inherit
# from the base, has its own INC and therefore can have a modules with
# the same namespace as the base, but different content.
#
# Also see the parallel TestDirective::perlmodule handler
use strict;
use warnings FATAL => 'all';
use Apache::Test ();
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use File::Spec::Functions qw(catfile);
use Apache2::Const -compile => 'OK';
sub handler {
my $r = shift;
$r->content_type('text/plain');
$r->puts($ApacheTest::PerlRequireTest::MAGIC || '');
Apache2::Const::OK;
}
my %require_tests =
(
main => 'PerlRequired by Parent',
vh => 'PerlRequired by VirtualHost',
);
sub APACHE_TEST_CONFIGURE {
my ($class, $self) = @_;
my $vars = $self->{vars};
my $target_dir = catfile $vars->{documentroot}, 'testdirective';
# create two different PerlRequireTest.pm packages to be loaded by
# vh and main interpreters, on the fly before the tests start
while (my ($test, $magic) = each %require_tests) {
my $content = <<EOF;
package ApacheTest::PerlRequireTest;
\$ApacheTest::PerlRequireTest::MAGIC = '$magic';
1;
EOF
my $file = catfile $target_dir,
$test, 'ApacheTest', 'PerlRequireTest.pm';
$self->writefile($file, $content, 1);
}
}
1;
__END__
# APACHE_TEST_CONFIG_ORDER 940
<Base>
PerlSwitches -I@documentroot@/testdirective/main
PerlRequire "ApacheTest/PerlRequireTest.pm"
</Base>
<VirtualHost TestDirective::perlrequire>
<IfDefine PERL_USEITHREADS>
# a new interpreter pool
PerlOptions +Parent
PerlInterpStart 1
PerlInterpMax 1
PerlInterpMinSpare 1
PerlInterpMaxSpare 1
</IfDefine>
# use test system's @INC
PerlSwitches -I@serverroot@
PerlRequire "conf/modperl_inc.pl"
PerlSwitches -I@documentroot@/testdirective/vh
PerlRequire "ApacheTest/PerlRequireTest.pm"
<Location /TestDirective__perlrequire>
SetHandler modperl
PerlResponseHandler TestDirective::perlrequire
</Location>
</VirtualHost>