#!/usr/bin/perl

# (C) Andrey Zelenkov
# (C) Nginx, Inc.

# Stream tests for geo module with IPv6.

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

use warnings;
use strict;

use Test::More;

BEGIN { use FindBin; chdir($FindBin::Bin); }

use lib 'lib';
use Test::Nginx;
use Test::Nginx::Stream qw/ stream /;

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

select STDERR; $| = 1;
select STDOUT; $| = 1;

my $t = Test::Nginx->new()->has(qw/stream stream_return stream_map stream_geo/)
	->write_file_expand('nginx.conf', <<'EOF');

%%TEST_GLOBALS%%

daemon off;

events {
}

stream {
    geo $geo {
        ::1/128         loopback;
        2001:0db8::/32  test;
        ::/0            world;
    }

    geo $geo_delete {
        ::1/128         loopback;
        2001:0db8::/32  test;
        ::/0            world;
        delete          ::1/128;
    }

    map $server_port $var {
        %%PORT_8080%%  "::1";
        %%PORT_8081%%  "::ffff:192.0.2.1";
    }

    geo $var $geo_var {
        default    default;
        192.0.2.1  test;
    }

    geo $var $geo_var_ranges {
        ranges;
        default              default;
        127.0.0.1-127.0.0.2  loopback;
        192.0.2.0-192.0.2.1  test;
    }

    server {
        listen      127.0.0.1:8080;
        proxy_pass  [::1]:%%PORT_8080%%;
    }

    server {
        listen  [::1]:%%PORT_8080%%;
        return  "geo:$geo
                 geo_delete:$geo_delete
                 geo_var:$geo_var
                 geo_var_ranges:$geo_var_ranges";
    }

    server {
        listen  127.0.0.1:8081;
        return  "geo_var:$geo_var
                 geo_var_ranges:$geo_var_ranges";
    }
}

EOF

$t->try_run('no inet6 support')->plan(6);

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

my %data = stream('127.0.0.1:' . port(8080))->read() =~ /(\w+):(\w+)/g;
is($data{geo}, 'loopback', 'geo ipv6');
is($data{geo_delete}, 'world', 'geo ipv6 delete');
is($data{geo_var}, 'default', 'geo ipv6 from variable');
is($data{geo_var_ranges}, 'default', 'geo ipv6 from variable range');

%data = stream('127.0.0.1:' . port(8081))->read() =~ /(\w+):(\w+)/g;
is($data{geo_var}, 'test', 'geo ipv6 ipv4-mapped from variable');
is($data{geo_var_ranges}, 'test', 'geo ipv6 ipv4-mapped from variable range');

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