6
6
use Apache::RequestRec ();
7
7
use Apache::RequestIO ();
8
use Apache::Connection ();
9
11
use Apache::TestUtil;
11
13
use Apache::Const -compile => qw(OK);
14
use APR::Const -compile => qw(TIMEUP);
16
use constant SIZE => 2048;
20
my $socket = $r->connection->client_socket;
16
23
$r->content_type('text/plain');
18
t_server_log_error_is_expected();
25
# set timeout to 1 usec (microsec!) which makes sure that any
26
# socket read call will fail
27
$socket->timeout_set(1);
37
t_server_log_error_is_expected();
41
sub plain_non_mp_error {
43
t_server_log_error_is_expected();
44
non_mp_error($socket);
47
sub die_hook_confess_mp_error {
49
local $SIG{__DIE__} = \&APR::Error::confess;
50
t_server_log_error_is_expected();
54
sub die_hook_confess_non_mp_error {
56
local $SIG{__DIE__} = \&APR::Error::confess;
57
t_server_log_error_is_expected();
58
non_mp_error($socket);
61
sub die_hook_custom_mp_error {
63
local $SIG{__DIE__} = sub { die "custom die hook: $_[0]" };
64
t_server_log_error_is_expected();
68
sub die_hook_custom_non_mp_error {
70
local $SIG{__DIE__} = sub { die "custom die hook: $_[0]" };
71
t_server_log_error_is_expected();
72
non_mp_error($socket);
75
sub eval_block_mp_error {
77
eval { mp_error($socket) };
78
if ($@ && ref($@) && $@ == APR::TIMEUP) {
79
$r->print("ok eval_block_mp_error");
82
die "eval block has failed: $@";
86
sub eval_string_mp_error {
88
eval "\$socket->recv(SIZE)";
89
if ($@ && ref($@) && $@ == APR::TIMEUP) {
90
$r->print("ok eval_string_mp_error");
93
die "eval string has failed: $@";
97
sub eval_block_non_mp_error {
99
eval { non_mp_error($socket) };
100
if ($@ && !ref($@)) {
101
$r->print("ok eval_block_non_mp_error");
104
die "eval eval_non_mp_error has failed: $@";
108
sub eval_block_non_error {
109
my($r, $socket) = @_;
112
die "eval eval_block_non_mp_error has failed";
114
$r->print("ok eval_block_non_error");
121
# fails because of the timeout set earlier in the handler