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

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