summaryrefslogtreecommitdiffstats
path: root/debian/perl-framework/t/apache/contentlength.t
diff options
context:
space:
mode:
Diffstat (limited to 'debian/perl-framework/t/apache/contentlength.t')
-rw-r--r--debian/perl-framework/t/apache/contentlength.t83
1 files changed, 83 insertions, 0 deletions
diff --git a/debian/perl-framework/t/apache/contentlength.t b/debian/perl-framework/t/apache/contentlength.t
new file mode 100644
index 0000000..f141990
--- /dev/null
+++ b/debian/perl-framework/t/apache/contentlength.t
@@ -0,0 +1,83 @@
+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 "");
+ }
+}