#!/usr/bin/perl

# (C) Maxim Dounin

# Tests for nginx geo module.

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

use warnings;
use strict;

use Test::More;

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

use lib 'lib';
use Test::Nginx;

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

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

my $t = Test::Nginx->new()->has(qw/http geo/);

$t->write_file_expand('nginx.conf', <<'EOF');

%%TEST_GLOBALS%%

daemon off;

events {
}

http {
    %%TEST_GLOBALS_HTTP%%

    geo $geo {
        127.0.0.0/8  loopback;
        192.0.2.0/24 test;
        0.0.0.0/0    world;
    }

    geo $arg_ip $geo_from_arg {
        default      default;

        127.0.0.0/8  loopback;
        192.0.2.0/24 test;
    }

    geo $geo_proxy {
        default      default;
        proxy        127.0.0.1;
        127.0.0.0/8  loopback;
        192.0.2.0/24 test;
    }

    geo $geo_proxy_recursive {
        default      default;
        proxy        127.0.0.1;
        127.0.0.0/8  loopback;
        192.0.2.0/24 test;
        proxy_recursive;
    }

    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:%%PORT_0%%;
        server_name  localhost;

        location / {
            add_header X-IP  $remote_addr;
            add_header X-Geo $geo;
            add_header X-Arg $geo_from_arg;
            add_header X-XFF $geo_proxy;
            add_header X-XFR $geo_proxy_recursive;
            add_header X-Ran $geo_ranges;
        }
    }
}

EOF

$t->write_file('1', '');
$t->run();

plan(skip_all => 'no 127.0.0.1 on host')
	if http_get('/1') !~ /X-IP: 127.0.0.1/m;

$t->plan(9);

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

like(http_get('/1'), qr/^X-Geo: loopback/m, 'geo');

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');

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');

like(http_xff('192.0.2.1, 127.0.0.1'), qr/^X-XFF: loopback/m,
	'geo proxy_recursive off');
like(http_xff('192.0.2.1, 127.0.0.1'), qr/^X-XFR: test/m,
	'geo proxy_recursive on');

like(http_get('/1'), qr/^X-Ran: loopback/m, 'geo ranges');

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

sub http_xff {
	my ($xff) = @_;
	return http(<<EOF);
GET /1 HTTP/1.0
Host: localhost
X-Forwarded-For: $xff

EOF
}

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