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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
304
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for sub filter.
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use lib 'lib';
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use Test::Nginx;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 ###############################################################################
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 select STDERR; $| = 1;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDOUT; $| = 1;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
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
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 ->write_file_expand('nginx.conf', <<'EOF');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 %%TEST_GLOBALS%%
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 daemon off;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 events {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 http {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 %%TEST_GLOBALS_HTTP%%
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 server {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 listen 127.0.0.1:8080;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 server_name localhost;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 sub_filter_types *;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 sub_filter foo bar;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 location / {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 location /once {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 return 200 $arg_b;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 location /many {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 sub_filter_once off;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 return 200 $arg_b;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 location /complex {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 sub_filter abac _replaced;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 return 200 $arg_b;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 location /complex2 {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 sub_filter ababX _replaced;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 return 200 $arg_b;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 location /complex3 {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 sub_filter aab _replaced;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 return 200 $arg_b;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
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
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 EOF
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 $t->write_file('foo.html', 'foo');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 $t->write_file('foofoo.html', 'foofoo');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 $t->run();
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 ###############################################################################
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 like(http_get('/foo.html'), qr/bar/, 'sub_filter');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 like(http_get('/foofoo.html'), qr/barfoo/, 'once default');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 like(http_get('/once?b=foofoo'), qr/barfoo/, 'once');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 like(http_get('/many?b=foofoo'), qr/barbar/, 'many');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 like(http_get('/many?b=fo'), qr/fo/, 'incomplete');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 like(http_get('/many?b=foofo'), qr/barfo/, 'incomplete long');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 like(http_get('/complex?b=abac'), qr/_replaced/, 'complex');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 like(http_get('/complex?b=abaabac'), qr/aba_replaced/, 'complex 1st char');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 like(http_get('/complex?b=ababac'), qr/replaced/, 'complex 2nd char');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 like(http_get('/complex2?b=ababX'), qr/_replaced/, 'complex2');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 like(http_get('/complex2?b=abababX'), qr/ab_replaced/, 'complex2 long');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 like(http_get('/complex3?b=aab'), qr/_replaced/, 'complex3 aab in aab');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 like(http_get('/complex3?b=aaab'), qr/a_replaced/, 'complex3 aab in aaab');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 like(http_get('/complex3?b=aaaab'), qr/aa_replaced/, 'complex3 aab in aaaab');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
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
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 ###############################################################################