| #!/usr/bin/perl | |
| # (C) Maxim Dounin | |
| # (C) Andrey Zelenkov | |
| # (C) Nginx, Inc. | |
| # Tests for map module. | |
| ############################################################################### | |
| 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 map rewrite/)->plan(19); | |
| $t->write_file_expand('nginx.conf', <<'EOF'); | |
| %%TEST_GLOBALS%% | |
| daemon off; | |
| events { | |
| } | |
| http { | |
| %%TEST_GLOBALS_HTTP%% | |
| map $args $x { | |
| default 0; | |
| foo bar; | |
| foo2 bar; | |
| } | |
| map $args $y { | |
| hostnames; | |
| default 0; | |
| example.com foo; | |
| example.* right-wildcard; | |
| *.example.com left-wildcard; | |
| .dot.example.com special-wildcard; | |
| ~^REGEX.EXAMPLE\.ORG$ regex-sensitive; | |
| ~*^www.regex.example\.org$ regex-insensitive; | |
| \include include; | |
| server $server_name; | |
| var $z; | |
| } | |
| map $args $z { | |
| default 0; | |
| var baz; | |
| include map.conf; | |
| } | |
| server { | |
| listen 127.0.0.1:8080; | |
| server_name localhost; | |
| location / { | |
| add_header X-Foo "x:$x y:$y\n"; | |
| return 204; | |
| } | |
| location /z { | |
| add_header X-Foo "z:$z\n"; | |
| return 204; | |
| } | |
| } | |
| } | |
| EOF | |
| $t->write_file('map.conf', "foo bar;"); | |
| $t->run(); | |
| ############################################################################### | |
| like(http_get('/?1'), qr/x:0 y:0/, 'map default'); | |
| like(http_get('/?foo'), qr/x:bar y:0/, 'map foo bar'); | |
| like(http_get('/?foo2'), qr/x:bar y:0/, 'map foo bar key'); | |
| like(http_get('/?example.com'), qr/x:0 y:foo/, 'map example.com foo'); | |
| like(http_get('/?EXAMPLE.COM'), qr/x:0 y:foo/, 'map EXAMPLE.COM foo'); | |
| like(http_get('/?example.com.'), qr/x:0 y:foo/, 'map example.com. foo'); | |
| like(http_get('/?example.org'), qr/x:0 y:right-wildcard/, | |
| 'map example.org wildcard'); | |
| like(http_get('/?foo.example.com'), qr/x:0 y:left-wildcard/, | |
| 'map foo.example.com wildcard'); | |
| like(http_get('/?foo.example.com.'), qr/x:0 y:left-wildcard/, | |
| 'map foo.example.com. wildcard'); | |
| like(http_get('/?dot.example.com'), qr/x:0 y:special-wildcard/, | |
| 'map dot.example.com special wildcard'); | |
| like(http_get('/?www.dot.example.com'), qr/x:0 y:special-wildcard/, | |
| 'map www.dot.example.com special wildcard'); | |
| like(http_get('/?REGEX.EXAMPLE.ORG'), qr/x:0 y:regex-sensitive/, | |
| 'map REGEX.EXAMPLE.ORG'); | |
| like(http_get('/?regex.example.org'), qr/x:0 y:0/, | |
| 'map regex.example.org'); | |
| like(http_get('/?www.regex.example.org'), qr/x:0 y:regex-insensitive/, | |
| 'map www.regex.example.org insensitive'); | |
| like(http_get('/?WWW.REGEX.EXAMPLE.ORG'), qr/x:0 y:regex-insensitive/, | |
| 'map WWW.REGEX.EXAMPLE.ORG insensitive'); | |
| like(http_get('/?include'), qr/x:0 y:include/, 'map special parameter'); | |
| like(http_get('/?server'), qr/x:0 y:localhost/, 'map server_name variable'); | |
| like(http_get('/?var'), qr/x:0 y:baz/, 'map z variable'); | |
| like(http_get('/z?foo'), qr/z:bar/, 'include foo bar'); | |
| ############################################################################### |