120 lines
3.2 KiB
Perl
120 lines
3.2 KiB
Perl
use strict;
|
|
use warnings FATAL => 'all';
|
|
|
|
use Apache::Test;
|
|
use Apache::TestRequest;
|
|
use Apache::TestUtil;
|
|
use Apache::TestCommon ();
|
|
|
|
my %frontend = (
|
|
proxy_http_https => 'http',
|
|
proxy_https_https => 'https',
|
|
proxy_https_http => 'https',
|
|
proxy_http_https_proxy_section => 'http',
|
|
proxy_https_https_proxy_section => 'https',
|
|
);
|
|
my %backend = (
|
|
proxy_http_https => 'https',
|
|
proxy_https_https => 'https',
|
|
proxy_https_http => 'http',
|
|
proxy_http_https_proxy_section => 'https',
|
|
proxy_https_https_proxy_section => 'https',
|
|
);
|
|
|
|
my $num_modules = scalar keys %frontend;
|
|
my $post_module = 'eat_post';
|
|
|
|
my $post_tests = have_module($post_module) ?
|
|
Apache::TestCommon::run_post_test_sizes() : 0;
|
|
|
|
my $num_http_backends = 0;
|
|
for my $module (sort keys %backend) {
|
|
if ($backend{$module} eq "http") {
|
|
$num_http_backends++;
|
|
}
|
|
}
|
|
|
|
plan tests => (8 + $post_tests) * $num_modules - 5 * $num_http_backends,
|
|
need need_lwp, [qw(mod_proxy proxy_http.c)];
|
|
|
|
for my $module (sort keys %frontend) {
|
|
|
|
my $scheme = $frontend{$module};
|
|
Apache::TestRequest::module($module);
|
|
Apache::TestRequest::scheme($scheme);
|
|
|
|
my $hostport = Apache::TestRequest::hostport();
|
|
my $res;
|
|
my %vars;
|
|
|
|
sok {
|
|
t_cmp(GET('/')->code,
|
|
200,
|
|
"/ with $module ($scheme)");
|
|
};
|
|
|
|
sok {
|
|
t_cmp(GET('/modules/cgi/nph-foldhdr.pl')->code,
|
|
200,
|
|
"CGI script with folded headers");
|
|
};
|
|
|
|
if ($backend{$module} eq "https") {
|
|
sok {
|
|
t_cmp(GET('/verify')->code,
|
|
200,
|
|
"using valid proxyssl client cert");
|
|
};
|
|
|
|
sok {
|
|
t_cmp(GET('/require/snakeoil')->code,
|
|
403,
|
|
"using invalid proxyssl client cert");
|
|
};
|
|
|
|
$res = GET('/require-ssl-cgi/env.pl');
|
|
|
|
sok {
|
|
t_cmp($res->code, 200, "protected cgi script");
|
|
};
|
|
|
|
my $body = $res->content || "";
|
|
|
|
for my $line (split /\s*\r?\n/, $body) {
|
|
my($key, $val) = split /\s*=\s*/, $line, 2;
|
|
next unless $key;
|
|
$vars{$key} = $val || "";
|
|
}
|
|
|
|
sok {
|
|
t_cmp($vars{HTTP_X_FORWARDED_HOST},
|
|
$hostport,
|
|
"X-Forwarded-Host header");
|
|
};
|
|
|
|
sok {
|
|
t_cmp($vars{SSL_CLIENT_S_DN_CN},
|
|
'client_ok',
|
|
"client subject common name");
|
|
};
|
|
}
|
|
|
|
sok {
|
|
#test that ProxyPassReverse rewrote the Location header
|
|
#to use the frontend server rather than downstream server
|
|
my $uri = '/modules';
|
|
my $ruri = Apache::TestRequest::resolve_url($uri) . '/';
|
|
|
|
#tell lwp not to follow redirect so we can see the Location header
|
|
local $Apache::TestRequest::RedirectOK = 0;
|
|
|
|
$res = GET($uri);
|
|
|
|
my $location = $res->header('Location') || 'NONE';
|
|
|
|
t_cmp($location, $ruri, 'ProxyPassReverse Location rewrite');
|
|
};
|
|
|
|
Apache::TestCommon::run_post_test($post_module) if $post_tests;
|
|
Apache::TestRequest::user_agent(reset => 1);
|
|
}
|