package TestPerl::api; # some perl APIs that we need to test that they work alright under mod_perl use strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestTrace; use Apache2::Build; use Apache2::Const -compile => 'OK'; sub handler { my $r = shift; # - XXX: with perl 5.6.1 this test works fine on its own, but if # run in the same interpreter after a test that involves a complex die # call, as in the case of t/filter/in_error, which dies inside a # filter, perl gets messed up here. this can be reproduced by # running: # t/TEST -maxclients 1 t/filter/in_error.t t/perl/api.t # so skip that test for now on 5.6 # # - win32 is an unrelated issue plan $r, tests => 2, need { "getppid() is not implemented on Win32" => !Apache2::Build::WIN32(), "getppid() is having problems with perl 5.6" => !($] < 5.008), }; { # 5.8.1 w/ ithreads has a bug where it caches ppid in PL_ppid, # but updates the record only if perl's fork is called, which # is not the case with mod_perl. This results in getppid() # returning 1. A local workaround in the mod_perl source at # the child_init phase fixes the problem. my $ppid = getppid(); t_debug "ppid $ppid"; ok $ppid > 1; # verify that $pid != $ppid t_debug "pid $$"; ok $ppid != $$; } Apache2::Const::OK; } 1;