annotate sub_filter_perl.t @ 1974:b5036a0f9ae0 default tip

Tests: improved compatibility when using recent "openssl" app. Starting with OpenSSL 3.0, "openssl genrsa" generates encrypted keys in PKCS#8 format instead of previously used PKCS#1 format. Further, since OpenSSL 1.1.0 such keys are using PBKDF2 hmacWithSHA256. Such keys are not supported by old SSL libraries, notably by OpenSSL before 1.0.0 (OpenSSL 0.9.8 only supports hmacWithSHA1) and by BoringSSL before May 21, 2019 (support for hmacWithSHA256 was added in 302a4dee6c), and trying to load such keys into nginx compiled with an old SSL library results in "unsupported prf" errors. To facilitate testing with old SSL libraries, keys are now generated with "openssl genrsa -traditional" if the flag is available.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 06 May 2024 00:04:26 +0300
parents 882267679006
children
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 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
314
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
24 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
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 {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
38 listen 127.0.0.1:8080;
304
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 foobarbaz replaced;
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 perl 'sub {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 my $r = shift;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 $r->send_http_header("text/html");
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 return OK if $r->header_only;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 $r->print("foo");
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 $r->flush();
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 $r->print("bar");
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("baz");
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 return OK;
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 }
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 location /multi {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 sub_filter aab _replaced;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 perl 'sub {
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 my $r = shift;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 $r->send_http_header("text/html");
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 return OK if $r->header_only;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 $r->print($r->variable("arg_a"));
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 $r->print($r->variable("arg_b"));
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 return OK;
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 }';
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 }
314
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
69
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
70 location /short {
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
71 sub_filter ab _replaced;
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
72 perl 'sub {
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
73 my $r = shift;
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
74 $r->send_http_header("text/html");
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
75 return OK if $r->header_only;
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
76 $r->print($r->variable("arg_a"));
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
77 $r->print($r->variable("arg_b"));
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
78 return OK;
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
79 }';
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
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->run();
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 ###############################################################################
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 like(http_get('/flush'), qr/^replaced$/m, 'flush');
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('/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
93 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
94 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
95 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
96 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
97 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
98 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
99 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
100
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
101 # full backtracking
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 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
104 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
105 'aab in aa + axaaab');
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
106 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
107 'aab in aa + aaxaaab');
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
108
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
109 # short pattern
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 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
112 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
113 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
114 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
115 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
116
eb6f293b512b Tests: improve sub_filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 304
diff changeset
117 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
118 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
119 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
120 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
121 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
122
6bee817c9e97 Tests: sub filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 ###############################################################################