blob: 27475e1ebcb10875a1da2ff3f39ad16a64252b65 [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 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 Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::Connection ();
use Apache2::Filter ();
use APR::Brigade ();
use APR::Error ();
use TestCommon::Utils ();
use Apache2::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);
$filters->get_brigade($bb, Apache2::Const::MODE_READBYTES,
APR::Const::BLOCK_READ, IOBUFSIZE);
}
elsif ($test eq 'all') {
# consume all of the request body
my $data = TestCommon::Utils::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
my $rc = $r->discard_request_body;
die APR::Error::strerror($rc) unless $rc == Apache2::Const::OK;
$r->print($test);
Apache2::Const::OK;
}
1;