diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 15:01:31 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 15:01:31 +0000 |
commit | c9cf025fadfe043f0f2f679e10d1207d8a158bb6 (patch) | |
tree | 3a94effe0bdc0a6814d8134f4ed840d7cc6b6f19 /debian/perl-framework/t/apache/server_name_port.t | |
parent | Adding upstream version 2.4.57. (diff) | |
download | apache2-c9cf025fadfe043f0f2f679e10d1207d8a158bb6.tar.xz apache2-c9cf025fadfe043f0f2f679e10d1207d8a158bb6.zip |
Adding debian version 2.4.57-2.debian/2.4.57-2debian
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | debian/perl-framework/t/apache/server_name_port.t | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/debian/perl-framework/t/apache/server_name_port.t b/debian/perl-framework/t/apache/server_name_port.t new file mode 100644 index 0000000..2597d7c --- /dev/null +++ b/debian/perl-framework/t/apache/server_name_port.t @@ -0,0 +1,135 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestRequest; +use Socket; + +# send +# arg #1: url prefix +# arg #2: Host header (none if undef) +# expected results: +# arg #3: response code +# arg #4: SERVER_NAME +# arg #5: SERVER_PORT (canonical port if 'REMOTE') +# undef == don't care + +my $url_suffix = 'modules/cgi/env.pl'; + +my @test_cases = ( + [ "/", "righthost" => 200, 'righthost', 'REMOTE' ], + [ "/", "righthost:123" => 200, 'righthost', '123' ], + [ "/", "Righthost" => 200, 'righthost', 'REMOTE' ], + [ "/", "Righthost:123" => 200, 'righthost', '123' ], + [ "/", "128.0.0.1" => 200, '128.0.0.1', 'REMOTE' ], + [ "/", "128.0.0.1:123" => 200, '128.0.0.1', '123' ], + [ "/", "[::1]" => 200, '[::1]', 'REMOTE' ], + [ "/", "[::1]:123" => 200, '[::1]', '123' ], + [ "/", "[a::1]" => 200, '[a::1]', 'REMOTE' ], + [ "/", "[a::1]:123" => 200, '[a::1]', '123' ], + [ "/", "[A::1]" => 200, '[a::1]', 'REMOTE' ], + [ "/", "[A::1]:123" => 200, '[a::1]', '123' ], + [ "http://righthost/", undef => 200, 'righthost', 'REMOTE' ], + [ "http://righthost:123/", undef => 200, 'righthost', '123' ], + [ "http://Righthost/", undef => 200, 'righthost', 'REMOTE' ], + [ "http://Righthost:123/", undef => 200, 'righthost', '123' ], + [ "http://128.0.0.1/", undef => 200, '128.0.0.1', 'REMOTE' ], + [ "http://128.0.0.1:123/", undef => 200, '128.0.0.1', '123' ], + [ "http://[::1]/", undef => 200, '[::1]', 'REMOTE' ], + [ "http://[::1]:123/", undef => 200, '[::1]', '123' ], + [ "http://righthost/", "wronghost" => 200, 'righthost', 'REMOTE' ], + [ "http://righthost:123/", "wronghost:321" => 200, 'righthost', '123' ], + [ "http://Righthost/", "wronghost" => 200, 'righthost', 'REMOTE' ], + [ "http://Righthost:123/", "wronghost:321" => 200, 'righthost', '123' ], + [ "http://128.0.0.1/", "126.0.0.1" => 200, '128.0.0.1', 'REMOTE' ], + [ "http://128.0.0.1:123/", "126.0.0.1:321" => 200, '128.0.0.1', '123' ], + [ "http://[::1]/", "[::2]" => 200, '[::1]', 'REMOTE' ], + [ "http://[::1]:123/", "[::2]:321" => 200, '[::1]', '123' ], +); + +my @todo; +if (!have_min_apache_version('2.4.24')) { + # r1426827 + push @todo, 32, 35, 56, 59, 80, 83; +} +if (!have_min_apache_version('2.4')) { + # r1147614, PR 26005 + push @todo, 20, 23, 26, 29; +} + +plan tests => 3 * scalar(@test_cases), todo => \@todo, need need_min_apache_version('2.2'), need_cgi; + +foreach my $t (@test_cases) { + my $req = "GET $t->[0]$url_suffix HTTP/1.1\r\nConnection: close\r\n"; + $req .= "Host: $t->[1]\r\n" if defined $t->[1]; + $req .= "\r\n"; + + my %ex = ( + rc => $t->[2], + SERVER_NAME => $t->[3], + SERVER_PORT => $t->[4], + ); + + my $sock = Apache::TestRequest::vhost_socket(); + if (!$sock) { + print "# failed to connect\n"; + ok(0); + next; + } + if (defined $ex{SERVER_PORT} && $ex{SERVER_PORT} eq 'REMOTE') { + my $peername = getpeername($sock); + my ($port) = sockaddr_in($peername); + $ex{SERVER_PORT} = "$port"; + } + + $sock->print($req); + $sock->shutdown(1); + sleep(0.1); + print "# SENDING:\n# ", escape($req), "\n"; + + my $response_data = ""; + my $buf; + while ($sock->read($buf, 10000) > 0) { + $response_data .= $buf; + } + my $response = HTTP::Response->parse($response_data); + if (! defined $response) { + die "HTTP::Response->parse failed"; + } + my $rc = $response->code; + if (! defined $rc) { + print "# HTTPD dropped the connection\n"; + ok(0); + } + else { + print "# expecting $ex{rc}, got ", $rc, "\n"; + ok ($rc == $ex{rc}); + } + + foreach my $var (qw/SERVER_NAME SERVER_PORT/) { + if (! defined $ex{$var}) { + print "# don't care about $var\n"; + ok(1); + } + elsif ($response_data =~ /^$var = (.*)$/m) { + my $val = $1; + print "# got $var='$val', expected '$ex{$var}'\n"; + ok($val eq $ex{$var}); + } + else { + print "# no $var in response, expected '$ex{$var}'\n"; + ok(0); + } + } +} + +sub escape +{ + my $in = shift; + $in =~ s{\\}{\\\\}g; + $in =~ s{\r}{\\r}g; + $in =~ s{\n}{\\n}g; + $in =~ s{\t}{\\t}g; + $in =~ s{([\x00-\x1f])}{sprintf("\\x%02x", ord($1))}ge; + return $in; +} |