blob: 41df75d43b042eb47edc1cc5fe14834ab12732da [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 TestAPI::rflush;
use strict;
use warnings FATAL => 'all';
# this test verifies that rflush flushes bucket brigades
use Apache::Test;
use Apache::TestUtil;
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::Filter ();
use Apache2::Const -compile => qw(OK);
use constant READ_SIZE => 1024;
sub bracket {
my $filter = shift;
my $data = '';
while ($filter->read(my $buffer, 1024)) {
$data .= $buffer;
}
$filter->print("[$data]") if $data;
return Apache2::Const::OK;
}
sub response {
my $r = shift;
$r->content_type('text/plain');
my $args = $r->args || '';
if ($args eq 'nontied') {
# print is now unbuffered
local $| = 1;
$r->print("1"); # send the data in the buffer + flush bucket
$r->print("2"); # send the data in the buffer + flush bucket
# print is now buffered
local $| = 0;
$r->print("3");
$r->rflush; # send the data in the buffer + flush bucket
$r->print("4");
$r->rflush; # send the data in the buffer + flush bucket
$r->print("5");
$r->print("6"); # send the data in the buffer (end of handler)
}
elsif ($args eq 'tied') {
my $oldfh;
# print is now unbuffered ("rflush"-like functionality is
# called internally)
$oldfh = select(STDOUT); $| = 1; select($oldfh);
print "1"; # send the data in the buffer + flush bucket
print "2";
# print is now buffered
$oldfh = select(STDOUT); $| = 0; select($oldfh);
print "3";
print "4";
print "5";
print "6"; # send the data in the buffer (end of handler)
}
Apache2::Const::OK;
}
1;
__DATA__
SetHandler perl-script
PerlModule TestAPI::rflush
PerlResponseHandler TestAPI::rflush::response
PerlOutputFilterHandler TestAPI::rflush::bracket