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 ###############################################################################