blob: 25f1ca7411de19d27aa9bf1517a2998519180b1c [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 TestHooks::stacked_handlers2;
# this test exercises the execution of the stacked handlers
# connection, translation, authen, authz, type, and response
# phases should end for the first handler that returns OK
use strict;
use warnings FATAL => 'all';
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::Filter ();
use ModPerl::Util ();
use APR::Table;
use Apache2::Const -compile => qw(OK DECLINED AUTH_REQUIRED SERVER_ERROR);
sub ok {
callback(shift);
return Apache2::Const::OK;
}
sub ok_authen {
my $r = shift;
callback($r);
$r->user("user");
$r->ap_auth_type("Basic");
return Apache2::Const::OK;
}
sub declined {
callback(shift);
return Apache2::Const::DECLINED;
}
sub auth_required {
callback(shift);
return Apache2::Const::AUTH_REQUIRED;
}
sub server_error {
callback(shift);
return Apache2::Const::SERVER_ERROR;
}
sub push_handlers {
my $r = shift;
$r->push_handlers(PerlFixupHandler => \&ok);
callback($r);
return Apache2::Const::OK;
}
sub callback {
my $obj = shift;
my ($r, $callback);
if ($obj->isa('Apache2::Filter')) {
$r = $obj->r;
$callback = 'PerlOutputFilterHandler';
}
else {
$r = $obj
}
$callback ||= ModPerl::Util::current_callback;
my $count = $r->notes->get($callback) || 0;
$r->notes->set($callback, ++$count);
}
sub handler {
my $r = shift;
$r->content_type('text/plain');
callback($r);
foreach my $callback (qw(PerlPostReadRequestHandler
PerlTransHandler
PerlMapToStorageHandler
PerlHeaderParserHandler
PerlAccessHandler
PerlAuthenHandler
PerlAuthzHandler
PerlTypeHandler
PerlFixupHandler
PerlResponseHandler)) {
my $count = $r->notes->get($callback) || 0;
$r->print("ran $count $callback handlers\n");
}
return Apache2::Const::OK;
}
sub passthru {
my $filter = shift;
unless ($filter->ctx) {
callback($filter);
$filter->ctx({seen => 1});
}
while ($filter->read(my $buffer, 1024)) {
$filter->print($buffer);
}
# this should be ignored?
Apache2::Const::OK;
}
sub filter {
my $filter = shift;
unless ($filter->ctx) {
callback($filter);
$filter->ctx({seen => 1});
}
while ($filter->read(my $buffer, 1024)) {
$filter->print($buffer);
}
if ($filter->seen_eos) {
my $count = $filter->r->notes->get('PerlOutputFilterHandler') || 0;
$filter->print("ran $count PerlOutputFilterHandler handlers\n");
}
# this should be ignored?
Apache2::Const::OK;
}
1;
__DATA__
# create a new virtual host so we can test (almost all) all the hooks
<NoAutoConfig>
<VirtualHost TestHooks::stacked_handlers2>
PerlModule TestHooks::stacked_handlers2
# all 2 run
PerlPostReadRequestHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::ok
# 1 run, 1 left behind
PerlTransHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::server_error
# 1 run, 1 left behind
PerlMapToStorageHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::server_error
<Location /TestHooks__stacked_handlers2>
# all 4 run
PerlHeaderParserHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::declined
PerlHeaderParserHandler TestHooks::stacked_handlers2::declined TestHooks::stacked_handlers2::ok
# all 2 run
PerlAccessHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::ok
# 2 run, 1 left behind
PerlAuthenHandler TestHooks::stacked_handlers2::declined TestHooks::stacked_handlers2::ok_authen
PerlAuthenHandler TestHooks::stacked_handlers2::auth_required
# 2 run, 1 left behind
PerlAuthzHandler TestHooks::stacked_handlers2::declined TestHooks::stacked_handlers2::ok
PerlAuthzHandler TestHooks::stacked_handlers2::auth_required
# 1 run, 1 left behind
PerlTypeHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers3::server_error
# all 4 run
PerlFixupHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::ok
PerlFixupHandler TestHooks::stacked_handlers2::push_handlers
# 2 run, 2 left behind
PerlResponseHandler TestHooks::stacked_handlers2::declined TestHooks::stacked_handlers2
PerlResponseHandler TestHooks::stacked_handlers2::ok TestHooks::stacked_handlers2::server_error
SetHandler modperl
AuthType Basic
Require valid-user
PerlOutputFilterHandler TestHooks::stacked_handlers2::passthru TestHooks::stacked_handlers2::filter
</Location>
</VirtualHost>
</NoAutoConfig>