view limit_req_dry_run.t @ 1530:c1cdd7c73a73

Tests: $limit_req_status tests.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 06 Nov 2019 20:59:44 +0300
parents 723c7e08eec7
children 65eb942993ad
line wrap: on
line source

#!/usr/bin/perl

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

# Tests for nginx limit_req module, limit_req_dry_run directive.

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

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 limit_req/);

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

%%TEST_GLOBALS%%

daemon off;

events {
}

http {
    %%TEST_GLOBALS_HTTP%%

    limit_req_zone  $binary_remote_addr  zone=one:1m   rate=1r/m;

    server {
        listen       127.0.0.1:8080;
        server_name  localhost;

        limit_req_dry_run  on;
        add_header X-Status $limit_req_status always;

        location /delay {
            limit_req    zone=one  burst=2;
        }

        location /reject {
            limit_req    zone=one;
        }

        location /reject/off {
            limit_req    zone=one;

            limit_req_dry_run off;
        }
    }
}

EOF

$t->write_file('delay', 'SEE-THIS');
$t->write_file('reject', 'SEE-THIS');
$t->try_run('no limit_req_dry_run/limit_req_status')->plan(6);

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

like(http_get('/delay'), qr/ 200 .*PASSED/ms, 'dry run - passed');
like(http_get('/delay'), qr/ 200 .*DELAYED_DRY_RUN/ms, 'dry run - delayed');
like(http_get('/reject'), qr/ 200 .*REJECTED_DRY_RUN/ms, 'dry run - rejected');

like(http_get('/reject/off'), qr/ 503 .*REJECTED/ms, 'dry run off - rejected');

$t->stop();

like($t->read_file('error.log'), qr/delaying request, dry/, 'log - delay');
like($t->read_file('error.log'), qr/limiting requests, dry/, 'log - reject');

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