| #!/usr/bin/perl | |
| # (C) Maxim Dounin | |
| # (C) Valentin Bartenev | |
| # Tests for the proxy_cookie_domain and proxy_cookie_path directives. | |
| ############################################################################### | |
| 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/); | |
| $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 / { | |
| proxy_pass http://127.0.0.1:8081; | |
| proxy_cookie_domain www.example.org .example.com; | |
| proxy_cookie_domain .$server_name.com en.$server_name.org; | |
| proxy_cookie_domain ~^(.+)\.com$ $1.org; | |
| proxy_cookie_path /path/ /new/; | |
| proxy_cookie_path /$server_name/ /new/$server_name/; | |
| proxy_cookie_path ~^/regex/(.+)$ /$1; | |
| proxy_cookie_path ~*^/caseless/(.+)$ /$1; | |
| } | |
| } | |
| server { | |
| listen 127.0.0.1:8081; | |
| server_name localhost; | |
| location / { | |
| if ($arg_domain) { | |
| set $sc_domain "; Domain=$arg_domain"; | |
| } | |
| if ($arg_path) { | |
| set $sc_path "; Path=$arg_path"; | |
| } | |
| add_header Set-Cookie v=path=domain=$sc_domain$sc_path; | |
| return 200 OK; | |
| } | |
| } | |
| } | |
| EOF | |
| $t->run()->plan(8); | |
| ############################################################################### | |
| my $port = port(8080); | |
| is(http_get_set_cookie('/?domain=www.Example.org'), | |
| 'v=path=domain=; Domain=example.com', 'domain rewrite'); | |
| is(http_get_set_cookie('/?domain=.LocalHost.com'), | |
| 'v=path=domain=; Domain=.en.localhost.org', | |
| 'domain rewrite with vars'); | |
| is(http_get_set_cookie('/?domain=www.example.COM'), | |
| 'v=path=domain=; Domain=www.example.org', 'domain regex rewrite'); | |
| is(http_get_set_cookie('/?path=/path/test.html'), | |
| 'v=path=domain=; Path=/new/test.html', 'path rewrite'); | |
| is(http_get_set_cookie('/?path=/localhost/test.html'), | |
| 'v=path=domain=; Path=/new/localhost/test.html', | |
| 'path rewrite with vars'); | |
| is(http_get_set_cookie('/?path=/regex/test.html'), | |
| 'v=path=domain=; Path=/test.html', 'path regex rewrite'); | |
| is(http_get_set_cookie('/?path=/CASEless/test.html'), | |
| 'v=path=domain=; Path=/test.html', 'path caseless regex rewrite'); | |
| is(http_get_set_cookie('/?domain=www.example.org&path=/path/test.html'), | |
| 'v=path=domain=; Domain=example.com; Path=/new/test.html', | |
| 'domain and path rewrite'); | |
| ############################################################################### | |
| sub http_get_set_cookie { | |
| my ($uri) = @_; | |
| http_get("http://127.0.0.1:$port$uri") =~ /^Set-Cookie:\s(.+?)\x0d?$/mi; | |
| return $1; | |
| } | |
| ############################################################################### |