blob: c698115a576e729c3d5fac8d2ee94ebf284a2ad1 [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 ~^(.+)81/regex_w_([^/]+) $180/$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();
###############################################################################
is(http_get_location('http://127.0.0.1:8080/impl_default/test.html'),
'http://127.0.0.1:8080/impl_default/test.html', 'implicit default');
is(http_get_location('http://127.0.0.1:8080/expl_default/test.html'),
'http://127.0.0.1:8080/expl_default/test.html', 'explicit default');
is(http_get_refresh('http://127.0.0.1:8080/impl_default/test.html'),
'7; url=/impl_default/test.html', 'implicit default (refresh)');
is(http_get_refresh('http://127.0.0.1:8080/expl_default/test.html'),
'7; url=/expl_default/test.html', 'explicit default (refresh)');
is(http_get_location('http://127.0.0.1:8080/var_in_second/test.html'),
'http://127.0.0.1:8080/var_here/test.html', 'variable in second arg');
is(http_get_refresh('http://127.0.0.1:8080/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:8080/off/test.html'),
'http://127.0.0.1:8081/test.html', 'rewrite off');
is(http_get_location('http://127.0.0.1:8080/off/on/test.html'),
'http://127.0.0.1:8080/on/test.html', 'rewrite off overwrite');
is(http_get_location('http://127.0.0.1:8080/off/on/on/test.html'),
'http://127.0.0.1:8080/on/on/test.html', 'rewrite inheritance');
is(http_get_location('http://127.0.0.1:8080/var_here/test.html'),
'http://127.0.0.1:8080/replaced/test.html', 'variable in first arg');
is(http_get_refresh('http://127.0.0.1:8080/var_here/test.html'),
'7; url=/replaced/test.html', 'variable in first arg (refresh)');
is(http_get_location('http://127.0.0.1:8080/ReeegEX/test.html'),
'http://127.0.0.1:8080/replaced/test.html', 'caseless regexp');
is(http_get_location('http://127.0.0.1:8080/regex_w_captures/test.html'),
'http://127.0.0.1:8080/captures/test.html', 'regexp w/captures');
is(http_get_refresh('http://127.0.0.1:8080/ReeegEX/test.html'),
'7; url=/replaced/test.html', 'caseless regexp (refresh)');
is(http_get_refresh('http://127.0.0.1:8080/regex_w_captures/test.html'),
'7; url=http://127.0.0.1:8080/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;
}