view map.t @ 1260:eadd24ccfda1

Tests: postponed startup in certain ssl certificate tests on win32. At least, some win32 hosts exhibit a round-off error or some such in the notBefore field of the certificate generated before starting nginx, such that it can be set to the value one second ahead of the current time. This manifests in spurious test failures due to certificate verify error with a failure reason "certificate is not yet valid".
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 12 Dec 2017 12:53:53 +0300
parents 882267679006
children
line wrap: on
line source

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

###############################################################################