| use strict; |
| use warnings FATAL => 'all'; |
| |
| use Apache::Test; |
| use Apache::TestRequest; |
| use Apache::TestUtil qw(t_write_file); |
| |
| # test multi-byterange-requests with overlaps (merges) |
| |
| my $url = "/apache/chunked/byteranges.txt"; |
| my $file = Apache::Test::vars('serverroot') . "/htdocs$url"; |
| |
| my $content = ""; |
| $content .= sprintf("%04d", $_) for (1 .. 2000); |
| t_write_file($file, $content); |
| my $clen = length($content); |
| |
| |
| my $medrange = ""; |
| my $longrange = ""; |
| my $i; |
| |
| for (0 .. 50) { |
| $longrange .= "0-1,3-4,0-1,3-4,"; |
| if ($_ % 2) { |
| $medrange .= "0-1,3-4,0-1,3-4,"; |
| } |
| } |
| |
| my @test_cases = ( |
| { url => "/maxranges/default/byteranges.txt" , h => "0-100", status => "206"}, |
| { url => "/maxranges/default/byteranges.txt" , h => $medrange, status => "206"}, |
| { url => "/maxranges/default/byteranges.txt" , h => $longrange, status => "200"}, |
| |
| { url => "/maxranges/default-explicit/byteranges.txt" , h => "0-100", status => "206"}, |
| { url => "/maxranges/default-explicit/byteranges.txt" , h => $medrange, status => "206"}, |
| { url => "/maxranges/default-explicit/byteranges.txt" , h => $longrange, status => "200"}, |
| |
| { url => "/maxranges/none/byteranges.txt" , h => "0-100", status => "200"}, |
| { url => "/maxranges/none/byteranges.txt" , h => "$medrange", status => "200"}, |
| { url => "/maxranges/none/byteranges.txt" , h => "$longrange", status => "200"}, |
| |
| { url => "/maxranges/1/merge/none/byteranges.txt" , h => "0-100", status => "200"}, |
| { url => "/maxranges/1/merge/none/byteranges.txt" , h => "$medrange", status => "200"}, |
| { url => "/maxranges/1/merge/none/byteranges.txt" , h => "$longrange", status => "200"}, |
| |
| { url => "/maxranges/1/byteranges.txt" , h => "0-100", status => "206"}, |
| { url => "/maxranges/1/byteranges.txt" , h => "0-100,200-300", status => "200"}, |
| { url => "/maxranges/2/byteranges.txt" , h => "0-100,200-300", status => "206"}, |
| { url => "/maxranges/2/byteranges.txt" , h => "0-100,200-300,400-500", status => "200"}, |
| { url => "/maxranges/unlimited/byteranges.txt" , h => "0-100", status => "206"}, |
| { url => "/maxranges/unlimited/byteranges.txt" , h => "$medrange", status => "206"}, |
| { url => "/maxranges/unlimited/byteranges.txt" , h => "$longrange", status => "206"}, |
| |
| ); |
| plan tests => scalar(@test_cases), need need_lwp, need_min_apache_version('2.3.15') || need_min_apache_version('2.2.21'), |
| need_module('mod_alias'); |
| |
| |
| foreach my $test (@test_cases) { |
| my $result = GET $test->{"url"}, "Range" => "bytes=" . $test->{"h"} ; |
| my $boundary; |
| my $ctype = $result->header("Content-Type"); |
| if ($test->{"status"} ne $result->code()) { |
| print "Wrong status code: " . $result->code() ."\n"; |
| ok(0); |
| next; |
| } |
| ok (1); |
| } |