annotate h2_keepalive.t @ 1851:0351dee227a8

Tests: unbreak tests with dynamic certificates on stable. In 74cffa9d4c43, ticket based session reuse is enabled in addition to using a shared SSL session cache. This changed how a session can be resumed in a different server: - for a session ID based resumption, it is resumed in the same context - when using session tickets, a key name is also checked for matching - with a ticket callback, this is skipped in favor of callback's logic This makes 'session id context match' tests fail with session tickets on stable since ticket key names are unique in distinct SSL contexts. On the other hand, tests pass on 1.23.2+ due to automatic ticket keys rotation that installs ticket callback, and using a common shared SSL session cache.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 28 Mar 2023 01:36:32 +0400
parents 3366128e526b
children 236d038dc04a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
1693
5ac6efbe5552 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1668
diff changeset
6 # Tests for HTTP/2 protocol, keepalive directives.
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
1579
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
15 use Socket qw(SOL_SOCKET SO_RCVBUF);
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
16
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 BEGIN { use FindBin; chdir($FindBin::Bin); }
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use lib 'lib';
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 use Test::Nginx;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 use Test::Nginx::HTTP2;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 ###############################################################################
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 select STDERR; $| = 1;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 select STDOUT; $| = 1;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28 my $t = Test::Nginx->new()->has(qw/http http_v2/)
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 ->write_file_expand('nginx.conf', <<'EOF');
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 %%TEST_GLOBALS%%
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 daemon off;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 events {
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 }
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 http {
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 %%TEST_GLOBALS_HTTP%%
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server {
1579
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
42 listen 127.0.0.1:8080 http2 sndbuf=1m;
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 server_name localhost;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
1652
21f511a7f5c3 Tests: compatibility with http2_max_requests removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1588
diff changeset
45 keepalive_requests 2;
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 location / { }
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 }
1657
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
49
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
50 server {
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
51 listen 127.0.0.1:8081 http2;
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
52 server_name localhost;
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
53
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
54 keepalive_timeout 0;
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
55
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
56 location / { }
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
57 }
1667
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
58
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
59 server {
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
60 listen 127.0.0.1:8082 http2;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
61 server_name localhost;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
62
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
63 keepalive_time 1s;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
64
1668
0c1bd4c23c95 Tests: $connection_requests and $connection_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1667
diff changeset
65 add_header X-Conn $connection_requests:$connection_time;
0c1bd4c23c95 Tests: $connection_requests and $connection_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1667
diff changeset
66
1667
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
67 location / { }
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
68 }
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 }
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 EOF
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72
1579
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
73 $t->write_file('index.html', 'SEE-THAT' x 50000);
1657
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
74 $t->write_file('t.html', 'SEE-THAT');
1652
21f511a7f5c3 Tests: compatibility with http2_max_requests removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1588
diff changeset
75
1693
5ac6efbe5552 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1668
diff changeset
76 $t->run()->plan(19);
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 ###############################################################################
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 my $s = Test::Nginx::HTTP2->new();
1579
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
81
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
82 # to test lingering close, let full response settle down in send buffer space
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
83 # so that client additional data past server-side close would trigger TCP RST
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
84
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
85 $s->{socket}->setsockopt(SOL_SOCKET, SO_RCVBUF, 64*1024) or die $!;
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
86 $s->h2_settings(0, 0x4 => 2**20);
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
87 $s->h2_window(2**21);
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
88
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 my $frames = $s->read(all => [{ sid => $s->new_stream(), fin => 1 }]);
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 is($frame->{headers}->{':status'}, 200, 'max requests');
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 $frames = $s->read(all => [{ type => 'GOAWAY' }], wait => 0.5)
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 unless grep { $_->{type} eq "GOAWAY" } @$frames;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 is($frame, undef, 'max requests - GOAWAY');
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 # max requests limited
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 my $sid = $s->new_stream();
1579
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
103
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
104 # wait server to finish and close socket if lingering close were disabled
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
105
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
106 select undef, undef, undef, 0.1;
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
107 $s->h2_ping("SEE-THIS");
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
108
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 $frames = $s->read(all => [{ sid => $sid, fin => 1 }, { type => 'GOAWAY' }]);
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112 is($frame->{headers}->{':status'}, 200, 'max requests limited');
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113
1579
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
114 my @data = grep { $_->{type} eq "DATA" } @$frames;
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
115 my $sum = eval join '+', map { $_->{length} } @data;
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
116 is($sum, 400000, 'max requests limited - all data received');
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
117
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 ok($frame, 'max requests limited - GOAWAY');
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120 is($frame->{last_sid}, $sid, 'max requests limited - GOAWAY last stream');
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121
1657
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
122 # keepalive_timeout 0
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
123
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
124 $s = Test::Nginx::HTTP2->new(port(8081));
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
125 $sid = $s->new_stream({ path => '/t.html' });
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
126 $frames = $s->read(all => [{ sid => $sid, fin => 1 }, { type => 'GOAWAY' }]);
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
127
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
128 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
129 is($frame->{headers}->{':status'}, 200, 'keepalive_timeout 0');
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
130
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
131 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
132 ok($frame, 'keepalive_timeout 0 - GOAWAY');
22e0133d68b4 Tests: added HTTP/2 test with "keepalive_timeout 0" (ticket #2142).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1652
diff changeset
133
1667
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
134 # keepalive_time
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
135
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
136 $s = Test::Nginx::HTTP2->new(port(8082));
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
137 $sid = $s->new_stream({ path => '/t.html' });
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
138 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
139
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
140 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
141 is($frame->{headers}->{':status'}, 200, 'keepalive time request');
1668
0c1bd4c23c95 Tests: $connection_requests and $connection_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1667
diff changeset
142 like($frame->{headers}->{'x-conn'}, qr/^1:0/, 'keepalive time variables');
1667
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
143
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
144 $frames = $s->read(all => [{ type => 'GOAWAY' }], wait => 0.5);
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
145
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
146 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
147 is($frame, undef, 'keepalive time - no GOAWAY yet');
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
148
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
149 select undef, undef, undef, 1.1;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
150
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
151 $sid = $s->new_stream({ path => '/t.html' });
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
152 $frames = $s->read(all => [{ sid => $sid, fin => 1 }, { type => 'GOAWAY' }]);
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
153
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
154 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
155 is($frame->{headers}->{':status'}, 200, 'keepalive time request 2');
1668
0c1bd4c23c95 Tests: $connection_requests and $connection_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1667
diff changeset
156 like($frame->{headers}->{'x-conn'}, qr/^2:[^0]/, 'keepalive time variables 2');
1667
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
157
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
158 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
159 ok($frame, 'keepalive time limit - GOAWAY');
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
160 is($frame->{last_sid}, $sid, 'keepalive time limit - GOAWAY last stream');
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1657
diff changeset
161
1579
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
162 # graceful shutdown in idle state
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
163
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
164 $s = Test::Nginx::HTTP2->new();
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
165 $s->{socket}->setsockopt(SOL_SOCKET, SO_RCVBUF, 64*1024) or die $!;
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
166 $s->h2_settings(0, 0x4 => 2**20);
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
167 $s->h2_window(2**21);
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
168
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
169 $sid = $s->new_stream();
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
170
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
171 # wait server to finish and close socket if lingering close were disabled
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
172
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
173 select undef, undef, undef, 0.1;
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
174
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
175 $t->reload();
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
176
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
177 select undef, undef, undef, 0.3;
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
178
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
179 $s->h2_ping("SEE-THIS");
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
180
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
181 $frames = $s->read(all => [{ sid => $sid, fin => 1 }, { type => 'GOAWAY' }]);
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
182
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
183 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
184 is($frame->{headers}->{':status'}, 200, 'graceful shutdown in idle');
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
185
1693
5ac6efbe5552 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1668
diff changeset
186 @data = grep { $_->{type} eq "DATA" } @$frames;
5ac6efbe5552 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1668
diff changeset
187 $sum = eval join '+', map { $_->{length} } @data;
1579
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
188 is($sum, 400000, 'graceful shutdown in idle - all data received');
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
189
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
190 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
191 ok($frame, 'graceful shutdown in idle - GOAWAY');
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
192 is($frame->{last_sid}, $sid, 'graceful shutdown in idle - GOAWAY last stream');
14eeaa39599d Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
193
1077
13247bbc1f7d Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194 ###############################################################################