diff options
Diffstat (limited to '')
-rw-r--r-- | debian/perl-framework/t/http11/chunked.t | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/debian/perl-framework/t/http11/chunked.t b/debian/perl-framework/t/http11/chunked.t new file mode 100644 index 0000000..2331239 --- /dev/null +++ b/debian/perl-framework/t/http11/chunked.t @@ -0,0 +1,133 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestRequest; +use Apache::TestUtil; + +Apache::TestRequest::user_agent(keep_alive => 1); + +Apache::TestRequest::scheme('http') + unless have_module 'LWP::Protocol::https10'; #lwp 5.60 + +#In httpd-2.0, chunked encoding is optional and will only be used +#if response is > 4*AP_MIN_BYTES_TO_WRITE (see server/protocol.c) + +my @small_sizes = (100, 5000); +my @chunk_sizes = (25432, 75962, 100_000, 300_000); + +my $tests = (@chunk_sizes + @small_sizes) * 5; + +if (! have_module 'random_chunk') { + print "# Skipping; missing prerequisite module 'random_chunk'\n"; +} +plan tests => $tests, need_module 'random_chunk'; + +my $location = '/random_chunk'; +my $requests = 0; + +sub expect_chunked { + my $size = shift; + sok sub { + my $res = GET "/random_chunk?0,$size"; + my $body = $res->content; + my $length = 0; + + if ($body =~ s/__END__:(\d+)$//) { + $length = $1; + } + + ok t_cmp($res->protocol, + "HTTP/1.1", + "response protocol" + ); + + my $enc = $res->header('Transfer-Encoding') || + $res->header('Client-Transfer-Encoding') || #lwp 5.61+ + ''; + my $ct = $res->header('Content-Length') || 0; + + ok t_cmp($enc, + "chunked", + "response Transfer-Encoding" + ); + + ok t_cmp($ct, + 0, + "no Content-Length" + ); + + ok t_cmp(length($body), + $length, + "body length" + ); + + $requests++; + my $request_num = + Apache::TestRequest::user_agent_request_num($res); + + return t_cmp($request_num, + $requests, + "number of requests" + ); + }, 5; +} + +sub expect_not_chunked { + my $size = shift; + sok sub { + my $res = GET "/random_chunk?0,$size"; + my $body = $res->content; + my $content_length = length $res->content; + my $length = 0; + + if ($body =~ s/__END__:(\d+)$//) { + $length = $1; + } + + ok t_cmp($res->protocol, + "HTTP/1.1", + "response protocol" + ); + + my $enc = $res->header('Transfer-Encoding') || ''; + my $ct = $res->header('Content-Length') || ''; + + ok !t_cmp($enc, + "chunked", + "no Transfer-Encoding (test result inverted)" + ); + + ok t_cmp($ct, + (($ct eq '') ? $ct : $content_length), + "content length" + ); + + ok t_cmp(length($body), + $length, + "body length" + ); + + $requests++; + my $request_num = + Apache::TestRequest::user_agent_request_num($res); + + return t_cmp($request_num, + $requests, + "number of requests" + ); + }, 5; +} + +for my $size (@chunk_sizes) { + expect_chunked $size; +} + +for my $size (@small_sizes) { + if (have_apache 1) { + expect_chunked $size; + } + else { + expect_not_chunked $size; + } +} |