#!/usr/bin/perl

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

# Tests for limit_conn_dry_run directive, limit_conn_status variable.

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

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_limit_conn http/);

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

%%TEST_GLOBALS%%

daemon off;

events {
}

stream {
    limit_conn_zone  $binary_remote_addr  zone=zone:1m;

    log_format test $server_port:$limit_conn_status;
    access_log %%TESTDIR%%/test.log test;

    server {
        listen      127.0.0.1:8080;
        proxy_pass  127.0.0.1:8084;
        limit_conn  zone 1;

        proxy_timeout 5s;
    }

    server {
        listen      127.0.0.1:8081;
        proxy_pass  127.0.0.1:8084;
        limit_conn  zone 1;
    }

    server {
        listen      127.0.0.1:8082;
        proxy_pass  127.0.0.1:8084;
        limit_conn  zone 1;

        limit_conn_dry_run on;
    }

    server {
        listen      127.0.0.1:8083;
        proxy_pass  127.0.0.1:8084;
    }
}

http {
    %%TEST_GLOBALS_HTTP%%

    server {
        listen       127.0.0.1:8084;
        server_name  localhost;

        location / { }
    }
}

EOF

$t->write_file('index.html', 'OK');
$t->try_run('no limit_conn_dry_run/limit_conn_status')->plan(9);

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

my ($p, $p1, $p2, $p3) = (port(8080), port(8081), port(8082), port(8083));

is(stream("127.0.0.1:$p")->io("GET /\n"), 'OK', 'passed');

my $s = stream('127.0.0.1:' . port(8080));
$s->write("GET");

is(stream("127.0.0.1:$p1")->io("GET /\n"), '', 'rejected');
is(stream("127.0.0.1:$p2")->io("GET /\n"), 'OK', 'rejected dry run');
is(stream("127.0.0.1:$p3")->io("GET /\n"), 'OK', 'no limit');

undef $s;

$t->stop();

like($t->read_file('error.log'), qr/limiting connections, dry/, 'log dry run');
like($t->read_file('test.log'), qr|$p:PASSED|, 'log passed');
like($t->read_file('test.log'), qr|$p1:REJECTED$|m, 'log rejected');
like($t->read_file('test.log'), qr|$p2:REJECTED_DRY_RUN|, 'log rejected dry');
like($t->read_file('test.log'), qr|$p3:-|, 'log not found');

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