annotate proxy_ssl_keepalive.t @ 1905:f35824e75b66

Tests: fixed reading QUIC streams on Perl < 5.24. The parse_stream() routine has had a missing explicit return if there were no streams received. In Perl < 5.24 this used to return no value, or an empty array in the list context. In modern Perl this returns an empty value, or an array of 1 element, which made the check for last index of the returned array work rather by accident. The fix is to return explicitly and to check the array size in callers instead.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 06 Jun 2023 18:50:07 +0400
parents da3889ba0b96
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
693
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Andrey Zelenkov
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6 # Tests for proxy with keepalive to ssl backend.
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8 ###############################################################################
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use warnings;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use strict;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13 use Test::More;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17 use lib 'lib';
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20 ###############################################################################
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http http_ssl proxy upstream_keepalive/)
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
26 ->has_daemon('openssl')->plan(3)
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31 daemon off;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33 events {
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34 }
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36 http {
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39 upstream u {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
40 server 127.0.0.1:8081;
693
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
41 keepalive 1;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
42 }
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
43
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
45 listen 127.0.0.1:8080;
693
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
46 server_name localhost;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
47
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48 proxy_http_version 1.1;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50 location / {
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51 proxy_pass https://u/;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52 proxy_set_header Connection $args;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53 }
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 }
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
55
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
57 listen 127.0.0.1:8081 ssl;
693
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 server_name localhost;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60 ssl_certificate_key localhost.key;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61 ssl_certificate localhost.crt;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63 location / {
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64 add_header X-Connection $connection;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65 }
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 }
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67 }
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69 EOF
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71 $t->write_file('openssl.conf', <<EOF);
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72 [ req ]
1488
dbce8fb5f5f8 Tests: align with OpenSSL security level 2.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1220
diff changeset
73 default_bits = 2048
693
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74 encrypt_key = no
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 distinguished_name = req_distinguished_name
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76 [ req_distinguished_name ]
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 EOF
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79 my $d = $t->testdir();
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
81 foreach my $name ('localhost') {
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 system('openssl req -x509 -new '
1220
0af58b78df35 Tests: removed single quotes from system() calls.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1116
diff changeset
83 . "-config $d/openssl.conf -subj /CN=$name/ "
0af58b78df35 Tests: removed single quotes from system() calls.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1116
diff changeset
84 . "-out $d/$name.crt -keyout $d/$name.key "
693
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 . ">>$d/openssl.out 2>&1") == 0
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 or die "Can't create certificate for $name: $!\n";
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 }
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89 $t->write_file('index.html', 'SEE-THIS');
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 $t->run();
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
91
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
92 ###############################################################################
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94 my ($r, $n);
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96 like($r = http_get('/'), qr/200 OK.*SEE-THIS/ms, 'first');
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97 $r =~ m/X-Connection: (\d+)/; $n = $1;
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98 like(http_get('/'), qr/X-Connection: $n[^\d].*SEE-THIS/ms, 'second');
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100 http_get('/?close');
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
101 unlike(http_get('/'), qr/X-Connection: $n[^\d]/, 'close');
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102
875900f02f15 Tests: added proxy keepalive tests to ssl backend.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103 ###############################################################################