stas        2004/05/03 23:19:59

  Modified:    t/error  runtime.t
               t/response/TestError runtime.pm
  Log:
  new tests for exception objects
  
  Revision  Changes    Path
  1.3       +27 -8     modperl-2.0/t/error/runtime.t
  
  Index: runtime.t
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/error/runtime.t,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -u -r1.2 -r1.3
  --- runtime.t 18 Apr 2003 06:18:56 -0000      1.2
  +++ runtime.t 4 May 2004 06:19:59 -0000       1.3
  @@ -5,13 +5,32 @@
   use Apache::TestUtil;
   use Apache::TestRequest;
   
  -plan tests => 1;
  -
   my $location = "/TestError__runtime";
  -my $res = GET($location);
  -#t_debug($res->content);
  -ok t_cmp(
  -    500,
  -    $res->code,
  -    "500 error on runtime error",
  +
  +my @untrapped = qw(plain_mp_error            plain_non_mp_error
  +                   die_hook_confess_mp_error die_hook_confess_non_mp_error
  +                   die_hook_custom_mp_error  die_hook_custom_non_mp_error);
  +my @trapped   = qw(eval_block_mp_error       eval_block_non_mp_error
  +                   eval_string_mp_error      eval_block_non_error);
  +
  +plan tests => @untrapped + @trapped;
  +
  +for my $type (@untrapped) {
  +    my $res = GET("$location?$type");
  +    #t_debug($res->content);
  +    ok t_cmp(
  +        500,
  +        $res->code,
  +        "500 error on $type exception",
      );
  +}
  +
  +for my $type (@trapped) {
  +    my $body = GET_BODY("$location?$type");
  +    ok t_cmp(
  +        "ok $type",
  +        $body,
  +        "200 on $type exception",
  +   );
  +}
  +
  
  
  
  1.3       +104 -3    modperl-2.0/t/response/TestError/runtime.pm
  
  Index: runtime.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/response/TestError/runtime.pm,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -u -r1.2 -r1.3
  --- runtime.pm        1 Apr 2003 04:39:30 -0000       1.2
  +++ runtime.pm        4 May 2004 06:19:59 -0000       1.3
  @@ -5,22 +5,123 @@
   
   use Apache::RequestRec ();
   use Apache::RequestIO ();
  +use Apache::Connection ();
  +use APR::Socket ();
   
   use Apache::TestUtil;
   
   use Apache::Const -compile => qw(OK);
  +use APR::Const    -compile => qw(TIMEUP);
  +
  +use constant SIZE => 2048;
   
   sub handler {
       my $r = shift;
  +    my $socket = $r->connection->client_socket;
  +    my $args = $r->args;
   
       $r->content_type('text/plain');
   
  -    t_server_log_error_is_expected();
  -    no_such_func();
  +    # set timeout to 1 usec (microsec!) which makes sure that any
  +    # socket read call will fail
  +    $socket->timeout_set(1);
   
  -    $r->print('ok');
  +    no strict 'refs';
  +    $args->($r, $socket);
   
       return Apache::OK;
  +}
  +
  +sub plain_mp_error {
  +    my($r, $socket) = @_;
  +    t_server_log_error_is_expected();
  +    mp_error($socket);
  +}
  +
  +sub plain_non_mp_error {
  +    my($r, $socket) = @_;
  +    t_server_log_error_is_expected();
  +    non_mp_error($socket);
  +}
  +
  +sub die_hook_confess_mp_error {
  +    my($r, $socket) = @_;
  +    local $SIG{__DIE__} = \&APR::Error::confess;
  +    t_server_log_error_is_expected();
  +    mp_error($socket);
  +}
  +
  +sub die_hook_confess_non_mp_error {
  +    my($r, $socket) = @_;
  +    local $SIG{__DIE__} = \&APR::Error::confess;
  +    t_server_log_error_is_expected();
  +    non_mp_error($socket);
  +}
  +
  +sub die_hook_custom_mp_error {
  +    my($r, $socket) = @_;
  +    local $SIG{__DIE__} = sub { die "custom die hook: $_[0]" };
  +    t_server_log_error_is_expected();
  +    mp_error($socket);
  +}
  +
  +sub die_hook_custom_non_mp_error {
  +    my($r, $socket) = @_;
  +    local $SIG{__DIE__} = sub { die "custom die hook: $_[0]" };
  +    t_server_log_error_is_expected();
  +    non_mp_error($socket);
  +}
  +
  +sub eval_block_mp_error {
  +    my($r, $socket) = @_;
  +    eval { mp_error($socket) };
  +    if ($@ && ref($@) && $@ == APR::TIMEUP) {
  +        $r->print("ok eval_block_mp_error");
  +    }
  +    else {
  +        die "eval block has failed: $@";
  +    }
  +}
  +
  +sub eval_string_mp_error {
  +    my($r, $socket) = @_;
  +    eval "\$socket->recv(SIZE)";
  +    if ($@ && ref($@) && $@ == APR::TIMEUP) {
  +        $r->print("ok eval_string_mp_error");
  +    }
  +    else {
  +        die "eval string has failed: $@";
  +    }
  +}
  +
  +sub eval_block_non_mp_error {
  +    my($r, $socket) = @_;
  +    eval { non_mp_error($socket) };
  +    if ($@ && !ref($@)) {
  +        $r->print("ok eval_block_non_mp_error");
  +    }
  +    else {
  +        die "eval eval_non_mp_error has failed: $@";
  +    }
  +}
  +
  +sub eval_block_non_error {
  +    my($r, $socket) = @_;
  +    eval { 1; };
  +    if ($@) {
  +        die "eval eval_block_non_mp_error has failed";
  +    }
  +    $r->print("ok eval_block_non_error");
  +}
  +
  +sub non_mp_error {
  +    no_such_func();
  +}
  +
  +# fails because of the timeout set earlier in the handler
  +sub mp_error {
  +    my $socket = shift;
  +    $socket->recv(SIZE);
   }
   
   1;
  
  
  

Reply via email to