Mercurial > hg > nginx-tests
annotate h2_max_requests.t @ 1619:436d0ffc2ea3
Tests: correctly shutdown ssl for reproducible session reuse tests.
Previously, session reuse tests in stream_ssl_certificate.t were prone
to testing errors, since the client doesn't write any application data
before closing a connection, which is done so to pass tests on win32.
In this case, the server may happened to get an unexpected eof meaning
that it will abandon that session. This is specific to stream testing
pattern, changes to ssl_certificate.t are applied too for consistency.
This is also specific to SSL_R_UNEXPECTED_EOF_WHILE_READING, which is
implemented in OpenSSL 3.0.0.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 23 Nov 2020 22:46:06 +0000 |
parents | 3afb634f287d |
children | 21f511a7f5c3 |
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 |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Tests for HTTP/2 protocol, http2_max_requests directive. |
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 |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 http2_max_requests 2; |
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 } |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 } |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 EOF |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 |
1579
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
53 $t->write_file('index.html', 'SEE-THAT' x 50000); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
54 $t->run()->plan(10); |
1077
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 ############################################################################### |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 my $s = Test::Nginx::HTTP2->new(); |
1579
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
59 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
60 # 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
|
61 # 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
|
62 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
63 $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
|
64 $s->h2_settings(0, 0x4 => 2**20); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
65 $s->h2_window(2**21); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
66 |
1077
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 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
|
68 |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 is($frame->{headers}->{':status'}, 200, 'max requests'); |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 $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
|
73 unless grep { $_->{type} eq "GOAWAY" } @$frames; |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames; |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 is($frame, undef, 'max requests - GOAWAY'); |
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 # max requests limited |
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 $sid = $s->new_stream(); |
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 # 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
|
83 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
84 select undef, undef, undef, 0.1; |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
85 $s->h2_ping("SEE-THIS"); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
86 |
1077
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
87 $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
|
88 |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
90 is($frame->{headers}->{':status'}, 200, 'max requests limited'); |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
91 |
1579
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
92 TODO: { |
1588
3afb634f287d
Tests: fixed h2_max_requests.t TODOs on linux.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1579
diff
changeset
|
93 local $TODO = 'not yet' if ($^O eq 'linux' or $^O eq 'freebsd') |
1579
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
94 and !$t->has_version('1.19.1'); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
95 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
96 my @data = grep { $_->{type} eq "DATA" } @$frames; |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
97 my $sum = eval join '+', map { $_->{length} } @data; |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
98 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
|
99 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
100 } |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
101 |
1077
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames; |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 ok($frame, 'max requests limited - GOAWAY'); |
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
104 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
|
105 |
1579
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
106 # graceful shutdown in idle state |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
107 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
108 $s = Test::Nginx::HTTP2->new(); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
109 $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
|
110 $s->h2_settings(0, 0x4 => 2**20); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
111 $s->h2_window(2**21); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
112 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
113 $sid = $s->new_stream(); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
114 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
115 # 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
|
116 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
117 select undef, undef, undef, 0.1; |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
118 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
119 $t->reload(); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
120 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
121 select undef, undef, undef, 0.3; |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
122 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
123 $s->h2_ping("SEE-THIS"); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
124 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
125 $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
|
126 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
127 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
128 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
|
129 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
130 TODO: { |
1588
3afb634f287d
Tests: fixed h2_max_requests.t TODOs on linux.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1579
diff
changeset
|
131 local $TODO = 'not yet' if ($^O eq 'linux' or $^O eq 'freebsd') |
1579
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
132 and !$t->has_version('1.19.1'); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
133 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
134 my @data = grep { $_->{type} eq "DATA" } @$frames; |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
135 my $sum = eval join '+', map { $_->{length} } @data; |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
136 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
|
137 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
138 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames; |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
139 ok($frame, 'graceful shutdown in idle - GOAWAY'); |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
140 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
|
141 |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
142 } |
14eeaa39599d
Tests: HTTP/2 tests for lingering close.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1251
diff
changeset
|
143 |
1077
13247bbc1f7d
Tests: HTTP/2 tests for max requests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
144 ############################################################################### |