Mercurial > hg > nginx-tests
diff limit-req.t @ 79:d5330d926fac
Tests: add test for limit_req not clearing write timeout on delay.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Sat, 28 Mar 2009 16:13:07 +0300 |
parents | c893908c1a44 |
children | 2dbe4ecdd254 |
line wrap: on
line diff
--- a/limit-req.t +++ b/limit-req.t @@ -21,7 +21,7 @@ use Test::Nginx; select STDERR; $| = 1; select STDOUT; $| = 1; -my $t = Test::Nginx->new()->plan(2); +my $t = Test::Nginx->new()->plan(3); $t->write_file_expand('nginx.conf', <<'EOF'); @@ -39,6 +39,7 @@ http { proxy_temp_path %%TESTDIR%%/proxy_temp; limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m; + limit_req_zone $binary_remote_addr zone=long:10m rate=1r/m; server { listen 127.0.0.1:8080; @@ -46,12 +47,16 @@ http { location / { limit_req zone=one burst=1 nodelay; } + location /long { + limit_req zone=long burst=5; + } } } EOF $t->write_file('test1.html', 'XtestX'); +$t->write_file('long.html', "1234567890\n" x (1 << 16)); $t->run(); ############################################################################### @@ -60,4 +65,17 @@ like(http_get('/test1.html'), qr/^HTTP\/ http_get('/test1.html'); like(http_get('/test1.html'), qr/^HTTP\/1.. 503 /m, 'request rejected'); +TODO: { +local $TODO = "patch under review"; + +# Second request will be delayed by limit_req, make sure it isn't truncated. +# The bug only manifests itself if buffer will be filled, so sleep for a while +# before reading response. + +my $l1 = length(http_get('/long.html')); +my $l2 = length(http_get('/long.html', sleep => 1.1)); +is($l2, $l1, 'delayed big request not truncated'); + +} + ###############################################################################