changeset 1014:61fbb879446a

Tests: geo delete tests.
author Andrey Zelenkov <zelenkov@nginx.com>
date Fri, 26 Aug 2016 16:31:29 +0300
parents 8f92d97cf40e
children 1d205c07ef59
files geo.t stream_geo.t
diffstat 2 files changed, 137 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/geo.t
+++ b/geo.t
@@ -49,12 +49,30 @@ http {
         0.0.0.0/0     world;
     }
 
+    geo $geo_delete {
+        127.0.0.0/8   loopback;
+        192.0.2.0/24  test;
+        0.0.0.0/0     world;
+        delete        127.0.0.0/8;
+    }
+
     geo $arg_ip $geo_from_arg {
         default       default;
         127.0.0.0/8   loopback;
         192.0.2.0/24  test;
     }
 
+    geo $arg_ip $geo_arg_ranges {
+        ranges;
+        default                default;
+
+        # ranges with two /16 networks
+        # the latter network has greater two least octets
+        # (see 1301a58b5dac for details)
+        10.10.3.0-10.11.2.255  foo;
+        delete                 10.10.3.0-10.11.2.255;
+    }
+
     geo $geo_proxy {
         default       default;
         proxy         127.0.0.1;
@@ -84,6 +102,24 @@ http {
         192.0.2.0-192.0.2.255  test;
     }
 
+    geo $geo_ranges_delete {
+        ranges;
+        default                default;
+        127.0.0.0-127.0.0.255  test;
+        127.0.0.1-127.0.0.1    loopback;
+        delete                 127.0.0.0-127.0.0.0;
+        delete                 127.0.0.2-127.0.0.255;
+        delete                 127.0.0.1-127.0.0.1;
+    }
+
+    # delete range with two /16
+    geo $geo_ranges_delete_2 {
+        ranges;
+        default              default;
+        127.0.0.0-127.1.0.0  loopback;
+        delete               127.0.0.0-127.1.0.0;
+    }
+
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
@@ -92,18 +128,26 @@ http {
             add_header X-IP   $remote_addr;
             add_header X-Geo  $geo;
             add_header X-Inc  $geo_include;
+            add_header X-Del  $geo_delete;
             add_header X-Ran  $geo_ranges;
             add_header X-RIn  $geo_ranges_include;
             add_header X-Arg  $geo_from_arg;
+            add_header X-ARa  $geo_arg_ranges;
             add_header X-XFF  $geo_proxy;
             add_header X-XFR  $geo_proxy_recursive;
         }
+
+        location /2 {
+            add_header X-RDe  $geo_ranges_delete;
+            add_header X-RD2  $geo_ranges_delete_2;
+        }
     }
 }
 
 EOF
 
 $t->write_file('1', '');
+$t->write_file('2', '');
 $t->write_file('geo.conf', '127.0.0.0/8  loopback;');
 $t->write_file('geo-ranges.conf', '127.0.0.0-127.255.255.255  loopback;');
 
@@ -112,19 +156,38 @@ EOF
 plan(skip_all => 'no 127.0.0.1 on host')
 	if http_get('/1') !~ /X-IP: 127.0.0.1/m;
 
-$t->plan(11);
+$t->plan(15);
 
 ###############################################################################
 
 my $r = http_get('/1');
 like($r, qr/^X-Geo: loopback/m, 'geo');
 like($r, qr/^X-Inc: loopback/m, 'geo include');
+like($r, qr/^X-Del: world/m, 'geo delete');
 like($r, qr/^X-Ran: loopback/m, 'geo ranges');
 like($r, qr/^X-RIn: loopback/m, 'geo ranges include');
 
+TODO: {
+todo_skip 'use-after-free', 2 unless $ENV{TEST_NGINX_UNSAFE}
+	or $t->has_version('1.11.4');
+
+like(http_get('/2'), qr/^X-RDe: default/m, 'geo ranges delete');
+like(http_get('/2'), qr/^X-RD2: default/m, 'geo ranges delete 2');
+
+}
+
 like(http_get('/1?ip=192.0.2.1'), qr/^X-Arg: test/m, 'geo from variable');
 like(http_get('/1?ip=10.0.0.1'), qr/^X-Arg: default/m, 'geo default');
 
+TODO: {
+todo_skip 'use-after-free', 1 unless $ENV{TEST_NGINX_UNSAFE}
+	or $t->has_version('1.11.4');
+
+like(http_get('/1?ip=10.11.2.1'), qr/^X-ARa: default/m,
+	'geo delete range from variable');
+
+}
+
 like(http_xff('192.0.2.1'), qr/^X-XFF: test/m, 'geo proxy');
 like(http_xff('10.0.0.1'), qr/^X-XFF: default/m, 'geo proxy default');
 like(http_xff('10.0.0.1, 192.0.2.1'), qr/^X-XFF: test/m, 'geo proxy long');
