# HG changeset patch # User Andrey Zelenkov # Date 1472218342 -10800 # Node ID 2120f5808c322f37273f9ed3b7b9c15dfe8f6dc1 # Parent 82bdc838ba94e727b820205e7c6f4913229a83b5 Tests: added stream geo IPv6 tests. diff --git a/stream_geo_ipv6.t b/stream_geo_ipv6.t new file mode 100644 --- /dev/null +++ b/stream_geo_ipv6.t @@ -0,0 +1,103 @@ +#!/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/) + ->has(qw/ipv6/)->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 and/or inet6 support')->plan(6); + +############################################################################### + +my %data = stream()->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'); + +###############################################################################