Mercurial > hg > nginx-tests
annotate limit_conn_complex.t @ 1932:b68471aee5ad
Tests: improved test for a stream initiating QUIC path migration.
Previously, the test mostly passed due to a push timer scheduled for an
unrelated delayed ACK, and the new path had enough data received to send
response back when the push timer fired. Otherwise, the test could fail
due to unvalidated address. Now it is fixed to perform path validation.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 21 Aug 2023 17:10:57 +0400 |
parents | 196d33c2bb45 |
children |
rev | line source |
---|---|
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # limit_req based tests for limit_conn module with complex keys. |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 use IO::Select; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 BEGIN { use FindBin; chdir($FindBin::Bin); } |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use lib 'lib'; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 use Test::Nginx; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 ############################################################################### |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 select STDERR; $| = 1; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 select STDOUT; $| = 1; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 |
1020
196d33c2bb45
Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
974
diff
changeset
|
27 my $t = Test::Nginx->new()->has(qw/http proxy limit_conn limit_req/) |
574
2cd00179f4b2
Tests: has_feature() introduced in Test::Nginx.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
28 ->plan(4); |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 $t->write_file_expand('nginx.conf', <<'EOF'); |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 %%TEST_GLOBALS%% |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 daemon off; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 events { |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 } |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 http { |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 %%TEST_GLOBALS_HTTP%% |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 |
826
64abcc611242
Tests: adjusted limit_conn_complex.t test timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
792
diff
changeset
|
42 limit_req_zone $binary_remote_addr$arg_r zone=req:1m rate=1r/m; |
64abcc611242
Tests: adjusted limit_conn_complex.t test timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
792
diff
changeset
|
43 limit_req_zone $binary_remote_addr zone=re2:1m rate=1r/m; |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 limit_conn_zone $binary_remote_addr$arg_c zone=conn:1m; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
968
diff
changeset
|
47 listen 127.0.0.1:8080; |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 server_name localhost; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 location / { |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 limit_conn conn 1; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 } |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 location /w { |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 limit_conn conn 1; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
968
diff
changeset
|
56 proxy_pass http://127.0.0.1:8080/req2; |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 } |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 location /req { |
477
c94fc8e41f5f
Tests: adjusted limit_conn_complex.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
475
diff
changeset
|
60 limit_req zone=req burst=2; |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 } |
725
e5b1495299bd
Tests: made sure to test limit_conn with rate limited request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
62 |
e5b1495299bd
Tests: made sure to test limit_conn with rate limited request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
63 location /req2 { |
e5b1495299bd
Tests: made sure to test limit_conn with rate limited request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
64 limit_req zone=re2 burst=2; |
e5b1495299bd
Tests: made sure to test limit_conn with rate limited request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
65 } |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 } |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 } |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 EOF |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 |
968
ce687b25ea49
Tests: avoid spurious timeout in limit_conn_complex.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
952
diff
changeset
|
71 $t->write_file('req', ''); |
568
907e89fba9c3
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
477
diff
changeset
|
72 $t->run(); |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 ############################################################################### |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 my $s; |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
77 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
78 # charge limit_req |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
79 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
80 http_get('/req'); |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
82 # limit_req tests |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 $s = http_get('/req', start => 1); |
826
64abcc611242
Tests: adjusted limit_conn_complex.t test timeouts.
Sergey Kandaurov <pluknet@nginx.com>
parents:
792
diff
changeset
|
85 ok(!IO::Select->new($s)->can_read(1), 'limit_req same key'); |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
86 |
968
ce687b25ea49
Tests: avoid spurious timeout in limit_conn_complex.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
952
diff
changeset
|
87 like(http_get('/req?r=2'), qr/200 OK/, 'limit_req different key'); |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 # limit_conn tests |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
90 |
725
e5b1495299bd
Tests: made sure to test limit_conn with rate limited request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
91 http_get('/req2'); |
e5b1495299bd
Tests: made sure to test limit_conn with rate limited request.
Sergey Kandaurov <pluknet@nginx.com>
parents:
574
diff
changeset
|
92 |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 $s = http_get('/w', start => 1); |
477
c94fc8e41f5f
Tests: adjusted limit_conn_complex.t tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
475
diff
changeset
|
94 select undef, undef, undef, 0.2; |
475
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
95 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
96 like(http_get('/'), qr/^HTTP\/1.. 503 /, 'limit_conn same key'); |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 unlike(http_get('/?c=2'), qr/^HTTP\/1.. 503 /, 'limit_conn different key'); |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 |
c872b2c9645f
Tests: tests for limit_conn and limit_req with complex value.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
99 ############################################################################### |