#! /usr/bin/perl -w BEGIN { # add current source dir to the include-path # we need this for make distcheck (my $srcdir = $0) =~ s#/[^/]+$#/#; unshift @INC, $srcdir; } use strict; use IO::Socket; use Test::More tests => 28; use LightyTest; my $tf = LightyTest->new(); my $t; ok($tf->start_proc == 0, "Starting lighttpd") or die(); ## Basic Request-Handling $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ); ok($tf->handle_http($t) == 0, 'file not found'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ); ok($tf->handle_http($t) == 0, 'file not found + querystring'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain' } ); ok($tf->handle_http($t) == 0, 'GET, content == 12345, mimetype text/plain'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/html' } ); ok($tf->handle_http($t) == 0, 'GET, content == 12345, mimetype text/html'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'application/octet-stream' } ); ok($tf->handle_http($t) == 0, 'GET, content == 12345, mimetype application/octet-stream'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 411 } ); ok($tf->handle_http($t) == 0, 'POST request, no Content-Length'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); ok($tf->handle_http($t) == 0, 'POST request, empty request-body'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '-HTTP-Content' => ''} ); ok($tf->handle_http($t) == 0, 'HEAD request, no content'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '-HTTP-Content' => '', 'Content-Type' => 'text/html', 'Content-Length' => '6'} ); ok($tf->handle_http($t) == 0, 'HEAD request, mimetype text/html, content-length'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, '-HTTP-Content' => '' } ); ok($tf->handle_http($t) == 0, 'HEAD request, file-not-found, query-string'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 417, '-HTTP-Content' => ''} ); ok($tf->handle_http($t) == 0, 'Continue, Expect'); ## ranges $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => '1234' } ); ok($tf->handle_http($t) == 0, 'GET, Range 0-3'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => '45'."\n" } ); ok($tf->handle_http($t) == 0, 'GET, Range -3'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => '45'."\n" } ); ok($tf->handle_http($t) == 0, 'GET, Range 3-'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => <handle_http($t) == 0, 'GET, Range 0-1,3-4'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); ok($tf->handle_http($t) == 0, 'GET, Range 0--'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); ok($tf->handle_http($t) == 0, 'GET, Range -2-3'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 416, 'HTTP-Content' => < 416 - Requested Range Not Satisfiable

416 - Requested Range Not Satisfiable

EOF } ); ok($tf->handle_http($t) == 0, 'GET, Range -0'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 416, 'HTTP-Content' => < 416 - Requested Range Not Satisfiable

416 - Requested Range Not Satisfiable

EOF } ); ok($tf->handle_http($t) == 0, 'GET, Range start out of range'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ); ok($tf->handle_http($t) == 0, 'larger headers'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); ok($tf->handle_http($t) == 0, 'Duplicate Host headers, Bug #25'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); ok($tf->handle_http($t) == 0, 'Duplicate Content-Length headers'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); ok($tf->handle_http($t) == 0, 'Duplicate Content-Type headers'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); ok($tf->handle_http($t) == 0, 'Duplicate Range headers'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); ok($tf->handle_http($t) == 0, 'Duplicate If-None-Match headers'); $t->{REQUEST} = ( <{RESPONSE} = ( { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ); ok($tf->handle_http($t) == 0, 'Duplicate If-Modified-Since headers'); ok($tf->stop_proc == 0, "Stopping lighttpd");