Mercurial > hg > nginx-tests
annotate sub_filter_perl.t @ 314:eb6f293b512b
Tests: improve sub_filter tests.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 22 Jul 2013 17:22:57 +0400 |
parents | 6bee817c9e97 |
children | 03975bffc368 |
rev | line source |
---|---|
304 | 1 #!/usr/bin/perl |
2 | |
3 # (C) Maxim Dounin | |
4 | |
5 # Tests for sub filter, extended tests using embedded perl. | |
6 | |
7 ############################################################################### | |
8 | |
9 use warnings; | |
10 use strict; | |
11 | |
12 use Test::More; | |
13 | |
14 use Socket qw/ CRLF /; | |
15 | |
16 BEGIN { use FindBin; chdir($FindBin::Bin); } | |
17 | |
18 use lib 'lib'; | |
19 use Test::Nginx; | |
20 | |
21 ############################################################################### | |
22 | |
23 select STDERR; $| = 1; | |
24 select STDOUT; $| = 1; | |
25 | |
314
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/http sub perl/)->plan(22) |
304 | 27 ->write_file_expand('nginx.conf', <<'EOF'); |
28 | |
29 %%TEST_GLOBALS%% | |
30 | |
31 daemon off; | |
32 | |
33 events { | |
34 } | |
35 | |
36 http { | |
37 %%TEST_GLOBALS_HTTP%% | |
38 | |
39 server { | |
40 listen 127.0.0.1:8080; | |
41 server_name localhost; | |
42 | |
43 sub_filter_types *; | |
44 sub_filter foobarbaz replaced; | |
45 | |
46 location / { | |
47 perl 'sub { | |
48 my $r = shift; | |
49 $r->send_http_header("text/html"); | |
50 return OK if $r->header_only; | |
51 $r->print("foo"); | |
52 $r->flush(); | |
53 $r->print("bar"); | |
54 $r->flush(); | |
55 $r->print("baz"); | |
56 return OK; | |
57 }'; | |
58 } | |
59 | |
60 location /multi { | |
61 sub_filter aab _replaced; | |
62 perl 'sub { | |
63 my $r = shift; | |
64 $r->send_http_header("text/html"); | |
65 return OK if $r->header_only; | |
66 $r->print($r->variable("arg_a")); | |
67 $r->print($r->variable("arg_b")); | |
68 return OK; | |
69 }'; | |
70 } | |
314
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
71 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
72 location /short { |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
73 sub_filter ab _replaced; |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
74 perl 'sub { |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
75 my $r = shift; |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
76 $r->send_http_header("text/html"); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
77 return OK if $r->header_only; |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
78 $r->print($r->variable("arg_a")); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
79 $r->print($r->variable("arg_b")); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
80 return OK; |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
81 }'; |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
82 } |
304 | 83 } |
84 } | |
85 | |
86 EOF | |
87 | |
88 $t->run(); | |
89 | |
90 ############################################################################### | |
91 | |
92 like(http_get('/flush'), qr/^replaced$/m, 'flush'); | |
93 | |
94 like(http_get('/multi?a=a&b=ab'), qr/^_replaced$/m, 'aab in a + ab'); | |
95 like(http_get('/multi?a=a&b=aaab'), qr/^aa_replaced$/m, 'aab in a + aaab'); | |
96 | |
97 TODO: { | |
98 local $TODO = 'not yet'; | |
99 | |
314
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
100 like(http_get('/multi?a=a&b=aab'), qr/^a_replaced$/m, 'aab in a + aab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
101 like(http_get('/multi?a=a&b=aaaab'), qr/^aaa_replaced$/m, 'aab in a + aaaab'); |
304 | 102 |
103 } | |
104 | |
105 TODO: { | |
106 local $TODO = 'not yet'; | |
107 | |
314
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
108 like(http_get('/multi?a=aa&b=ab'), qr/^a_replaced$/m, 'aab in aa + ab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
109 like(http_get('/multi?a=aa&b=aab'), qr/^aa_replaced$/m, 'aab in aa + aab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
110 like(http_get('/multi?a=aa&b=aaab'), qr/^aaa_replaced$/m, 'aab in aa + aaab'); |
304 | 111 |
112 } | |
113 | |
314
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
114 like(http_get('/multi?a=aa&b=aaaab'), qr/^aaaa_replaced$/m, 'aab in aa + aaaab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
115 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
116 # full backtracking |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
117 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
118 like(http_get('/multi?a=aa&b=xaaab'), qr/^aaxa_replaced$/m, 'aab in aa + xaaab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
119 like(http_get('/multi?a=aa&b=axaaab'), qr/^aaaxa_replaced$/m, |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
120 'aab in aa + axaaab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
121 like(http_get('/multi?a=aa&b=aaxaaab'), qr/^aaaaxa_replaced$/m, |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
122 'aab in aa + aaxaaab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
123 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
124 # short pattern |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
125 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
126 like(http_get('/short?a=a&b=b'), qr/^_replaced$/m, 'ab in a + b'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
127 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
128 TODO: { |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
129 local $TODO = 'not yet'; |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
130 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
131 like(http_get('/short?a=a&b=ab'), qr/^a_replaced$/m, 'ab in a + ab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
132 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
133 } |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
134 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
135 like(http_get('/short?a=a&b=aab'), qr/^aa_replaced$/m, 'ab in a + aab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
136 like(http_get('/short?a=a&b=aaab'), qr/^aaa_replaced$/m, 'ab in a + aaab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
137 like(http_get('/short?a=a&b=aaaab'), qr/^aaaa_replaced$/m, 'ab in a + aaaab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
138 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
139 like(http_get('/short?a=aa&b=b'), qr/^a_replaced$/m, 'ab in aa + b'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
140 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
141 TODO: { |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
142 local $TODO = 'not yet'; |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
143 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
144 like(http_get('/short?a=aa&b=ab'), qr/^aa_replaced$/m, 'ab in aa + ab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
145 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
146 } |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
147 |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
148 like(http_get('/short?a=aa&b=aab'), qr/^aaa_replaced$/m, 'ab in aa + aab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
149 like(http_get('/short?a=aa&b=aaab'), qr/^aaaa_replaced$/m, 'ab in aa + aaab'); |
eb6f293b512b
Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
304
diff
changeset
|
150 like(http_get('/short?a=aa&b=aaaab'), qr/^aaaaa_replaced$/m, 'ab in aa + aaaab'); |
304 | 151 |
152 ############################################################################### |