blob: 28680649c6a3e3e1e8df4c64fdb88186a6badedf [file] [log] [blame]
# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
use strict;
use warnings FATAL => 'all';
# test BEGIN/END blocks's behavior
use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest;
use TestCommon::SameInterp;
my %modules = (
registry => 'ModPerl::Registry',
registry_bb => 'ModPerl::RegistryBB',
perlrun => 'ModPerl::PerlRun',
);
my @aliases = sort keys %modules;
plan tests => @aliases * 4, need [qw(mod_alias.c HTML::HeadParser)];
{
# PerlRun always run BEGIN/END since it's never cached
# see also t/perlrun_extload.t which exercises BEGIN/END blocks
# from external modules loaded from PerlRun scripts
my $alias = "perlrun";
my $url = "/same_interp/$alias/special_blocks.pl";
my $same_interp = Apache::TestRequest::same_interp_tie($url);
# if one sub-test has failed to run on the same interpreter, skip
# the rest in the same group
my $skip = 0;
my $res = same_interp_req_body($same_interp, \&GET, "$url?begin");
$skip++ unless defined $res;
same_interp_skip_not_found(
$skip,
$res,
"begin ok",
"$modules{$alias} is running BEGIN blocks on the first request",
);
$res = $skip ? undef : same_interp_req_body($same_interp, \&GET,
"$url?begin");
$skip++ unless defined $res;
same_interp_skip_not_found(
$skip,
$res,
"begin ok",
"$modules{$alias} is running BEGIN blocks on the second request",
);
$res = $skip ? undef : same_interp_req_body($same_interp, \&GET,
"$url?end");
$skip++ unless defined $res;
same_interp_skip_not_found(
$skip,
$res,
"end ok",
"$modules{$alias} is running END blocks on the third request",
);
$res = $skip ? undef : same_interp_req_body($same_interp, \&GET,
"$url?end");
$skip++ unless defined $res;
same_interp_skip_not_found(
$skip,
$res,
"end ok",
"$modules{$alias} is running END blocks on the fourth request",
);
}
# To properly test BEGIN/END blocks in registry implmentations
# that do caching, we need to manually reset the registry* cache
# for each given script, before starting each group of tests.
for my $alias (grep !/^perlrun$/, @aliases) {
my $url = "/same_interp/$alias/special_blocks.pl";
my $same_interp = Apache::TestRequest::same_interp_tie($url);
# if one sub-test has failed to run on the same interpreter, skip
# the rest in the same group
my $skip = 0;
# clear the cache of the registry package for the script in $url
my $res = same_interp_req_body($same_interp, \&GET, "$url?uncache");
$skip++ unless defined $res;
$res = $skip ? undef : same_interp_req_body($same_interp, \&GET,
"$url?begin");
$skip++ unless defined $res;
same_interp_skip_not_found(
$skip,
$res,
"begin ok",
"$modules{$alias} is running BEGIN blocks on the first request",
);
$res = $skip ? undef : same_interp_req_body($same_interp, \&GET,
"$url?begin");
$skip++ unless defined $res;
t_debug($res);
same_interp_skip_not_found(
$skip,
$res,
"",
"$modules{$alias} is not running BEGIN blocks on the second request",
);
$same_interp = Apache::TestRequest::same_interp_tie($url);
$skip = 0;
# clear the cache of the registry package for the script in $url
$res = same_interp_req_body($same_interp, \&GET, "$url?uncache");
$skip++ unless defined $res;
$res = $skip ? undef : same_interp_req_body($same_interp, \&GET,
"$url?end");
$skip++ unless defined $res;
same_interp_skip_not_found(
$skip,
$res,
"end ok",
"$modules{$alias} is running END blocks on the first request",
);
$res = $skip ? undef : same_interp_req_body($same_interp, \&GET,
"$url?end");
$skip++ unless defined $res;
same_interp_skip_not_found(
$skip,
$res,
"end ok",
"$modules{$alias} is running END blocks on the second request",
);
}