|  | #!/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'); | 
|  |  | 
|  | ############################################################################### |