annotate h3_reusable.t @ 1933:9bafe7cddd3c

Tests: improved QUIC key update tests with old keys. On unsuccessful protection removal, it is now retried with old keys. Otherwise, old keys are removed to ensure they're no longer in use.
author Sergey Kandaurov <pluknet@nginx.com>
date Mon, 21 Aug 2023 17:26:47 +0400
parents 8b74936ff2ac
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1881
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for HTTP/3, reusable connections.
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use Test::Nginx::HTTP3;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 ###############################################################################
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25
1896
8b74936ff2ac Tests: added has_feature() test for CryptX.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1881
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v3 cryptx/)
1881
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 ->has_daemon('openssl')->plan(1)
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28 ->write_file_expand('nginx.conf', <<'EOF');
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30 %%TEST_GLOBALS%%
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32 daemon off;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 events {
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 worker_connections 12;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 }
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 http {
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 %%TEST_GLOBALS_HTTP%%
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 ssl_certificate_key localhost.key;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 ssl_certificate localhost.crt;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 server {
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 listen 127.0.0.1:%%PORT_8980_UDP%% quic;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 server_name localhost;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 location / { }
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 }
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 }
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 EOF
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 $t->write_file('openssl.conf', <<EOF);
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 [ req ]
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 default_bits = 2048
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 encrypt_key = no
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 distinguished_name = req_distinguished_name
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 [ req_distinguished_name ]
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 EOF
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 my $d = $t->testdir();
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 foreach my $name ('localhost') {
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 system('openssl req -x509 -new '
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 . "-config $d/openssl.conf -subj /CN=$name/ "
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 . "-out $d/$name.crt -keyout $d/$name.key "
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 . ">>$d/openssl.out 2>&1") == 0
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 or die "Can't create certificate for $name: $!\n";
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 }
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 $t->run();
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 ###############################################################################
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 my $s1 = Test::Nginx::HTTP3->new();
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 $s1->insert_literal(':path', '/foo');
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 $s1->read(all => [ { type => 'DECODER_ICI' } ]);
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 # expect to steal reusable worker connections
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 my $s2 = Test::Nginx::HTTP3->new();
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 $s2->start_chain();
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 my @sids = map { $s2->new_stream() } 1 .. 5;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 $s2->send_chain();
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 my $frames = $s2->read(all => [ map { { sid => $_, fin => 1 } } @sids ]);
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 my $streams = grep { $_->{type} eq "HEADERS" } @$frames;
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 is($streams, 5, 'streams');
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90
33432a6877f7 Tests: reusable HTTP/3 worker connections.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 ###############################################################################