blob: 5fde7151e7106f807a6bcb664a80a6f56a1a5979 [file] [log] [blame]
#!/usr/bin/perl
# (C) Sergey Kandaurov
# (C) Nginx, Inc.
# Tests for the proxy_limit_rate 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 proxy upstream_keepalive/)->plan(4);
$t->write_file_expand('nginx.conf', <<'EOF');
%%TEST_GLOBALS%%
daemon off;
events {
}
http {
%%TEST_GLOBALS_HTTP%%
upstream u {
server 127.0.0.1:8080;
keepalive 1;
}
server {
listen 127.0.0.1:8080;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8080/data;
proxy_buffer_size 4k;
proxy_limit_rate 20000;
add_header X-Msec $msec;
}
location /keepalive {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://u/data;
proxy_buffer_size 4k;
proxy_limit_rate 20000;
add_header X-Msec $msec;
}
location /data {
}
}
}
EOF
$t->write_file('data', 'X' x 40000);
$t->run();
###############################################################################
my $r = http_get('/');
my ($t1) = $r =~ /X-Msec: (\d+)/;
my $diff = time() - $t1;
# four chunks are split with three 1s delays
cmp_ok($diff, '>=', 1, 'proxy_limit_rate');
like($r, qr/^(XXXXXXXXXX){4000}\x0d?\x0a?$/m, 'response body');
# in case keepalive connection was saved with the delayed flag,
# the read timer used to be a delay timer in the next request
like(http_get('/keepalive'), qr/200 OK/, 'keepalive');
like(http_get('/keepalive'), qr/200 OK/, 'keepalive 2');
###############################################################################