Mercurial > hg > nginx-tests
annotate sub_filter.t @ 572:ca54b445d982
Tests: masked nginx bug in proxy next upstream.
When iterating through several next upstreams per a worker cycle,
a previously reported event about upstream connection error may
be improperly applied to the next upstream, thus leading to the
invalid connection error. E.g., in kqueue, where the problem is
visible, this is caused by "ev->instance" that does not tolerate
more than one next upstream at once, and kevents placed on the
kqueue separately for read and write events.
The change is to limit test case to the only one next upstream.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 14 May 2015 11:54:24 +0300 |
parents | 907e89fba9c3 |
children | eea2b0158b51 |
rev | line source |
---|---|
304 | 1 #!/usr/bin/perl |
2 | |
3 # (C) Maxim Dounin | |
4 | |
5 # Tests for sub filter. | |
6 | |
7 ############################################################################### | |
8 | |
9 use warnings; | |
10 use strict; | |
11 | |
12 use Test::More; | |
13 | |
14 BEGIN { use FindBin; chdir($FindBin::Bin); } | |
15 | |
16 use lib 'lib'; | |
17 use Test::Nginx; | |
18 | |
19 ############################################################################### | |
20 | |
21 select STDERR; $| = 1; | |
22 select STDOUT; $| = 1; | |
23 | |
452
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
24 my $t = Test::Nginx->new()->has(qw/http rewrite sub/)->plan(22) |
304 | 25 ->write_file_expand('nginx.conf', <<'EOF'); |
26 | |
27 %%TEST_GLOBALS%% | |
28 | |
29 daemon off; | |
30 | |
31 events { | |
32 } | |
33 | |
34 http { | |
35 %%TEST_GLOBALS_HTTP%% | |
36 | |
37 server { | |
38 listen 127.0.0.1:8080; | |
39 server_name localhost; | |
40 | |
41 sub_filter_types *; | |
42 sub_filter foo bar; | |
43 | |
44 location / { | |
45 } | |
46 | |
47 location /once { | |
48 return 200 $arg_b; | |
49 } | |
50 | |
51 location /many { | |
52 sub_filter_once off; | |
53 return 200 $arg_b; | |
54 } | |
55 | |
56 location /complex { | |
57 sub_filter abac _replaced; | |
58 return 200 $arg_b; | |
59 } | |
60 | |
61 location /complex2 { | |
62 sub_filter ababX _replaced; | |
63 return 200 $arg_b; | |
64 } | |
65 | |
66 location /complex3 { | |
67 sub_filter aab _replaced; | |
68 return 200 $arg_b; | |
69 } | |
452
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
70 |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
71 location /single { |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
72 sub_filter A B; |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
73 return 200 $arg_b; |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
74 } |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
75 |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
76 location /single/many { |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
77 sub_filter A B; |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
78 sub_filter_once off; |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
79 return 200 $arg_b; |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
80 } |
304 | 81 } |
82 } | |
83 | |
84 EOF | |
85 | |
86 $t->write_file('foo.html', 'foo'); | |
87 $t->write_file('foofoo.html', 'foofoo'); | |
88 $t->run(); | |
89 | |
90 ############################################################################### | |
91 | |
92 like(http_get('/foo.html'), qr/bar/, 'sub_filter'); | |
93 like(http_get('/foofoo.html'), qr/barfoo/, 'once default'); | |
94 | |
95 like(http_get('/once?b=foofoo'), qr/barfoo/, 'once'); | |
96 like(http_get('/many?b=foofoo'), qr/barbar/, 'many'); | |
97 like(http_get('/many?b=fo'), qr/fo/, 'incomplete'); | |
98 like(http_get('/many?b=foofo'), qr/barfo/, 'incomplete long'); | |
99 | |
100 like(http_get('/complex?b=abac'), qr/_replaced/, 'complex'); | |
101 like(http_get('/complex?b=abaabac'), qr/aba_replaced/, 'complex 1st char'); | |
102 like(http_get('/complex?b=ababac'), qr/replaced/, 'complex 2nd char'); | |
103 like(http_get('/complex2?b=ababX'), qr/_replaced/, 'complex2'); | |
104 like(http_get('/complex2?b=abababX'), qr/ab_replaced/, 'complex2 long'); | |
105 like(http_get('/complex3?b=aab'), qr/_replaced/, 'complex3 aab in aab'); | |
106 like(http_get('/complex3?b=aaab'), qr/a_replaced/, 'complex3 aab in aaab'); | |
107 like(http_get('/complex3?b=aaaab'), qr/aa_replaced/, 'complex3 aab in aaaab'); | |
108 | |
452
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
109 like(http_get('/single?b=A'), qr/B/, 'single only'); |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
110 like(http_get('/single?b=AA'), qr/BA/, 'single begin'); |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
111 like(http_get('/single?b=CAAC'), qr/CBAC/, 'single middle'); |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
112 like(http_get('/single?b=CA'), qr/CB/, 'single end'); |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
113 |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
114 like(http_get('/single/many?b=A'), qr/B/, 'single many only'); |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
115 like(http_get('/single/many?b=AA'), qr/BB/, 'single many begin'); |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
116 like(http_get('/single/many?b=CAAC'), qr/CBBC/, 'single many middle'); |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
117 like(http_get('/single/many?b=CA'), qr/CB/, 'single many end'); |
4465c1cf6f75
Tests: sub filter tests for single character matching.
Sergey Kandaurov <pluknet@nginx.com>
parents:
397
diff
changeset
|
118 |
304 | 119 ############################################################################### |