annotate scgi_cache.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 196d33c2bb45
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
308
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for scgi_cache.
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 use Socket qw/ CRLF /;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use lib 'lib';
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use Test::Nginx;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 ###############################################################################
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDERR; $| = 1;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 select STDOUT; $| = 1;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 eval { require SCGI; };
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 plan(skip_all => 'SCGI not installed') if $@;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27
1020
196d33c2bb45 Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 974
diff changeset
28 my $t = Test::Nginx->new()->has(qw/http scgi cache/)->plan(10)
308
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 ->write_file_expand('nginx.conf', <<'EOF');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 %%TEST_GLOBALS%%
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 daemon off;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 events {
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 }
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 http {
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 %%TEST_GLOBALS_HTTP%%
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 scgi_cache_path %%TESTDIR%%/cache keys_zone=one:1m;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 scgi_cache_key $request_uri;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 add_header X-Cache-Status $upstream_cache_status;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 960
diff changeset
47 listen 127.0.0.1:8080;
308
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 server_name localhost;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 location / {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 960
diff changeset
51 scgi_pass 127.0.0.1:8081;
308
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 scgi_param SCGI 1;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 scgi_param REQUEST_URI $uri;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 scgi_cache one;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 }
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 }
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 }
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 EOF
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 $t->run_daemon(\&scgi_daemon);
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 960
diff changeset
62 $t->run()->waitforsocket('127.0.0.1:' . port(8081));
308
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 ###############################################################################
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 like(http_get('/len'), qr/MISS/, 'length');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 like(http_get('/len'), qr/HIT/, 'length cached');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 like(http_get('/nolen'), qr/MISS/, 'no length');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 like(http_get('/nolen'), qr/HIT/, 'no length cached');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 like(http_get('/len/empty'), qr/MISS/, 'empty length');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 like(http_get('/len/empty'), qr/HIT/, 'empty length cached');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 like(http_get('/nolen/empty'), qr/MISS/, 'empty no length');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 like(http_get('/nolen/empty'), qr/HIT/, 'empty no length cached');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 like(http_get('/unfinished'), qr/MISS/, 'unfinished');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 like(http_get('/unfinished'), qr/MISS/, 'unfinished not cached');
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 ###############################################################################
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 sub scgi_daemon {
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 my $server = IO::Socket::INET->new(
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 Proto => 'tcp',
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 960
diff changeset
86 LocalHost => '127.0.0.1:' . port(8081),
308
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 Listen => 5,
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 Reuse => 1
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 )
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 or die "Can't create listening socket: $!\n";
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 my $scgi = SCGI->new($server, blocking => 1);
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 my %count;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 while (my $request = $scgi->accept()) {
960
d4a0232425ee Tests: fixed race in SCGI tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 952
diff changeset
96 eval { $request->read_env(); };
d4a0232425ee Tests: fixed race in SCGI tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 952
diff changeset
97 next if $@;
308
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 my $uri = $request->env->{REQUEST_URI} || '';
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 my $c = $request->connection();
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 $count{$uri} ||= 0;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 $count{$uri}++;
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 if ($uri eq '/len') {
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 $c->print(
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 "Content-Length: 9" . CRLF .
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 "Content-Type: text/html" . CRLF .
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 "Cache-Control: max-age=300" . CRLF . CRLF .
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 "test body"
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 );
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 } elsif ($uri eq '/nolen') {
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 $c->print(
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 "Content-Type: text/html" . CRLF .
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 "Cache-Control: max-age=300" . CRLF . CRLF .
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 "test body"
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 );
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 } elsif ($uri eq '/len/empty') {
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 $c->print(
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 "Content-Length: 0" . CRLF .
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 "Content-Type: text/html" . CRLF .
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 "Cache-Control: max-age=300" . CRLF . CRLF
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 );
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 } elsif ($uri eq '/nolen/empty') {
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 $c->print(
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 "Content-Type: text/html" . CRLF .
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 "Cache-Control: max-age=300" . CRLF . CRLF
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 );
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 } elsif ($uri eq '/unfinished') {
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 $c->print(
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 "Content-Length: 10" . CRLF .
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 "Content-Type: text/html" . CRLF .
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 "Cache-Control: max-age=300" . CRLF . CRLF
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 );
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 }
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 }
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 }
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142
26147426718c Tests: scgi cache tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 ###############################################################################