blob: e7d3a057e5882c91170ec2fce4ba383fcbe02df5 [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::server_util;
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use File::Spec::Functions qw(canonpath catfile);
use Apache2::RequestRec ();
use Apache2::ServerRec ();
use Apache2::ServerUtil ();
use Apache2::Process ();
use APR::Pool ();
use Apache2::Const -compile => 'OK';
my $serverroot = Apache::Test::config()->{vars}->{serverroot};
our @ISA = qw(Apache2::RequestRec);
sub new {
my $class = shift;
my $r = shift;
bless { r => $r }, $class;
}
sub handler {
my $r = shift;
plan $r, tests => 17;
{
my $s = $r->server;
my @expected = qw(ModPerl::Test::exit_handler TestExit::FromPerlModule::exit_handler);
my @handlers =
@{ $s->get_handlers('PerlChildExitHandler') || []};
ok t_cmp(scalar(@handlers), scalar(@expected), "get_handlers");
}
t_debug('Apache2::ServerUtil::exists_config_define');
ok Apache2::ServerUtil::exists_config_define('MODPERL2');
ok ! Apache2::ServerUtil::exists_config_define('FOO');
t_debug('registering method FOO');
ok $r->server->method_register('FOO');
server_root_relative_tests($r);
eval { Apache2::ServerUtil::server_shutdown_cleanup_register(
sub { Apache2::Const::OK });
};
my $sub = "server_shutdown_cleanup_register";
ok t_cmp $@, qr/Can't run '$sub' after server startup/,
"can't register server_shutdown cleanup after server startup";
# on start we get 1, and immediate restart gives 2
ok t_cmp Apache2::ServerUtil::restart_count, 2, "restart count";
Apache2::Const::OK;
}
# 11 sub-tests
sub server_root_relative_tests {
my $r = shift;
my %pools = (
'$r->pool' =>
$r->pool,
'$r->connection->pool' =>
$r->connection->pool,
'$r->server->process->pool' =>
$r->server->process->pool,
'$r->server->process->pconf' =>
$r->server->process->pconf,
'Apache2::ServerUtil->server->process->pconf' =>
Apache2::ServerUtil->server->process->pconf,
'APR::Pool->new' =>
APR::Pool->new,
);
# syntax - an object or pool is required
t_debug("Apache2::ServerUtil::server_root_relative() died");
eval { my $dir = Apache2::ServerUtil::server_root_relative() };
t_debug("\$\@: $@");
ok $@;
foreach my $p (keys %pools) {
# we will leak memory here when calling the function with a
# pool whose life is longer than of $r, but it doesn't matter
# for the test
ok t_filepath_cmp(
canonpath(Apache2::ServerUtil::server_root_relative($pools{$p},
'conf')),
catfile($serverroot, 'conf'),
"Apache2::ServerUtil:::server_root_relative($p, 'conf')");
}
# syntax - unrecognized objects don't segfault
{
my $obj = bless {}, 'Apache2::Foo';
eval { Apache2::ServerUtil::server_root_relative($obj, 'conf') };
ok t_cmp($@,
qr/p is not of type APR::Pool/,
"Apache2::ServerUtil::server_root_relative(\$obj, 'conf')");
}
# no file argument gives ServerRoot
{
my $server_root_relative =
Apache2::ServerUtil::server_root_relative($r->pool);
ok t_filepath_cmp(canonpath($server_root_relative),
canonpath($serverroot),
'server_root_relative($pool)');
# Apache2::ServerUtil::server_root is also the ServerRoot constant
ok t_filepath_cmp(canonpath(Apache2::ServerUtil::server_root),
canonpath($server_root_relative),
'Apache2::ServerUtil::server_root');
}
{
# absolute paths should resolve to themselves
my $dir1 = Apache2::ServerUtil::server_root_relative($r->pool, 'logs');
my $dir2 = Apache2::ServerUtil::server_root_relative($r->pool, $dir1);
ok t_filepath_cmp($dir1, $dir2, "absolute path");
}
}
1;
__END__