stas 2004/08/12 18:51:15
Added: t/filter/TestFilter out_bbs_filebucket.pm
t/filter out_bbs_filebucket.t
Log:
filebuckets handling in filter test
Revision Changes Path
1.1 modperl-2.0/t/filter/TestFilter/out_bbs_filebucket.pm
Index: out_bbs_filebucket.pm
===================================================================
package TestFilter::out_bbs_filebucket;
# testing how the filter handles file buckets
use strict;
use warnings FATAL => 'all';
use Apache::RequestRec ();
use Apache::RequestIO ();
use Apache::Filter;
use APR::Brigade ();
use APR::Bucket ();
use Apache::TestTrace;
use Apache::Const -compile => qw(OK);
use APR::Const -compile => qw(SUCCESS);
use constant BLOCK_SIZE => 5003;
sub handler {
my($filter, $bb) = @_;
my $c = $filter->c;
my $bb_ctx = APR::Brigade->new($c->pool, $c->bucket_alloc);
debug "FILTER INVOKED";
my $cnt = 0;
for (my $b = $bb->first; $b; $b = $bb->next($b)) {
$cnt++;
debug "reading bucket #$cnt";
if ($b->is_eos) {
$b->remove;
$bb_ctx->insert_tail($b);
last;
}
if (my $len = $b->read(my $data)) {
my $nb = APR::Bucket->new(uc $data);
$bb_ctx->insert_tail($nb);
}
}
my $rv = $filter->next->pass_brigade($bb_ctx);
return $rv unless $rv == APR::SUCCESS;
return Apache::OK;
}
sub response {
my $r = shift;
debug "\n-------- new request ----------";
$r->content_type('text/plain');
my $file = $r->args;
$r->sendfile($file);
return Apache::OK;
}
1;
__DATA__
SetHandler modperl
PerlModule TestFilter::out_bbs_filebucket
PerlResponseHandler TestFilter::out_bbs_filebucket::response
PerlOutputFilterHandler TestFilter::out_bbs_filebucket::handler
1.1 modperl-2.0/t/filter/out_bbs_filebucket.t
Index: out_bbs_filebucket.t
===================================================================
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest;
use File::Spec::Functions qw(catdir catfile);
my $url = '/TestFilter__out_bbs_filebucket';
my $dir = catdir Apache::Test::vars('documentroot'), qw(filter);
my @sizes = qw(1 100 500 1000 5000);
plan tests => 2 * scalar @sizes;
for my $size (@sizes) {
my($file, $data) = write_file($size);
my $received = GET_BODY "$url?$file";
my $received_size = length $received;
my $expected_size = $size * 1024;
ok t_cmp length($received), length($data), "length";
ok $received && $received eq uc($data);
unlink $file;
}
sub write_file {
my $size = shift;
my $data = "ABCD" x ($size * 256);
my $file = catfile $dir, "data_${size}k.txt";
open my $fh, ">$file" or die "can't open $file: $!";
# need binmode on Win32 so as not to strip \r, which
# are included when sending with sendfile().
binmode $fh;
print $fh $data;
close $fh;
return ($file, $data);
}