annotate sub_filter_perl.t @ 431:05c46688b54b

Tests: ssl_password_file.t fixes. Make sure to always specify listen socket in all servers as the default vary (under root, nginx will try to listen on 80). Make sure to detect if an https request was processed by http.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 09 Jul 2014 05:19:51 +0400
parents 847ea345becb
children b86c05516e65
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, extended tests using embedded perl.
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 use Socket qw/ CRLF /;
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 BEGIN { use FindBin; chdir($FindBin::Bin); }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use lib 'lib';
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 use Test::Nginx;
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 ###############################################################################
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 select STDERR; $| = 1;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 select STDOUT; $| = 1;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
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
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
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 %%TEST_GLOBALS%%
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 daemon off;
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 events {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 }
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 http {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 server {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 listen 127.0.0.1:8080;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 server_name localhost;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 sub_filter_types *;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 sub_filter foobarbaz replaced;
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 location / {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 perl 'sub {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 my $r = shift;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 $r->send_http_header("text/html");
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 return OK if $r->header_only;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 $r->print("foo");
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 $r->flush();
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 $r->print("bar");
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 $r->flush();
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 $r->print("baz");
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 return OK;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 }';
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 }
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 location /multi {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 sub_filter aab _replaced;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 perl 'sub {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 my $r = shift;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 $r->send_http_header("text/html");
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 return OK if $r->header_only;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 $r->print($r->variable("arg_a"));
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 $r->print($r->variable("arg_b"));
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 return OK;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 }';
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
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
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 }
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 EOF
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87
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('/flush'), qr/^replaced$/m, 'flush');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 like(http_get('/multi?a=a&b=ab'), qr/^_replaced$/m, 'aab in a + ab');
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 like(http_get('/multi?a=a&b=aaab'), qr/^aa_replaced$/m, 'aab in a + aaab');
314
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
96 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
97 like(http_get('/multi?a=a&b=aaaab'), qr/^aaa_replaced$/m, 'aab in a + aaaab');
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
98 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
99 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
100 like(http_get('/multi?a=aa&b=aaab'), qr/^aaa_replaced$/m, 'aab in aa + aaab');
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
101 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
102
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
103 # full backtracking
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
104
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
105 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
106 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
107 'aab in aa + axaaab');
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
108 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
109 'aab in aa + aaxaaab');
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
110
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
111 # short pattern
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
112
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
113 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
114 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
115 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
116 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
117 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
118
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
119 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
120 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
121 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
122 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
123 like(http_get('/short?a=aa&b=aaaab'), qr/^aaaaa_replaced$/m, 'ab in aa + aaaab');
304
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 ###############################################################################