blob: 8bc9947a63f66ec610bb73a11789ca2ebc200635 [file] [log] [blame]
##########################################################
### this file contains code that should be run on the ###
### server startup but not during the config phase ###
##########################################################
use strict;
use warnings FATAL => 'all';
use Socket (); # test DynaLoader vs. XSLoader workaround for 5.6.x
use Apache2::ServerRec ();
use Apache2::ServerUtil ();
use Apache2::Process ();
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::RequestUtil ();
use Apache2::Connection ();
use Apache2::Log ();
use APR::Table ();
use APR::Pool ();
use ModPerl::Util (); #for CORE::GLOBAL::exit
use Apache2::Const -compile => ':common';
END {
warn "END in modperl_extra.pl, pid=$$\n";
}
test_apache_resource();
test_apache_size_limit();
test_apache_status();
test_loglevel();
test_perl_ithreads();
test_server_shutdown_cleanup_register();
test_method_obj();
### only subs below this line ###
sub test_apache_resource {
### Apache2::Resource tests
# load first for the menu
require Apache2::Status;
# uncomment for local tests
#$ENV{PERL_RLIMIT_DEFAULTS} = 1;
#$Apache2::Resource::Debug = 1;
# requires optional BSD::Resource
return unless eval { require BSD::Resource };
require Apache2::Resource;
}
sub test_apache_size_limit {
# would be nice to write a real test, but for now just see that we
# can load it for non-threaded mpms on supported platforms
require Apache2::MPM;
return if Apache2::MPM->is_threaded;
eval { require Apache2::SizeLimit };
if ($@) {
# unsupported platform
die $@ unless $@ =~ /Apache2::SizeLimit not implemented on/
or $@ =~ /you must install BSD::Resource/;
}
}
sub test_apache_status {
### Apache2::Status tests
require Apache2::Status;
require Apache2::Module;
Apache2::Status->menu_item(
'test_menu' => "Test Menu Entry",
sub {
my ($r) = @_;
return ["This is just a test entry"];
}
) if Apache2::Module::loaded('Apache2::Status');
}
# test startup loglevel setting (under threaded mpms loglevel can be
# changed only before threads are started) so here we test whether we
# can still set it after restart
sub test_loglevel {
use Apache2::Const -compile => 'LOG_INFO';
my $s = Apache2::ServerUtil->server;
my $oldloglevel = $s->loglevel(Apache2::Const::LOG_INFO);
# restore
$s->loglevel($oldloglevel);
}
sub test_perl_ithreads {
# this is needed for TestPerl::ithreads
# one should be able to boot ithreads at the server startup and
# then access the ithreads setup at run-time when a perl
# interpreter is running on a different native threads (testing
# that perl interpreters and ithreads aren't related to the native
# threads they are running on). This should work starting from
# perl-5.8.1 and higher.
use Config;
if ($] >= 5.008001 && $Config{useithreads}) {
eval { require threads; "threads"->import() };
}
}
sub test_server_shutdown_cleanup_register {
# we can't really test the functionality since it happens at
# server shutdown, when the test suite has finished its run
# so just check that we can register the cleanup and that it
# doesn't segfault
Apache2::ServerUtil::server_shutdown_cleanup_register(sub { Apache2::Const::OK });
# replace the sub with the following to get some visual debug
# should log cnt:1 on -start, oncand cnt: 2 -stop followed by cnt: 1)
#Apache2::ServerUtil::server_shutdown_cleanup_register( sub {
# my $cnt = Apache2::ServerUtil::restart_count();
# open my $fh, ">>/tmp/out" or die "$!";
# print $fh "cnt: $cnt\n";
# close $fh;
#});
}
sub ModPerl::Test::exit_handler {
my ($p, $s) = @_;
$s->log->info("Child process pid=$$ is exiting");
Apache2::Const::OK;
}
sub test_method_obj {
# see t/modperl/methodobj
require TestModperl::methodobj;
$TestModperl::MethodObj = TestModperl::methodobj->new;
}
sub ModPerl::Test::add_config {
my $r = shift;
#test adding config at request time
$r->add_config(['require valid-user']);
Apache2::Const::OK;
}
1;