blob: 661608c5838c025652f7c1c6e4d74b56e1fc68ce [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 TestAPI::add_config;
use strict;
use warnings FATAL => 'all';
use Apache2::Access ();
use Apache2::CmdParms ();
use Apache2::RequestUtil ();
use Apache2::Directive ();
use Apache2::ServerUtil ();
use base qw(Apache2::Module);
use Apache::Test;
use Apache::TestUtil;
use Apache2::Const -compile => qw(
OK
DECLINED
:options
);
use constant KEY => "TestAddConfig";
use constant APACHE22 => have_min_apache_version('2.2.0');
use constant APACHE24 => have_min_apache_version('2.4.0');
my @directives = (
{
name => KEY,
cmd_data => 'cmd_data',
errmsg => 'errmsg',
},
);
Apache2::Module::add(__PACKAGE__, \@directives);
sub TestAddConfig {
my ($self, $parms, $args) = @_;
my $srv_cfg = $self->get_config($parms->server);
$srv_cfg->{override_opts} = $parms->override_opts();
}
sub map2storage {
my $r = shift;
my $o = APACHE22 ? '=All,SymLinksIfOwnerMatch' : '';
eval {
$r->add_config(['AllowOverride All Options'.$o]);
};
$r->pnotes(add_config1 => "$@");
eval {
$r->add_config(['Options ExecCGI'], -1, '/', 0);
};
$r->pnotes(add_config2 => "$@");
# We can set AllowOverride only from .htacces in 2.4.0+
if (!APACHE24) {
eval {
$r->add_config(['AllowOverride Options=FollowSymLinks'], -1);
};
$r->pnotes(followsymlinks => "$@");
}
eval {
my $path="/a/path/to/somewhere";
$r->add_config(['PerlResponseHandler '.__PACKAGE__], -1, $path);
# now overwrite the path in place to see if the location pointer
# is really copied: see modperl_config_dir_create
$path=~tr[a-z][n-za-m];
};
return Apache2::Const::DECLINED;
}
sub fixup {
my ($r) = @_;
eval {
$r->add_config(['Options ExecCGI'], -1, '/',
Apache2::Const::OPT_EXECCGI);
};
$r->pnotes(add_config3 => "$@");
eval {
$r->server->add_config(['ServerAdmin foo@bar.com']);
};
$r->pnotes(add_config4 => "$@");
return Apache2::Const::DECLINED;
}
sub handler : method {
my ($self, $r) = @_;
my $cf = $self->get_config($r->server);
plan $r, tests => 9;
ok t_cmp $r->pnotes('add_config1'), qr/.+\n/;
ok t_cmp $r->pnotes('add_config2'), (APACHE22 ? qr/.+\n/ : '');
ok t_cmp $r->pnotes('add_config3'), '';
ok t_cmp $r->pnotes('add_config4'), qr/after server startup/;
if (!APACHE24) {
ok t_cmp $r->pnotes('followsymlinks'), (APACHE22 ? '': qr/.*\n/);
}
else {
ok 1;
}
my $expect = Apache2::Const::OPT_ALL |
Apache2::Const::OPT_UNSET |
(defined &Apache2::Const::OPT_INCNOEXEC
? Apache2::Const::OPT_INCNOEXEC() : 0) |
Apache2::Const::OPT_MULTI |
Apache2::Const::OPT_SYM_OWNER;
ok t_cmp $cf->{override_opts}, $expect;
ok t_cmp $r->allow_options, Apache2::Const::OPT_EXECCGI;
my $opts = APACHE22 ? Apache2::Const::OPT_SYM_LINKS : $expect;
if (!APACHE24) {
ok t_cmp $r->allow_override_opts, $opts;
}
else {
ok 1;
}
ok t_cmp $r->location, '/a/path/to/somewhere';
return Apache2::Const::OK;
}
1;
__END__
# APACHE_TEST_CONFIG_ORDER 950
<NoAutoConfig>
<VirtualHost TestAPI::add_config>
PerlLoadModule TestAPI::add_config
AccessFileName htaccess
SetHandler modperl
<Directory @DocumentRoot@>
AllowOverride All
</Directory>
PerlMapToStorageHandler TestAPI::add_config::map2storage
PerlFixupHandler TestAPI::add_config::fixup
</VirtualHost>
</NoAutoConfig>