You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2003/09/23 04:36:45 UTC

cvs commit: modperl-2.0/t/response/TestApache discard_rbody.pm

stas        2003/09/22 19:36:45

  Added:       t/apache discard_rbody.t
               t/response/TestApache discard_rbody.pm
  Log:
  $r->discard_request_body tests
  
  Revision  Changes    Path
  1.1                  modperl-2.0/t/apache/discard_rbody.t
  
  Index: discard_rbody.t
  ===================================================================
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::TestUtil;
  use Apache::Test;
  use Apache::TestRequest;
  
  my $location = "/TestApache__discard_rbody";
  my $content = "Y" x 100000; # more than one bucket
  
  plan tests => 3;
  
  for my $test (qw(none partial all)) {
      my $received = POST_BODY "$location?$test", content => $content;
      ok t_cmp($test, $received, "data consumption: $test");
  }
  
  
  
  
  1.1                  modperl-2.0/t/response/TestApache/discard_rbody.pm
  
  Index: discard_rbody.pm
  ===================================================================
  package TestApache::discard_rbody;
  
  # test $r->discard_request_body when the input body wasn't read at
  # all, read partially or completely.
  
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::RequestRec ();
  use Apache::RequestIO ();
  use Apache::Connection ();
  use Apache::Filter ();
  use APR::Brigade ();
  
  use Apache::Const -compile => qw(OK MODE_READBYTES);
  use APR::Const    -compile => qw(SUCCESS BLOCK_READ);
  
  use constant IOBUFSIZE => 8192;
  
  sub handler {
      my $r = shift;
  
      $r->content_type('text/plain');
      my $test = $r->args;
  
      if ($test eq 'none') {
          # don't read the request body
      }
      elsif ($test eq 'partial') {
          # read some of request POSTed data (IOBUFSIZE bytes),
          # but not all of it
          my $filters = $r->input_filters();
          my $ba = $r->connection->bucket_alloc;
          my $bb = APR::Brigade->new($r->pool, $ba);
          my $rv = $filters->get_brigade($bb, Apache::MODE_READBYTES,
                                         APR::BLOCK_READ, IOBUFSIZE);
          die "failed to read partial data" unless $rv == APR::SUCCESS;
      }
      elsif ($test eq 'all') {
          # consume all of the request body
          my $data = ModPerl::Test::read_post($r);
          die "failed to consume all the data" unless length($data) == 100000;
      }
  
      # now get rid of the rest of the input data should work, no matter
      # how little or how much of the body was read
      $r->discard_request_body;
  
      $r->print($test);
  
      Apache::OK;
  }
  
  1;