83 lines
2.3 KiB
Perl
83 lines
2.3 KiB
Perl
use strict;
|
|
use warnings FATAL => 'all';
|
|
|
|
use Apache::Test;
|
|
use Apache::TestUtil;
|
|
use Apache::TestRequest ();
|
|
|
|
my @test_strings = ("",
|
|
"0",
|
|
"0000000000000000000000000000000000",
|
|
"1000000000000000000000000000000000",
|
|
"-1",
|
|
"123abc",
|
|
);
|
|
my @req_strings = ("/echo_post",
|
|
"/i_do_not_exist_in_your_wildest_imagination");
|
|
|
|
my $resp_failure;
|
|
if (have_min_apache_version('2.2.30')
|
|
&& (!have_min_apache_version('2.3.0')
|
|
|| have_min_apache_version('2.4.14'))) {
|
|
$resp_failure = "HTTP/1.1 400 Bad Request";
|
|
}
|
|
else {
|
|
$resp_failure = "HTTP/1.1 413 Request Entity Too Large";
|
|
}
|
|
# This is expanded out.
|
|
my @resp_strings = ($resp_failure,
|
|
$resp_failure,
|
|
"HTTP/1.1 200 OK",
|
|
"HTTP/1.1 404 Not Found",
|
|
"HTTP/1.1 200 OK",
|
|
"HTTP/1.1 404 Not Found",
|
|
$resp_failure,
|
|
$resp_failure,
|
|
$resp_failure,
|
|
$resp_failure,
|
|
$resp_failure,
|
|
$resp_failure,
|
|
);
|
|
|
|
my $tests = 4 * @test_strings;
|
|
my $vars = Apache::Test::vars();
|
|
my $module = 'default';
|
|
my $cycle = 0;
|
|
|
|
plan tests => $tests, ['eat_post'];
|
|
|
|
print "testing $module\n";
|
|
|
|
for my $data (@test_strings) {
|
|
for my $request_uri (@req_strings) {
|
|
my $sock = Apache::TestRequest::vhost_socket($module);
|
|
ok $sock;
|
|
|
|
Apache::TestRequest::socket_trace($sock);
|
|
|
|
$sock->print("POST $request_uri HTTP/1.0\r\n");
|
|
$sock->print("Content-Length: $data\r\n");
|
|
$sock->print("\r\n");
|
|
$sock->print("\r\n");
|
|
|
|
# Read the status line
|
|
chomp(my $response = Apache::TestRequest::getline($sock) || '');
|
|
$response =~ s/\s$//;
|
|
|
|
# Tests with empty content-length have platform-specific behaviour
|
|
# until 2.1.0.
|
|
skip
|
|
$data eq "" && !have_min_apache_version('2.1.0') ?
|
|
"skipping tests with empty C-L for httpd < 2.1.0" : 0,
|
|
t_cmp($response, $resp_strings[$cycle],
|
|
"response codes POST for $request_uri with Content-Length: $data");
|
|
|
|
$cycle++;
|
|
|
|
do {
|
|
chomp($response = Apache::TestRequest::getline($sock) || '');
|
|
$response =~ s/\s$//;
|
|
}
|
|
while ($response ne "");
|
|
}
|
|
}
|