view stream_geo_ipv6.t @ 1619:436d0ffc2ea3

Tests: correctly shutdown ssl for reproducible session reuse tests. Previously, session reuse tests in stream_ssl_certificate.t were prone to testing errors, since the client doesn't write any application data before closing a connection, which is done so to pass tests on win32. In this case, the server may happened to get an unexpected eof meaning that it will abandon that session. This is specific to stream testing pattern, changes to ssl_certificate.t are applied too for consistency. This is also specific to SSL_R_UNEXPECTED_EOF_WHILE_READING, which is implemented in OpenSSL 3.0.0.
author Sergey Kandaurov <pluknet@nginx.com>
date Mon, 23 Nov 2020 22:46:06 +0000
parents f3ba4c74de31
children
line wrap: on
line source

#!/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 {
    %%TEST_GLOBALS_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 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');

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