# HG changeset patch # User Sergey Kandaurov # Date 1468405533 -10800 # Node ID 04cb1849005aa165ae1325a9995f41974fd445a3 # Parent 6abe7be6d2c12584eadeecae639787b09352359e Tests: basic tests for stream geo module. diff --git a/lib/Test/Nginx.pm b/lib/Test/Nginx.pm --- a/lib/Test/Nginx.pm +++ b/lib/Test/Nginx.pm @@ -166,6 +166,8 @@ sub has_module($) { stream => '--with-stream((?!\S)|=dynamic)', stream_access => '(?s)^(?!.*--without-stream_access_module)', + stream_geo + => '(?s)^(?!.*--without-stream_geo_module)', stream_limit_conn => '(?s)^(?!.*--without-stream_limit_conn_module)', stream_map diff --git a/stream_geo.t b/stream_geo.t new file mode 100644 --- /dev/null +++ b/stream_geo.t @@ -0,0 +1,106 @@ +#!/usr/bin/perl + +# (C) Maxim Dounin +# (C) Sergey Kandaurov +# (C) Nginx, Inc. + +# Tests for stream geo module. + +############################################################################### + +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/); + +$t->write_file_expand('nginx.conf', <<'EOF'); + +%%TEST_GLOBALS%% + +daemon off; + +events { +} + +stream { + geo $geo { + 127.0.0.0/8 loopback; + 192.0.2.0/24 test; + 0.0.0.0/0 world; + } + + geo $remote_addr $geo_from_addr { + 127.0.0.0/8 loopback; + 192.0.2.0/24 test; + } + + map $server_port $var { + %%PORT_8080%% "192.0.2.1"; + %%PORT_8081%% "10.0.0.1"; + } + + geo $var $geo_from_var { + default default; + 127.0.0.0/8 loopback; + 192.0.2.0/24 test; + } + + geo $var $geo_world { + 127.0.0.0/8 loopback; + 192.0.2.0/24 test; + 0.0.0.0/0 world; + } + + geo $geo_ranges { + ranges; + default default; + 127.0.0.0-127.255.255.255 loopback; + 192.0.2.0-192.0.2.255 test; + } + + server { + listen 127.0.0.1:8080; + return $geo:$geo_from_addr:$geo_from_var:$geo_ranges; + } + + server { + listen 127.0.0.1:8081; + return $geo_from_var; + } + + server { + listen 127.0.0.1:8082; + return $geo_world; + } +} + +EOF + +$t->try_run('no stream geo'); +$t->plan(6); + +############################################################################### + +my @data = split /:/, stream()->read(); +is($data[0], 'loopback', 'geo'); +is($data[1], 'loopback', 'geo from addr'); +is($data[2], 'test', 'geo from var'); +is($data[3], 'loopback', 'geo ranges'); + +is(stream('127.0.0.1:' . port(8081))->read(), 'default', 'geo default'); +is(stream('127.0.0.1:' . port(8082))->read(), 'world', 'geo world'); + +###############################################################################