view stream_upstream_zone.t @ 1629:a1874249496d

Tests: reworked try_run() to redirect stderr. Previously, if TEST_NGINX_VERBOSE was set, the code tried to use compiled-in error log. While this works in typical development cases when --error-log-path is relative to prefix, it is unlikely to work correctly if --error-log-path is absolute. The recently introduced '-e' command line option might be used to fix this. On the other hand, a more compatible solution would be to redirect stderr to a file instead.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 30 Nov 2020 20:53:11 +0300
parents f3ba4c74de31
children
line wrap: on
line source

#!/usr/bin/perl

# (C) Sergey Kandaurov
# (C) Nginx, Inc.

# Stream tests for upstream zone.

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

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_upstream_zone/)
	->plan(2)->write_file_expand('nginx.conf', <<'EOF');

%%TEST_GLOBALS%%

daemon off;

events {
}

stream {
    %%TEST_GLOBALS_STREAM%%

    log_format test $upstream_addr;

    upstream u {
        zone u 1m;
        server 127.0.0.1:8081;
    }

    upstream u2 {
        zone u;
        server 127.0.0.1:8081 down;
        server 127.0.0.1:8081 backup down;
    }

    server {
        listen      127.0.0.1:8081;
        return      OK;
    }

    server {
        listen      127.0.0.1:8091;
        proxy_pass  u;

        access_log %%TESTDIR%%/access1.log test;
    }

    server {
        listen      127.0.0.1:8092;
        proxy_pass  u2;

        access_log %%TESTDIR%%/access2.log test;
    }
}

EOF

$t->write_file('index.html', '');
$t->run();

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

my $p = port(8081);

stream('127.0.0.1:' . port(8091))->read();
stream("127.0.0.1:" . port(8092))->read();

$t->stop();

is($t->read_file('access1.log'), "127.0.0.1:$p\n", 'upstream name');
is($t->read_file('access2.log'), "u2\n", 'no live upstreams');

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