| 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 ""); |
| } |
| } |