52 lines
1.5 KiB
Perl
52 lines
1.5 KiB
Perl
use strict;
|
|
use warnings FATAL => 'all';
|
|
|
|
use Apache::Test;
|
|
use Apache::TestRequest;
|
|
use Apache::TestUtil qw(t_write_file);
|
|
|
|
# test byteranges if range boundaries are near bucket boundaries
|
|
|
|
my $url = "/apache/chunked/byteranges.txt";
|
|
my $file = Apache::Test::vars('serverroot') . "/htdocs$url";
|
|
|
|
my $content = "";
|
|
$content .= sprintf("%04d", $_) for (1 .. 2000);
|
|
my $clen = length($content);
|
|
|
|
# make mod_bucketeer create buckets of size 200 from our 4000 bytes
|
|
my $blen = 200;
|
|
my $B = chr(0x02);
|
|
my @buckets = ($content =~ /(.{1,$blen})/g);
|
|
my $file_content = join($B, @buckets);
|
|
t_write_file($file, $file_content);
|
|
|
|
|
|
my @range_boundaries = (
|
|
0, 1, 2,
|
|
$blen-2, $blen-1, $blen, $blen+1,
|
|
3*$blen-2, 3*$blen-1, 3*$blen, 3*$blen+1,
|
|
$clen-$blen-2, $clen-$blen-1, $clen-$blen, $clen-$blen+1,
|
|
$clen-2, $clen-1,
|
|
);
|
|
my @test_cases;
|
|
for my $start (@range_boundaries) {
|
|
for my $end (@range_boundaries) {
|
|
push @test_cases, [$start, $end] unless ($end < $start);
|
|
}
|
|
}
|
|
|
|
plan tests => scalar(@test_cases), need need_lwp,
|
|
need_module('mod_bucketeer');
|
|
|
|
foreach my $test (@test_cases) {
|
|
my ($start, $end) = @$test;
|
|
my $r = "$start-$end";
|
|
print "range: $r\n";
|
|
my $result = GET $url, "Range" => "bytes=$r";
|
|
my $expect = substr($content, $start, $end - $start + 1);
|
|
my $got = $result->content;
|
|
print("rc " . $result->code . "\n");
|
|
print("expect: '$expect'\ngot: '$got'\n");
|
|
ok ($got eq $expect);
|
|
}
|