Mercurial > hg > nginx-tests
comparison 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 |
comparison
equal
deleted
inserted
replaced
78:c893908c1a44 | 79:d5330d926fac |
---|---|
19 ############################################################################### | 19 ############################################################################### |
20 | 20 |
21 select STDERR; $| = 1; | 21 select STDERR; $| = 1; |
22 select STDOUT; $| = 1; | 22 select STDOUT; $| = 1; |
23 | 23 |
24 my $t = Test::Nginx->new()->plan(2); | 24 my $t = Test::Nginx->new()->plan(3); |
25 | 25 |
26 $t->write_file_expand('nginx.conf', <<'EOF'); | 26 $t->write_file_expand('nginx.conf', <<'EOF'); |
27 | 27 |
28 master_process off; | 28 master_process off; |
29 daemon off; | 29 daemon off; |
37 client_body_temp_path %%TESTDIR%%/client_body_temp; | 37 client_body_temp_path %%TESTDIR%%/client_body_temp; |
38 fastcgi_temp_path %%TESTDIR%%/fastcgi_temp; | 38 fastcgi_temp_path %%TESTDIR%%/fastcgi_temp; |
39 proxy_temp_path %%TESTDIR%%/proxy_temp; | 39 proxy_temp_path %%TESTDIR%%/proxy_temp; |
40 | 40 |
41 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m; | 41 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m; |
42 limit_req_zone $binary_remote_addr zone=long:10m rate=1r/m; | |
42 | 43 |
43 server { | 44 server { |
44 listen 127.0.0.1:8080; | 45 listen 127.0.0.1:8080; |
45 server_name localhost; | 46 server_name localhost; |
46 location / { | 47 location / { |
47 limit_req zone=one burst=1 nodelay; | 48 limit_req zone=one burst=1 nodelay; |
48 } | 49 } |
50 location /long { | |
51 limit_req zone=long burst=5; | |
52 } | |
49 } | 53 } |
50 } | 54 } |
51 | 55 |
52 EOF | 56 EOF |
53 | 57 |
54 $t->write_file('test1.html', 'XtestX'); | 58 $t->write_file('test1.html', 'XtestX'); |
59 $t->write_file('long.html', "1234567890\n" x (1 << 16)); | |
55 $t->run(); | 60 $t->run(); |
56 | 61 |
57 ############################################################################### | 62 ############################################################################### |
58 | 63 |
59 like(http_get('/test1.html'), qr/^HTTP\/1.. 200 /m, 'request'); | 64 like(http_get('/test1.html'), qr/^HTTP\/1.. 200 /m, 'request'); |
60 http_get('/test1.html'); | 65 http_get('/test1.html'); |
61 like(http_get('/test1.html'), qr/^HTTP\/1.. 503 /m, 'request rejected'); | 66 like(http_get('/test1.html'), qr/^HTTP\/1.. 503 /m, 'request rejected'); |
62 | 67 |
68 TODO: { | |
69 local $TODO = "patch under review"; | |
70 | |
71 # Second request will be delayed by limit_req, make sure it isn't truncated. | |
72 # The bug only manifests itself if buffer will be filled, so sleep for a while | |
73 # before reading response. | |
74 | |
75 my $l1 = length(http_get('/long.html')); | |
76 my $l2 = length(http_get('/long.html', sleep => 1.1)); | |
77 is($l2, $l1, 'delayed big request not truncated'); | |
78 | |
79 } | |
80 | |
63 ############################################################################### | 81 ############################################################################### |