summaryrefslogtreecommitdiffstats
path: root/debian/perl-framework/t/apache/contentlength.t
blob: f14199063b03a0f7e38285389c9342837388b7da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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 "");
  }
}