annotate h2_request_body_preread.t @ 1951:1867428f1673

Tests: fixed h3_limit_req.t spurious failures. In the "reset stream - cancellation" test, HTTP/3 stream is closed without sending the request body when the request is waiting in the limit_req module, and this results in error 444. However, when the request is received with some minor delay due to system load, it is not delayed by limit_req, and the stream is closed during reading the request body, which results in error 400 instead, breaking the test. Fix is to introduce yet another request before the "reset stream" test, so the stream in question is always delayed by limit_req.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 14 Mar 2024 02:25:49 +0300
parents 236d038dc04a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for HTTP/2 protocol with preread request body.
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use Test::Nginx::HTTP2;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 ###############################################################################
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25
1900
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1499
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy limit_req/)->plan(9);
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28 $t->write_file_expand('nginx.conf', <<'EOF');
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30 %%TEST_GLOBALS%%
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32 daemon off;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 events {
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 http {
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39
1459
2710e9505937 Tests: adjusted limit_req rate in HTTP/2 body preread tests more.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
40 limit_req_zone $binary_remote_addr zone=req:1m rate=20r/m;
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
43 listen 127.0.0.1:8080 http2;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
44 listen 127.0.0.1:8081;
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 server_name localhost;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 http2_body_preread_size 10;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 location /t { }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 location / {
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 add_header X-Body $request_body;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
52 proxy_pass http://127.0.0.1:8081/t;
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 location /req {
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 limit_req zone=req burst=2;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
56 proxy_pass http://127.0.0.1:8081/t;
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
62 listen 127.0.0.1:8082 http2;
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 server_name localhost;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 http2_body_preread_size 0;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 location / {
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 add_header X-Body $request_body;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
69 proxy_pass http://127.0.0.1:8081/t;
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 location /req {
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 limit_req zone=req burst=2;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
73 proxy_pass http://127.0.0.1:8081/t;
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
79 listen 127.0.0.1:8083 http2;
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 server_name localhost;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 location / {
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 add_header X-Body $request_body;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
84 proxy_pass http://127.0.0.1:8081/t;
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 EOF
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 $t->write_file('t', '');
1900
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1499
diff changeset
92
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1499
diff changeset
93 # suppress deprecation warning
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1499
diff changeset
94
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1499
diff changeset
95 open OLDERR, ">&", \*STDERR; close STDERR;
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1499
diff changeset
96 $t->run();
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1499
diff changeset
97 open STDERR, ">&", \*OLDERR;
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 ###############################################################################
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 # request body within preread size (that is, stream window)
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103 my $s = Test::Nginx::HTTP2->new();
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 my $sid = $s->new_stream({ body => 'TEST' });
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 is($frame->{headers}->{'x-body'}, 'TEST', 'within preread');
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110 # request body beyond preread size
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 # RST_STREAM expected due stream window violation
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 TODO: {
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 local $TODO = 'not yet';
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 $s = Test::Nginx::HTTP2->new();
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 $sid = $s->new_stream({ body => 'TEST' x 10 });
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118 $frames = $s->read(all => [{ type => 'RST_STREAM' }], wait => 0.5);
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 is($frame->{code}, 3, 'beyond preread - FLOW_CONTROL_ERROR');
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 # within preread size - limited
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 $s = Test::Nginx::HTTP2->new();
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128 $sid = $s->new_stream({ path => '/req' });
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 $sid = $s->new_stream({ path => '/req', body => 'TEST' });
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135 is($frame->{headers}->{'x-body'}, 'TEST', 'within preread limited');
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136
1499
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
137 # processing request body without END_STREAM in preread
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
138
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
139 $sid = $s->new_stream({ path => '/req', body_more => 1, continuation => 1 });
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
140 $s->h2_continue($sid,
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
141 { headers => [{ name => 'content-length', value => '8' }]});
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
142
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
143 $s->h2_body('SEE', { body_more => 1 });
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
144 $s->read(all => [{ type => 'WINDOW_UPDATE' }]);
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
145
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
146 $s->h2_body('-THIS');
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
147 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
148
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
149 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
150 is($frame->{headers}->{'x-body'}, 'SEE-THIS', 'within preread limited - more');
c9d7e2a26b2d Tests: HTTP/2 request body preread of DATA without END_STREAM.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1459
diff changeset
151
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 # beyond preread size - limited
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154 $s = Test::Nginx::HTTP2->new();
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155 $sid = $s->new_stream({ path => '/req', body => 'TEST' x 10 });
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156 $frames = $s->read(all => [{ type => 'RST_STREAM' }]);
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 is($frame->{code}, 3, 'beyond preread limited - FLOW_CONTROL_ERROR');
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 # zero preread size
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164 TODO: {
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 local $TODO = 'not yet';
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
167 $s = Test::Nginx::HTTP2->new(port(8082));
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168 $sid = $s->new_stream({ body => 'TEST' });
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169 $frames = $s->read(all => [{ type => 'RST_STREAM' }], wait => 0.5);
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 is($frame->{code}, 3, 'zero preread - FLOW_CONTROL_ERROR');
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174 }
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 # zero preread size - limited
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
178 $s = Test::Nginx::HTTP2->new(port(8082));
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 $sid = $s->new_stream({ path => '/req', body => 'TEST' });
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180 $frames = $s->read(all => [{ type => 'RST_STREAM' }]);
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 is($frame->{code}, 3, 'zero preread limited - FLOW_CONTROL_ERROR');
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
185
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186 # REFUSED_STREAM on request body prior SETTINGS acknowledgement
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
188 $s = Test::Nginx::HTTP2->new(port(8080), pure => 1);
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189 $sid = $s->new_stream({ body => 'TEST' });
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190 $frames = $s->read(all => [{ type => 'RST_STREAM' }]);
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
191
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
193 is($frame->{code}, 7, 'no SETTINGS ack - REFUSED_STREAM');
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195 # default preread size - no REFUSED_STREAM expected
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 962
diff changeset
197 $s = Test::Nginx::HTTP2->new(port(8083), pure => 1);
954
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 $sid = $s->new_stream({ body => 'TEST' });
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202 is($frame->{headers}->{'x-body'}, 'TEST', 'no SETTINGS ack - default preread');
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203
b9692ec5a08b Tests: HTTP/2 request body preread tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204 ###############################################################################