diff --git a/configure.ac b/configure.ac index da9c8b10..02524953 100644 --- a/configure.ac +++ b/configure.ac @@ -1651,9 +1651,7 @@ AC_CONFIG_FILES([\ doc/systemd/Makefile \ Makefile \ src/Makefile \ - tests/docroot/123/Makefile \ tests/docroot/Makefile \ - tests/docroot/www/expire/Makefile \ tests/docroot/www/indexfile/Makefile \ tests/docroot/www/Makefile \ tests/Makefile \ diff --git a/tests/core-404-handler.t b/tests/core-404-handler.t index a7259ae7..f292b4c4 100755 --- a/tests/core-404-handler.t +++ b/tests/core-404-handler.t @@ -73,7 +73,7 @@ $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP- ok($tf->handle_http($t) == 0, '404 handler => dynamic(nostatus)'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, 'HTTP-Content' => "send404\n" } ]; diff --git a/tests/docroot/123/100.txt b/tests/docroot/123/100.txt deleted file mode 100644 index c4782fd3..00000000 --- a/tests/docroot/123/100.txt +++ /dev/null @@ -1,10 +0,0 @@ -123456789 -123456789 -123456789 -123456789 -123456789 -123456789 -123456789 -123456789 -123456789 -abcdefghi diff --git a/tests/docroot/123/12345.html b/tests/docroot/123/12345.html deleted file mode 100644 index e56e15bb..00000000 --- a/tests/docroot/123/12345.html +++ /dev/null @@ -1 +0,0 @@ -12345 diff --git a/tests/docroot/123/12345.txt b/tests/docroot/123/12345.txt deleted file mode 100644 index e56e15bb..00000000 --- a/tests/docroot/123/12345.txt +++ /dev/null @@ -1 +0,0 @@ -12345 diff --git a/tests/docroot/123/Makefile.am b/tests/docroot/123/Makefile.am deleted file mode 100644 index 4652a4f9..00000000 --- a/tests/docroot/123/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -EXTRA_DIST=100.txt 12345.html 12345.txt dummyfile.bla diff --git a/tests/docroot/123/dummyfile.bla b/tests/docroot/123/dummyfile.bla deleted file mode 100644 index e56e15bb..00000000 --- a/tests/docroot/123/dummyfile.bla +++ /dev/null @@ -1 +0,0 @@ -12345 diff --git a/tests/docroot/Makefile.am b/tests/docroot/Makefile.am index 5feab8ce..d86055d8 100644 --- a/tests/docroot/Makefile.am +++ b/tests/docroot/Makefile.am @@ -1,2 +1,2 @@ -SUBDIRS=123 www +SUBDIRS=www GNUMAKEFLAGS=--no-print-directory -s diff --git a/tests/docroot/www/Makefile.am b/tests/docroot/www/Makefile.am index 72bbeb51..4d702f73 100644 --- a/tests/docroot/www/Makefile.am +++ b/tests/docroot/www/Makefile.am @@ -1,21 +1,13 @@ EXTRA_DIST=\ 404.html \ 404.pl \ - cgi-pathinfo.pl \ cgi.pl \ - crlfcrash.pl \ exec-date.shtml \ - get-header.pl \ - get-post-len.pl \ index.html \ index.txt \ - ip.pl \ - nph-status.pl \ prefix.fcgi \ - send404.pl \ ssi-include.shtml \ ssi-include.txt \ ssi.shtml SUBDIRS=\ - expire \ indexfile diff --git a/tests/docroot/www/cgi-pathinfo.pl b/tests/docroot/www/cgi-pathinfo.pl deleted file mode 100755 index 6b3a3355..00000000 --- a/tests/docroot/www/cgi-pathinfo.pl +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env perl - -print "Content-Type: text/html\r\n\r\n"; - -print $ENV{"PATH_INFO"}; - -0; diff --git a/tests/docroot/www/cgi.pl b/tests/docroot/www/cgi.pl index c149cee1..3e7ea872 100755 --- a/tests/docroot/www/cgi.pl +++ b/tests/docroot/www/cgi.pl @@ -1,15 +1,29 @@ #!/usr/bin/env perl +# env +if ($ENV{"QUERY_STRING"} =~ /^env=(\w+)/) { + print "Status: 200\r\n\r\n$ENV{$1}"; + exit 0; +} + +# redirection if ($ENV{"QUERY_STRING"} eq "internal-redir") { - print "Location: /cgi-pathinfo.pl/foo\r\n\r\n"; + print "Location: /indexfile/index.pl/foo\r\n\r\n"; exit 0; } +# redirection if ($ENV{"QUERY_STRING"} eq "external-redir") { print "Location: http://www.example.org:2048/\r\n\r\n"; exit 0; } +# 404 +if ($ENV{"QUERY_STRING"} eq "send404") { + print "Status: 404\n\nsend404\n"; + exit 0; +} + # X-Sendfile if ($ENV{"QUERY_STRING"} eq "xsendfile") { # urlencode path for CGI header @@ -25,15 +39,34 @@ if ($ENV{"QUERY_STRING"} eq "xsendfile") { exit 0; } -# env -if ($ENV{"QUERY_STRING"} =~ /^env=(\w+)/) { - print "Status: 200\r\n\r\n$ENV{$1}"; +# NPH +if ($ENV{"QUERY_STRING"} =~ /^nph=(\w+)/) { + print "Status: $1 FooBar\r\n\r\n"; exit 0; } -# default -print "Content-Type: text/html\r\n\r\n"; +# crlfcrash +if ($ENV{"QUERY_STRING"} eq "crlfcrash") { + print "Location: http://www.example.org/\r\n\n\n"; + exit 0; +} -print $ENV{"SCRIPT_NAME"}; +# POST length +if ($ENV{"QUERY_STRING"} eq "post-len") { + $cl = $ENV{CONTENT_LENGTH} || 0; + my $len = 0; + if ($ENV{"REQUEST_METHOD"} eq "POST") { + while (<>) { # expect test data to end in newline + $len += length($_); + last if $len >= $cl; + } + } + print "Status: 200\r\n\r\n$len"; + exit 0; +} + +# default +print "Content-Type: text/plain\r\n\r\n"; +print $ENV{"QUERY_STRING"}; 0; diff --git a/tests/docroot/www/crlfcrash.pl b/tests/docroot/www/crlfcrash.pl deleted file mode 100755 index f90bc86c..00000000 --- a/tests/docroot/www/crlfcrash.pl +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env perl -# -print "Location: http://www.example.org/\r\n\n\n"; -exit; diff --git a/tests/docroot/www/expire/Makefile.am b/tests/docroot/www/expire/Makefile.am deleted file mode 100644 index 7812b143..00000000 --- a/tests/docroot/www/expire/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -EXTRA_DIST=access.txt modification.txt diff --git a/tests/docroot/www/expire/access.txt b/tests/docroot/www/expire/access.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/docroot/www/expire/modification.txt b/tests/docroot/www/expire/modification.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/docroot/www/get-header.pl b/tests/docroot/www/get-header.pl deleted file mode 100755 index 1e19677d..00000000 --- a/tests/docroot/www/get-header.pl +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env perl - -my $s = $ENV{$ENV{"QUERY_STRING"}}; - -printf("Content-Length: %d\r\n", length($s)); -print "Content-Type: text/plain\r\n\r\n"; - -print $s; diff --git a/tests/docroot/www/get-post-len.pl b/tests/docroot/www/get-post-len.pl deleted file mode 100755 index 82276bd6..00000000 --- a/tests/docroot/www/get-post-len.pl +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env perl - -print "Content-Type: text/plain\r\n\r\n"; - -if ($ENV{"REQUEST_METHOD"} eq "POST") { - my $l = 0; - while(<>) { - $l += length($_); - } - print $l; -} else { - print "0"; -} diff --git a/tests/docroot/www/indexfile/Makefile.am b/tests/docroot/www/indexfile/Makefile.am index 140163d3..b96fec3d 100644 --- a/tests/docroot/www/indexfile/Makefile.am +++ b/tests/docroot/www/indexfile/Makefile.am @@ -1 +1 @@ -EXTRA_DIST=index.pl query_string.pl +EXTRA_DIST=index.pl diff --git a/tests/docroot/www/indexfile/query_string.pl b/tests/docroot/www/indexfile/query_string.pl deleted file mode 100755 index b775f6f6..00000000 --- a/tests/docroot/www/indexfile/query_string.pl +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env perl - -print "Status: 200\n\n$ENV{QUERY_STRING}" diff --git a/tests/docroot/www/ip.pl b/tests/docroot/www/ip.pl deleted file mode 100755 index fa56ddcf..00000000 --- a/tests/docroot/www/ip.pl +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env perl -print "Content-Type: text/html\r\n\r\n"; -print $ENV{'REMOTE_ADDR'}; - -if ($ENV{'QUERY_STRING'} eq 'info') { - print "\nF:",$ENV{'HTTP_X_FORWARDED_FOR'},"\n"; - - while (my($key, $value) = each %ENV) { - printf "%s => %s\n", $key, $value; - } -} - -0; diff --git a/tests/docroot/www/nph-status.pl b/tests/docroot/www/nph-status.pl deleted file mode 100755 index b42da741..00000000 --- a/tests/docroot/www/nph-status.pl +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env perl - -my $status = 200; - -if (defined $ENV{"QUERY_STRING"}) { - $status = $ENV{"QUERY_STRING"}; -} - -print "HTTP/1.0 ".$status." FooBar\r\n"; -print "\r\n"; diff --git a/tests/docroot/www/send404.pl b/tests/docroot/www/send404.pl deleted file mode 100755 index 45c619a7..00000000 --- a/tests/docroot/www/send404.pl +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env perl - -print "Status: 404\n", - "Content-Type: text/plain\n", - "\n", - "send404\n"; diff --git a/tests/mod-cgi.t b/tests/mod-cgi.t index 33fa76f0..c591c916 100755 --- a/tests/mod-cgi.t +++ b/tests/mod-cgi.t @@ -8,7 +8,7 @@ BEGIN { use strict; use IO::Socket; -use Test::More tests => 24; +use Test::More tests => 23; use LightyTest; my $tf = LightyTest->new(); @@ -37,7 +37,7 @@ EOF } $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/cgi.pl' } ]; @@ -75,70 +75,63 @@ $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 302, 'Locat ok($tf->handle_http($t) == 0, 'Trailing slash as path-info (#1989: workaround broken operating systems)'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/foo' } ]; -ok($tf->handle_http($t) == 0, 'perl via cgi + pathinfo'); - -$t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 502 } ]; ok($tf->handle_http($t) == 0, 'NPH + perl, invalid status-code (#14)'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304 } ]; ok($tf->handle_http($t) == 0, 'NPH + perl, setting status-code (#1125)'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ]; ok($tf->handle_http($t) == 0, 'NPH + perl, setting status-code'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'CGI/1.1' } ]; ok($tf->handle_http($t) == 0, 'cgi-env: GATEWAY_INTERFACE'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'QUERY_STRING' } ]; +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'query_string', 'Content-Type' => 'text/plain' } ]; ok($tf->handle_http($t) == 0, 'cgi-env: QUERY_STRING'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/get-header.pl' } ]; +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/cgi.pl' } ]; ok($tf->handle_http($t) == 0, 'cgi-env: SCRIPT_NAME'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/get-header.pl' } ]; +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/cgi.pl' } ]; ok($tf->handle_http($t) == 0, 'cgi-env: SCRIPT_NAME w/ PATH_INFO'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/path/info' } ]; ok($tf->handle_http($t) == 0, 'cgi-env: PATH_INFO'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP- ok($tf->handle_http($t) == 0, 'cgi-env: quoting headers with numbers'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org', 'Content-Type' => 'text/plain' } ]; +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ]; ok($tf->handle_http($t) == 0, 'cgi-env: HTTP_HOST'); $t->{REQUEST} = ( <handle_http($t) == 0, 'cgi-env: HTTP_HOST'); # broken header crash $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 302, 'Location' => 'http://www.example.org/' } ]; diff --git a/tests/mod-extforward.t b/tests/mod-extforward.t index 737c9147..69c8cf11 100755 --- a/tests/mod-extforward.t +++ b/tests/mod-extforward.t @@ -19,7 +19,7 @@ $tf->{CONFIGFILE} = 'mod-extforward.conf'; ok($tf->start_proc == 0, "Starting lighttpd") or die(); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP- ok($tf->handle_http($t) == 0, 'expect 127.0.10.1, from single ip'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP- ok($tf->handle_http($t) == 0, 'expect 127.0.20.1, from two ips'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP- ok($tf->handle_http($t) == 0, 'expect 127.0.20.1, from chained proxies'); $t->{REQUEST} = ( <start_proc == 0, "Starting lighttpd") or die(); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP ok($tf->handle_http($t) == 0, 'query first setenv'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP ok($tf->handle_http($t) == 0, 'query second setenv'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP ok($tf->handle_http($t) == 0, 'query set-environment'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP ok($tf->handle_http($t) == 0, 'query add-request-header'); $t->{REQUEST} = ( < "${tmpdir}/servers/123.example.org/pages/12345.txt" +echo "12345" > "${tmpdir}/servers/123.example.org/pages/12345.html" +echo "12345" > "${tmpdir}/servers/123.example.org/pages/dummyfile.bla" echo "12345" > "${tmpdir}/servers/123.example.org/pages/range.pdf" +cat - < "${tmpdir}/servers/123.example.org/pages/100.txt" +123456789 +123456789 +123456789 +123456789 +123456789 +123456789 +123456789 +123456789 +123456789 +abcdefghi +HERE printf "%-40s" "preparing infrastructure" [ -z "$MAKELEVEL" ] && echo diff --git a/tests/proxy.conf b/tests/proxy.conf index ae8a75a9..ba2f49dd 100644 --- a/tests/proxy.conf +++ b/tests/proxy.conf @@ -28,5 +28,5 @@ proxy.server = ( "" => ( )) url.rewrite = ( - "^/rewrite/all(/.*)$" => "/indexfile/query_string.pl?$1", + "^/rewrite/all(/.*)$" => "/cgi.pl?$1", ) diff --git a/tests/request.t b/tests/request.t index 2f5ebc8b..bba4b938 100755 --- a/tests/request.t +++ b/tests/request.t @@ -106,7 +106,7 @@ ok($tf->handle_http($t) == 0, 'HEAD request, file-not-found, query-string'); # (expect 200 OK instead of 100 Continue since request body sent with request) # (if we waited to send request body, would expect 100 Continue, first) $t->{REQUEST} = ( <handle_http($t) == 0, 'Continue, Expect'); # note Transfer-Encoding: chunked tests will fail with 411 Length Required if # server.stream-request-body != 0 in lighttpd.conf $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ]; ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked, lc hex'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ]; ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked, uc hex'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ]; ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked, two hex'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ]; ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked, with trailer'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ]; ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked, chunked header comment'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 400 } ]; ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked; bad chunked header'); $t->{REQUEST} = ( <{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 400 } ]; ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked; mismatch chunked header size and chunked data size'); $t->{REQUEST} = ( <