--- a/stream_geo.t
+++ b/stream_geo.t
@@ -49,6 +49,13 @@ stream {
         0.0.0.0/0     world;
     }
 
+    geo $geo_delete {
+        127.0.0.0/8   loopback;
+        192.0.2.0/24  test;
+        0.0.0.0/0     world;
+        delete        127.0.0.0/8;
+    }
+
     geo $remote_addr $geo_from_addr {
         127.0.0.0/8   loopback;
         192.0.2.0/24  test;
@@ -57,6 +64,7 @@ stream {
     map $server_port $var {
         %%PORT_8080%%  "192.0.2.1";
         %%PORT_8081%%  "10.0.0.1";
+        %%PORT_8085%%  "10.11.2.1";
     }
 
     geo $var $geo_from_var {
@@ -65,6 +73,17 @@ stream {
         192.0.2.0/24  test;
     }
 
+    geo $var $geo_var_ranges {
+        ranges;
+        default                default;
+
+        # ranges with two /16 networks
+        # the latter network has greater two least octets
+        # (see 1301a58b5dac for details)
+        10.10.3.0-10.11.2.255  foo;
+        delete                 10.10.3.0-10.11.2.255;
+    }
+
     geo $var $geo_world {
         127.0.0.0/8   loopback;
         192.0.2.0/24  test;
@@ -85,10 +104,29 @@ stream {
         192.0.2.0-192.0.2.255  test;
     }
 
+    geo $geo_ranges_delete {
+        ranges;
+        default                default;
+        127.0.0.0-127.0.0.255  test;
+        127.0.0.1-127.0.0.1    loopback;
+        delete                 127.0.0.0-127.0.0.0;
+        delete                 127.0.0.2-127.0.0.255;
+        delete                 127.0.0.1-127.0.0.1;
+    }
+
+    # delete range with two /16
+    geo $geo_ranges_delete_2 {
+        ranges;
+        default              default;
+        127.0.0.0-127.1.0.0  loopback;
+        delete               127.0.0.0-127.1.0.0;
+    }
+
     server {
         listen  127.0.0.1:8080;
         return  "geo:$geo
                  geo_include:$geo_include
+                 geo_delete:$geo_delete
                  geo_ranges:$geo_ranges
                  geo_ranges_include:$geo_ranges_include
                  geo_from_addr:$geo_from_addr
@@ -104,6 +142,21 @@ stream {
         listen  127.0.0.1:8082;
         return  $geo_world;
     }
+
+    server {
+        listen  127.0.0.1:8083;
+        return  $geo_ranges_delete;
+    }
+
+    server {
+        listen  127.0.0.1:8084;
+        return  $geo_ranges_delete_2;
+    }
+
+    server {
+        listen  127.0.0.1:8085;
+        return  $geo_var_ranges;
+    }
 }
 
 EOF
@@ -111,19 +164,38 @@ EOF
 $t->write_file('geo.conf', '127.0.0.0/8  loopback;');
 $t->write_file('geo-ranges.conf', '127.0.0.0-127.255.255.255  loopback;');
 
-$t->try_run('no stream geo')->plan(8);
+$t->try_run('no stream geo')->plan(12);
 
 ###############################################################################
 
 my %data = stream()->read() =~ /(\w+):(\w+)/g;
 is($data{geo}, 'loopback', 'geo');
 is($data{geo_include}, 'loopback', 'geo include');
+is($data{geo_delete}, 'world', 'geo delete');
 is($data{geo_ranges}, 'loopback', 'geo ranges');
 is($data{geo_ranges_include}, 'loopback', 'geo ranges include');
 
+TODO: {
+todo_skip 'use-after-free', 2 unless $ENV{TEST_NGINX_UNSAFE}
+	or $t->has_version('1.11.4');
+
+is(stream('127.0.0.1:' . port(8083))->read(), 'default', 'geo ranges delete');
+is(stream('127.0.0.1:' . port(8084))->read(), 'default', 'geo ranges delete 2');
+
+}
+
 is($data{geo_from_addr}, 'loopback', 'geo from addr');
 is($data{geo_from_var}, 'test', 'geo from var');
 
+TODO: {
+todo_skip 'use-after-free', 1 unless $ENV{TEST_NGINX_UNSAFE}
+	or $t->has_version('1.11.4');
+
+is(stream('127.0.0.1:' . port(8085))->read(), 'default',
+	'geo delete range from variable');
+
+}
+
 is(stream('127.0.0.1:' . port(8081))->read(), 'default', 'geo default');
 is(stream('127.0.0.1:' . port(8082))->read(), 'world', 'geo world');