annotate h3_limit_conn.t @ 1907:034c9121b9d1

Tests: added h2_http2.t TODOs for LibreSSL and older OpenSSL. Those libraries provide an older callback order, where ALPN callback is invoked before SNI callback. Additionally, OpenSSL 1.0.2 doesn't send alert on ALPN mismatch.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 08 Jun 2023 16:41:11 +0400
parents 8b74936ff2ac
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1890
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for HTTP/3 protocol with limit_conn.
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use Test::Nginx::HTTP3;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 ###############################################################################
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25
1896
8b74936ff2ac Tests: added has_feature() test for CryptX.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1890
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v3 limit_conn proxy cryptx/)
1890
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 ->has_daemon('openssl')->plan(2);
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 $t->write_file_expand('nginx.conf', <<'EOF');
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 %%TEST_GLOBALS%%
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 daemon off;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 events {
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 }
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 http {
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 %%TEST_GLOBALS_HTTP%%
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 ssl_certificate_key localhost.key;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 ssl_certificate localhost.crt;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 limit_conn_zone $binary_remote_addr zone=conn:1m;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 server {
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 listen 127.0.0.1:%%PORT_8980_UDP%% quic;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 listen 127.0.0.1:8080;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 server_name localhost;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 location / {
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 limit_conn conn 1;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 proxy_pass http://127.0.0.1:8080/stub;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 }
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 location /stub {
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 limit_rate 200;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 }
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 }
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 }
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 EOF
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 $t->write_file('openssl.conf', <<EOF);
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 [ req ]
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 default_bits = 2048
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 encrypt_key = no
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 distinguished_name = req_distinguished_name
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 [ req_distinguished_name ]
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 EOF
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 my $d = $t->testdir();
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 foreach my $name ('localhost') {
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 system('openssl req -x509 -new '
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 . "-config $d/openssl.conf -subj /CN=$name/ "
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 . "-out $d/$name.crt -keyout $d/$name.key "
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 . ">>$d/openssl.out 2>&1") == 0
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 or die "Can't create certificate for $name: $!\n";
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 }
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 $t->write_file('stub', 'x' x 200);
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 $t->run();
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 ###############################################################################
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 my $s = Test::Nginx::HTTP3->new();
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 my $sid = $s->new_stream();
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 my $sid2 = $s->new_stream();
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 my $frames = $s->read(all => [
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 { sid => $sid, fin => 1 },
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 { sid => $sid2, fin => 1 }]);
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 my ($frame) = grep { $_->{type} eq "HEADERS" && $_->{sid} == $sid } @$frames;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 is($frame->{headers}->{':status'}, 200, 'limit_conn first stream');
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 ($frame) = grep { $_->{type} eq "HEADERS" && $_->{sid} == $sid2 } @$frames;
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 is($frame->{headers}->{':status'}, 503, 'limit_conn rejected');
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99
e99a7790ec61 Tests: HTTP/3 limit_conn tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 ###############################################################################