1
0
Fork 0
apache2/debian/perl-framework/t/modules/alias.t
Daniel Baumann f56986e2d9
Adding debian version 2.4.63-1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 11:01:27 +02:00

240 lines
6.2 KiB
Perl

use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestRequest;
use Apache::TestUtil;
use Apache::TestConfig ();
use constant WINFU => Apache::TestConfig::WINFU();
##
## mod_alias test
##
## redirect codes for Redirect testing ##
my %redirect = (
perm => '301',
perm2 => '301',
temp => '302',
temp2 => '302',
seeother => '303',
gone => '410',
forbid => '403'
);
## RedirectMatch testing ##
my %rm_body = (
p => '301',
t => '302'
);
my %rm_rc = (
s => '303',
g => '410',
f => '403'
);
my %relative_redirects = (
"/redirect_relative/default" => "^http", # URL should be absolute
"/redirect_relative/on" => "^/out-on", # URL should be relative
"/redirect_relative/off" => "^http", # URL should be absolute
"/redirect_relative/off/fail" => undef, # 500 due to invalid URL
);
#XXX: find something that'll on other platforms (/bin/sh aint it)
my $script_tests = WINFU ? 0 : 4 + have_min_apache_version("2.4.19");
my $tests = 12 + have_min_apache_version("2.4.19") * 10 +
(keys %redirect) +
(keys %rm_body) * (1 + have_min_apache_version("2.4.19")) * 10 +
(keys %rm_rc) * (1 + have_min_apache_version("2.4.19")) * 10 +
$script_tests;
if (have_min_apache_version("2.5.1")) {
$tests += (keys %relative_redirects)*2;
}
#LWP required to follow redirects
plan tests => $tests, need need_module('alias'), need_lwp;
## simple alias ##
t_debug "verifying simple aliases";
ok t_cmp((GET_RC "/alias/"),
200,
"/alias/");
## alias to a non-existant area ##
ok t_cmp((GET_RC "/bogu/"),
404,
"/bogu/");
t_debug "verifying alias match with /ali[0-9].";
for (my $i=0 ; $i <= 9 ; $i++) {
ok t_cmp((GET_BODY "/ali$i"),
$i,
"/ali$i");
}
if (have_min_apache_version("2.4.19")) {
t_debug "verifying expression alias match with /expr/ali[0-9].";
for (my $i=0 ; $i <= 9 ; $i++) {
ok t_cmp((GET_BODY "/expr/ali$i"),
$i,
"/ali$i");
}
}
my ($actual, $expected);
foreach (sort keys %redirect) {
## make LWP not follow the redirect since we
## are just interested in the return code.
local $Apache::TestRequest::RedirectOK = 0;
$expected = $redirect{$_};
$actual = GET_RC "/$_";
ok t_cmp($actual,
$expected,
"/$_");
}
print "verifying body of perm and temp redirect match\n";
foreach (sort keys %rm_body) {
for (my $i=0 ; $i <= 9 ; $i++) {
$expected = $i;
$actual = GET_BODY "/$_$i";
ok t_cmp($actual,
$expected,
"/$_$i");
}
}
if (have_min_apache_version("2.4.19")) {
print "verifying body of perm and temp redirect match with expression support\n";
foreach (sort keys %rm_body) {
for (my $i=0 ; $i <= 9 ; $i++) {
$expected = $i;
$actual = GET_BODY "/expr/$_$i";
ok t_cmp($actual,
$expected,
"/$_$i");
}
}
}
print "verifying return code of seeother and gone redirect match\n";
foreach (keys %rm_rc) {
## make LWP not follow the redirect since we
## are just interested in the return code.
local $Apache::TestRequest::RedirectOK = 0;
$expected = $rm_rc{$_};
for (my $i=0 ; $i <= 9 ; $i++) {
$actual = GET_RC "$_$i";
ok t_cmp($actual,
$expected,
"$_$i");
}
}
if (have_min_apache_version("2.4.19")) {
print "verifying return code of seeother and gone redirect match with expression support\n";
foreach (keys %rm_rc) {
## make LWP not follow the redirect since we
## are just interested in the return code.
local $Apache::TestRequest::RedirectOK = 0;
$expected = $rm_rc{$_};
for (my $i=0 ; $i <= 9 ; $i++) {
$actual = GET_RC "/expr/$_$i";
ok t_cmp($actual,
$expected,
"$_$i");
}
}
}
## create a little cgi to test ScriptAlias and ScriptAliasMatch ##
my $string = "this is a shell script cgi.";
my $cgi =<<EOF;
#!/bin/sh
echo Content-type: text/plain
echo
echo $string
EOF
my $vars = Apache::Test::vars();
my $script = "$vars->{t_dir}/htdocs/modules/alias/script";
t_write_file($script,$cgi);
chmod 0755, $script;
## if we get the script here it will be plain text ##
t_debug "verifying /modules/alias/script is plain text";
ok t_cmp((GET_BODY "/modules/alias/script"),
$cgi,
"/modules/alias/script") unless WINFU;
if (have_cgi) {
## here it should be the result of the executed cgi ##
t_debug "verifying same file accessed at /cgi/script is executed code";
ok t_cmp((GET_BODY "/cgi/script"),
"$string\n",
"/cgi/script") unless WINFU;
}
else {
skip "skipping test without CGI module";
}
if (have_cgi) {
## with ScriptAliasMatch ##
t_debug "verifying ScriptAliasMatch with /aliascgi-script";
ok t_cmp((GET_BODY "/aliascgi-script"),
"$string\n",
"/aliascgi-script") unless WINFU;
}
else {
skip "skipping test without CGI module";
}
if (have_min_apache_version("2.4.19")) {
if (have_cgi) {
## with ScriptAlias in LocationMatch ##
t_debug "verifying ScriptAlias in LocationMatch with /expr/aliascgi-script";
ok t_cmp((GET_BODY "/expr/aliascgi-script"),
"$string\n",
"/aliascgi-script") unless WINFU;
}
else {
skip "skipping test without CGI module";
}
}
## failure with ScriptAliasMatch ##
t_debug "verifying bad script alias.";
ok t_cmp((GET_RC "/aliascgi-nada"),
404,
"/aliascgi-nada") unless WINFU;
## clean up ##
t_rmtree("$vars->{t_logs}/mod_cgi.log");
if (have_min_apache_version("2.5.1")) {
my ($path, $regex);
while (($path, $regex) = each (%relative_redirects)) {
local $Apache::TestRequest::RedirectOK = 0;
my $r;
$r = GET($path);
if (defined($regex)) {
ok t_cmp($r->code, "302");
ok t_cmp($r->header("Location"), qr/$regex/, "failure on $path");
}
else {
ok t_cmp($r->code, "500");
ok t_cmp($r->header("Location"), undef, "failure on $path");
}
}
}