annotate ssi_delayed.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 766bcbb632ee
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1161
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Andrey Zelenkov
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Roman Arutyunyan
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5 # (C) Nginx, Inc.
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7 # Test for subrequest bug with delay (see 903fb1ddc07f for details).
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9 ###############################################################################
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use warnings;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12 use strict;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14 use Test::More;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16 BEGIN { use FindBin; chdir($FindBin::Bin); }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18 use lib 'lib';
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19 use Test::Nginx;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21 ###############################################################################
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http proxy ssi/)->plan(1);
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28 $t->write_file_expand('nginx.conf', <<'EOF');
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30 %%TEST_GLOBALS%%
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32 daemon off;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34 events {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37 http {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
40 server {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
41 listen 127.0.0.1:8080;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
42 server_name localhost;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
43
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44 location / { }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
45 location /delayed.html {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
46 ssi on;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
47 sendfile_max_chunk 100;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48 postpone_output 0;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51 location /1 {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52 proxy_buffers 3 256;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53 proxy_buffer_size 256;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 proxy_max_temp_file_size 0;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
55 proxy_pass http://127.0.0.1:8081;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60 EOF
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63 $t->write_file('delayed.html', ('x' x 100) . '<!--#include virtual="/1"-->');
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65 $t->run_daemon(\&http_daemon);
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 $t->run()->waitforsocket('127.0.0.1:' . port(8081));
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68 ###############################################################################
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70 # If a response sending is delayed by sendfile_max_chunk, and
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71 # then we've switched to a different subrequest, which is not yet
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72 # ready to handle corresponding write event, wev->delayed won't be
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73 # cleared. This results in the subrequest response not being
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74 # sent to the client, and the whole request will hang if all proxy
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 # buffers will be exhausted. Fixed in 1.11.13 (903fb1ddc07f).
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 like(http_get('/delayed.html'), qr/x{100}y{1024}SEE-THIS/, 'delayed');
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79 ###############################################################################
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
81 sub http_daemon {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 my ($t) = @_;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84 my $server = IO::Socket::INET->new(
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 Proto => 'tcp',
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 LocalHost => '127.0.0.1',
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 LocalPort => port(8081),
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88 Listen => 5,
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89 Reuse => 1
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 )
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
91 or die "Can't create listening socket: $!\n";
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
92
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93 local $SIG{PIPE} = 'IGNORE';
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95 my $data = ('y' x 1024) . 'SEE-THIS';
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97 while (my $client = $server->accept()) {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98 $client->autoflush(1);
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100 my $headers = '';
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
101
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 while (<$client>) {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103 $headers .= $_;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104 last if (/^\x0d?\x0a?$/);
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107 select undef, undef, undef, 0.5;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109 print $client <<EOF;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
110 HTTP/1.1 200 OK
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111 Connection: close
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
113 $data
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114 EOF
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
115 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
116 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
117
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
118 ###############################################################################