blob: c034f0886ce3ab4424f96c277d16e80406e9726b [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 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;