blob: 6078f583fc336e87957ab5ac2e902ea880c910f8 [file] [log] [blame]
#!/usr/bin/perl
# (C) Maxim Dounin
# (C) Valentin Bartenev
# Tests for the proxy_redirect directive.
###############################################################################
use warnings;
use strict;
use Test::More;
BEGIN { use FindBin; chdir($FindBin::Bin); }
use lib 'lib';
use Test::Nginx;
###############################################################################
select STDERR; $| = 1;
select STDOUT; $| = 1;
my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(15);
$t->write_file_expand('nginx.conf', <<'EOF');
%%TEST_GLOBALS%%
daemon off;
events {
}
http {
%%TEST_GLOBALS_HTTP%%
server {
listen 127.0.0.1:8080;
server_name localhost;
location / {
set $some_var var_here;
proxy_pass http://127.0.0.1:8081;
proxy_redirect http://127.0.0.1:8081/var_in_second/
/$some_var/;
proxy_redirect http://127.0.0.1:8081/$some_var/ /replaced/;
proxy_redirect ~^(.+)/regex_w_([^/]+) $1/$2/test.html;
proxy_redirect ~*re+gexp? /replaced/test.html;
}
location /expl_default/ {
proxy_pass http://127.0.0.1:8081/replace_this/;
proxy_redirect wrong wrong;
proxy_redirect default;
}
location /impl_default/ {
proxy_pass http://127.0.0.1:8081/replace_this/;
}
location /off/ {
proxy_pass http://127.0.0.1:8081/;
proxy_redirect off;
location /off/on/ {
proxy_pass http://127.0.0.1:8081;
proxy_redirect http://127.0.0.1:8081/off/ /;
location /off/on/on/ {
proxy_pass http://127.0.0.1:8081;
}
}
}
}
server {
listen 127.0.0.1:8081;
server_name localhost;
location / {
add_header Refresh "7; url=http://127.0.0.1:8081$uri";
return http://127.0.0.1:8081$uri;
}
}
}
EOF
$t->run();
###############################################################################
my ($p0, $p1) = (port(8080), port(8081));
is(http_get_location("http://127.0.0.1:$p0/impl_default/test.html"),
"http://127.0.0.1:$p0/impl_default/test.html", 'implicit default');
is(http_get_location("http://127.0.0.1:$p0/expl_default/test.html"),
"http://127.0.0.1:$p0/expl_default/test.html", 'explicit default');
is(http_get_refresh("http://127.0.0.1:$p0/impl_default/test.html"),
'7; url=/impl_default/test.html', 'implicit default (refresh)');
is(http_get_refresh("http://127.0.0.1:$p0/expl_default/test.html"),
'7; url=/expl_default/test.html', 'explicit default (refresh)');
is(http_get_location("http://127.0.0.1:$p0/var_in_second/test.html"),
"http://127.0.0.1:$p0/var_here/test.html", 'variable in second arg');
is(http_get_refresh("http://127.0.0.1:$p0/var_in_second/test.html"),
'7; url=/var_here/test.html', 'variable in second arg (refresh)');
is(http_get_location("http://127.0.0.1:$p0/off/test.html"),
"http://127.0.0.1:$p1/test.html", 'rewrite off');
is(http_get_location("http://127.0.0.1:$p0/off/on/test.html"),
"http://127.0.0.1:$p0/on/test.html", 'rewrite off overwrite');
is(http_get_location("http://127.0.0.1:$p0/off/on/on/test.html"),
"http://127.0.0.1:$p0/on/on/test.html", 'rewrite inheritance');
is(http_get_location("http://127.0.0.1:$p0/var_here/test.html"),
"http://127.0.0.1:$p0/replaced/test.html", 'variable in first arg');
is(http_get_refresh("http://127.0.0.1:$p0/var_here/test.html"),
'7; url=/replaced/test.html', 'variable in first arg (refresh)');
is(http_get_location("http://127.0.0.1:$p0/ReeegEX/test.html"),
"http://127.0.0.1:$p0/replaced/test.html", 'caseless regexp');
is(http_get_location("http://127.0.0.1:$p0/regex_w_captures/test.html"),
"http://127.0.0.1:$p1/captures/test.html", 'regexp w/captures');
is(http_get_refresh("http://127.0.0.1:$p0/ReeegEX/test.html"),
'7; url=/replaced/test.html', 'caseless regexp (refresh)');
is(http_get_refresh("http://127.0.0.1:$p0/regex_w_captures/test.html"),
"7; url=http://127.0.0.1:$p1/captures/test.html",
'regexp w/captures (refresh)');
###############################################################################
sub http_get_location {
my ($url) = @_;
http_get($url) =~ /^Location:\s(.+?)\x0d?$/mi;
return $1;
}
sub http_get_refresh {
my ($url) = @_;
http_get($url) =~ /^Refresh:\s(.+?)\x0d?$/mi;
return $1;
}
###############################################################################