annotate h2_request_body.t @ 1961:fe6f22da53ec default tip

Tests: tests for usage of discarded body. The client_max_body_size limit should be ignored when the request body is already discarded. In HTTP/1.x, this is done by checking the r->discard_body flag when the body is being discarded, and because r->headers_in.content_length_n is 0 when it's already discarded. This, however, does not happen with HTTP/2 and HTTP/3, and therefore "error_page 413" does not work without relaxing the limit. Further, with proxy_pass, r->headers_in.content_length_n is used to determine length of the request body, and therefore is not correct if discarding of the request body isn't yet complete. While discarding the request body, r->headers_in.content_length_n contains the rest of the body to discard (or, in case of chunked request body, the rest of the current chunk to discard). Similarly, the $content_length variable uses r->headers_in.content_length if available, and also incorrect. The $content_length variable is used when proxying with fastcgi_pass, grpc_pass, and uwsgi_pass (scgi_pass uses the value calculated based on the actual request body buffers, and therefore works correctly).
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 27 Apr 2024 18:55:50 +0300
parents 236d038dc04a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6 # Tests for HTTP/2 protocol with request body.
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8 ###############################################################################
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use warnings;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use strict;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13 use Test::More;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17 use lib 'lib';
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
19 use Test::Nginx::HTTP2;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21 ###############################################################################
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25
1728
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy/)->plan(49);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28 $t->write_file_expand('nginx.conf', <<'EOF');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30 %%TEST_GLOBALS%%
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32 daemon off;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34 events {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37 http {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
40 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 955
diff changeset
41 listen 127.0.0.1:8080 http2;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 955
diff changeset
42 listen 127.0.0.1:8081;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
43 server_name localhost;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44
1597
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
45 error_page 400 /proxy2/t.html;
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
46
955
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
47 location / {
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
48 add_header X-Length $http_content_length;
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
49 }
1226
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
50 location /slow {
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
51 limit_rate 100;
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
52 }
1091
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
53 location /off/ {
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
54 proxy_pass http://127.0.0.1:8081/;
1226
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
55 add_header X-Body $request_body;
1091
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
56 add_header X-Body-File $request_body_file;
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
57 }
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 location /proxy2/ {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59 add_header X-Body $request_body;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60 add_header X-Body-File $request_body_file;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61 client_body_in_file_only on;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 955
diff changeset
62 proxy_pass http://127.0.0.1:8081/;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64 location /client_max_body_size {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65 add_header X-Body $request_body;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 add_header X-Body-File $request_body_file;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67 client_body_in_single_buffer on;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68 client_body_in_file_only on;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 955
diff changeset
69 proxy_pass http://127.0.0.1:8081/;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70 client_max_body_size 10;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 EOF
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 $t->write_file('index.html', '');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78 $t->write_file('t.html', 'SEE-THIS');
1226
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
79 $t->write_file('slow.html', 'SEE-THIS');
1900
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1728
diff changeset
80
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1728
diff changeset
81 # suppress deprecation warning
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1728
diff changeset
82
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1728
diff changeset
83 open OLDERR, ">&", \*STDERR; close STDERR;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84 $t->run();
1900
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1728
diff changeset
85 open STDERR, ">&", \*OLDERR;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 ###############################################################################
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89 # request body (uses proxied response)
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
91 my $s = Test::Nginx::HTTP2->new();
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
92 my $sid = $s->new_stream({ path => '/proxy2/t.html', body => 'TEST' });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
93 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TEST', 'request body');
955
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
97 is($frame->{headers}->{'x-length'}, 4, 'request body - content length');
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99 # request body with padding (uses proxied response)
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
101 $s = Test::Nginx::HTTP2->new();
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
102 $sid = $s->new_stream(
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
103 { path => '/proxy2/t.html', body => 'TEST', body_padding => 42 });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
104 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TEST',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108 'request body with padding');
955
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
109 is($frame->{headers}->{'x-length'}, 4,
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
110 'request body with padding - content length');
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
112 $sid = $s->new_stream();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
113 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
115 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
116 is($frame->{headers}->{':status'}, '200', 'request body with padding - next');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
117
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
118 # request body sent in multiple DATA frames in a single packet
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
119
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
120 $s = Test::Nginx::HTTP2->new();
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
121 $sid = $s->new_stream(
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
122 { path => '/proxy2/t.html', body => 'TEST', body_split => [2] });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
123 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
124
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
125 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
126 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TEST',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
127 'request body in multiple frames');
955
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
128 is($frame->{headers}->{'x-length'}, 4,
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
129 'request body in multiple frames - content length');
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
130
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
131 # request body sent in multiple DATA frames, each in its own packet
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
132
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
133 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
134 $sid = $s->new_stream({ path => '/proxy2/t.html', body_more => 1 });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
135 $s->h2_body('TEST', { body_more => 1 });
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
136 select undef, undef, undef, 0.1;
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
137 $s->h2_body('MOREDATA');
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
138 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
139
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
140 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
141 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTMOREDATA',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
142 'request body in multiple frames separately');
955
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
143 is($frame->{headers}->{'x-length'}, 12,
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
144 'request body in multiple frames separately - content length');
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
145
1728
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
146 # if run with body buffering in filters, it's expected to update window
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
147 # after request body populates initial stream window size set for preread
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
148
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
149 $s = Test::Nginx::HTTP2->new();
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
150 $sid = $s->new_stream({ path => '/proxy2/t.html', body_more => 1 });
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
151 $s->h2_body('01234567' x 2048, { body_more => 1 });
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
152 select undef, undef, undef, 0.1;
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
153 $s->h2_body('01234567' x 2048, { body_more => 1 });
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
154 select undef, undef, undef, 0.1;
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
155 $s->h2_body('01234567' x 2048, { body_more => 1 });
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
156 select undef, undef, undef, 0.1;
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
157 $s->h2_body('01234567' x 2048, { body_more => 1 });
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
158
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
159 $frames = $s->read(all => [{ type => 'WINDOW_UPDATE' }]);
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
160 ($frame) = grep { $_->{type} eq 'WINDOW_UPDATE' } @$frames;
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
161 is($frame->{sid}, $sid, 'big request body - WINDOW_UPDATE sid');
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
162 cmp_ok($frame->{wdelta}, '>=', 65536, 'big request body - WINDOW_UPDATE delta');
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
163
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
164 $s->h2_body('01234567' x 2048);
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
165
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
166 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
167 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
168 is(read_body_file($frame->{headers}->{'x-body-file'}), '01234567' x 10240,
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
169 'big request body - content');
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
170 is($frame->{headers}->{'x-length'}, 81920,
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
171 'big request body - content length');
6d5ecf445e57 Tests: added HTTP/2 test with big request body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1721
diff changeset
172
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
173 # request body with an empty DATA frame
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
174 # "zero size buf in output" alerts seen
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
175
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
176 $s = Test::Nginx::HTTP2->new();
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
177 $sid = $s->new_stream({ path => '/proxy2/', body => '' });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
178 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
179
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
180 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
181 is($frame->{headers}->{':status'}, 200, 'request body - empty');
955
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
182 is($frame->{headers}->{'x-length'}, 0, 'request body - empty size');
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
183 ok($frame->{headers}{'x-body-file'}, 'request body - empty body file');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
184 is(read_body_file($frame->{headers}{'x-body-file'}), '',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
185 'request body - empty content');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
186
955
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
187 # it is expected to avoid adding Content-Length for requests without body
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
188
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
189 $s = Test::Nginx::HTTP2->new();
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
190 $sid = $s->new_stream({ path => '/proxy2/' });
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
191 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
192
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
193 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
194 is($frame->{headers}->{':status'}, 200, 'request without body');
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
195 is($frame->{headers}->{'x-length'}, undef,
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
196 'request without body - content length');
b8948aecba12 Tests: HTTP/2 request body Content-Length tests in proxied request.
Sergey Kandaurov <pluknet@nginx.com>
parents: 952
diff changeset
197
888
4ab795ab2e62 Tests: added HTTP/2 test for zero RST_STREAM if discarding body.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 886
diff changeset
198 # request body discarded
4ab795ab2e62 Tests: added HTTP/2 test for zero RST_STREAM if discarding body.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 886
diff changeset
199 # RST_STREAM with zero code received
4ab795ab2e62 Tests: added HTTP/2 test for zero RST_STREAM if discarding body.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 886
diff changeset
200
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
201 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
202 $sid = $s->new_stream({ body_more => 1 });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
203 $frames = $s->read(all => [{ type => 'RST_STREAM' }], wait => 0.5);
888
4ab795ab2e62 Tests: added HTTP/2 test for zero RST_STREAM if discarding body.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 886
diff changeset
204
4ab795ab2e62 Tests: added HTTP/2 test for zero RST_STREAM if discarding body.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 886
diff changeset
205 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames;
4ab795ab2e62 Tests: added HTTP/2 test for zero RST_STREAM if discarding body.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 886
diff changeset
206 is($frame->{code}, 0, 'request body discarded - zero RST_STREAM');
4ab795ab2e62 Tests: added HTTP/2 test for zero RST_STREAM if discarding body.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 886
diff changeset
207
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
208 # malformed request body length not equal to content-length
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
209
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
210 $s = Test::Nginx::HTTP2->new();
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
211 $sid = $s->new_stream({ body => 'TEST', headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
212 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
213 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
214 { name => ':path', value => '/client_max_body_size', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
215 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
216 { name => 'content-length', value => '5', mode => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
217 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
218
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
219 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
220 is($frame->{headers}->{':status'}, 400, 'request body less than content-length');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
221
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
222 $sid = $s->new_stream({ body => 'TEST', headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
223 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
224 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
225 { name => ':path', value => '/client_max_body_size', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
226 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
227 { name => 'content-length', value => '3', mode => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
228 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
229
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
230 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
231 is($frame->{headers}->{':status'}, 400, 'request body more than content-length');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
232
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
233 # client_max_body_size
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
234
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
235 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
236 $sid = $s->new_stream({ path => '/client_max_body_size/t.html',
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
237 body => 'TESTTEST12' });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
238 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
239
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
240 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
241 is($frame->{headers}->{':status'}, 200, 'client_max_body_size - status');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
242 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
243 'client_max_body_size - body');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
244
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
245 # client_max_body_size - limited
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
246
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
247 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
248 $sid = $s->new_stream({ path => '/client_max_body_size/t.html',
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
249 body => 'TESTTEST123' });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
250 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
251
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
252 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
253 is($frame->{headers}->{':status'}, 413, 'client_max_body_size - limited');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
254
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
255 # client_max_body_size - many DATA frames
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
256
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
257 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
258 $sid = $s->new_stream({ path => '/client_max_body_size/t.html',
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
259 body => 'TESTTEST12', body_split => [2] });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
260 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
261
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
262 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
263 is($frame->{headers}->{':status'}, 200, 'client_max_body_size many - status');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
264 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
265 'client_max_body_size many - body');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
266
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
267 # client_max_body_size - many DATA frames - limited
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
268
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
269 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
270 $sid = $s->new_stream({ path => '/client_max_body_size/t.html',
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
271 body => 'TESTTEST123', body_split => [2] });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
272 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
273
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
274 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
275 is($frame->{headers}->{':status'}, 413, 'client_max_body_size many - limited');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
276
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
277 # client_max_body_size - padded DATA
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
278
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
279 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
280 $sid = $s->new_stream({ path => '/client_max_body_size/t.html',
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
281 body => 'TESTTEST12', body_padding => 42 });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
282 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
283
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
284 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
285 is($frame->{headers}->{':status'}, 200, 'client_max_body_size pad - status');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
286 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
287 'client_max_body_size pad - body');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
288
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
289 # client_max_body_size - padded DATA - limited
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
290
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
291 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
292 $sid = $s->new_stream({ path => '/client_max_body_size/t.html',
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
293 body => 'TESTTEST123', body_padding => 42 });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
294 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
295
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
296 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
297 is($frame->{headers}->{':status'}, 413, 'client_max_body_size pad - limited');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
298
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
299 # client_max_body_size - many padded DATA frames
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
300
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
301 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
302 $sid = $s->new_stream({ path => '/client_max_body_size/t.html',
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
303 body => 'TESTTEST12', body_padding => 42, body_split => [2] });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
304 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
305
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
306 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
307 is($frame->{headers}->{':status'}, 200,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
308 'client_max_body_size many pad - status');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
309 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
310 'client_max_body_size many pad - body');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
311
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
312 # client_max_body_size - many padded DATA frames - limited
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
313
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
314 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
315 $sid = $s->new_stream({ path => '/client_max_body_size/t.html',
1721
6842b0f7fb9e Tests: restored HTTP/2 request body tests with Content-Length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
316 body => 'TESTTEST123', body_padding => 42, body_split => [2] });
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
317 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
318
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
319 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
320 is($frame->{headers}->{':status'}, 413,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
321 'client_max_body_size many pad - limited');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
322
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
323 # request body without content-length
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
324
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
325 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
326 $sid = $s->new_stream({ body_more => 1, headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
327 { name => ':method', value => 'GET', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
328 { name => ':scheme', value => 'http', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
329 { name => ':path', value => '/client_max_body_size', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
330 { name => ':authority', value => 'localhost', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
331 $s->h2_body('TESTTEST12');
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
332 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
333
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
334 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
335 is($frame->{headers}->{':status'}, 200,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
336 'request body without content-length - status');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
337 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
338 'request body without content-length - body');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
339
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
340 # request body without content-length - limited
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
341
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
342 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
343 $sid = $s->new_stream({ body_more => 1, headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
344 { name => ':method', value => 'GET', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
345 { name => ':scheme', value => 'http', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
346 { name => ':path', value => '/client_max_body_size', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
347 { name => ':authority', value => 'localhost', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
348 $s->h2_body('TESTTEST123');
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
349 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
350
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
351 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
352 is($frame->{headers}->{':status'}, 413,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
353 'request body without content-length - limited');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
354
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
355 # request body without content-length - many DATA frames
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
356
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
357 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
358 $sid = $s->new_stream({ body_more => 1, headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
359 { name => ':method', value => 'GET', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
360 { name => ':scheme', value => 'http', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
361 { name => ':path', value => '/client_max_body_size', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
362 { name => ':authority', value => 'localhost', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
363 $s->h2_body('TESTTEST12', { body_split => [2] });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
364 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
365
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
366 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
367 is($frame->{headers}->{':status'}, 200,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
368 'request body without content-length many - status');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
369 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
370 'request body without content-length many - body');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
371
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
372 # request body without content-length - many DATA frames - limited
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
373
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
374 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
375 $sid = $s->new_stream({ body_more => 1, headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
376 { name => ':method', value => 'GET', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
377 { name => ':scheme', value => 'http', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
378 { name => ':path', value => '/client_max_body_size', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
379 { name => ':authority', value => 'localhost', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
380 $s->h2_body('TESTTEST123', { body_split => [2] });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
381 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
382
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
383 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
384 is($frame->{headers}->{':status'}, 413,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
385 'request body without content-length many - limited');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
386
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
387 # request body without content-length - padding
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
388
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
389 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
390 $sid = $s->new_stream({ body_more => 1, headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
391 { name => ':method', value => 'GET', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
392 { name => ':scheme', value => 'http', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
393 { name => ':path', value => '/client_max_body_size', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
394 { name => ':authority', value => 'localhost', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
395 $s->h2_body('TESTTEST12', { body_padding => 42 });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
396 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
397
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
398 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
399 is($frame->{headers}->{':status'}, 200,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
400 'request body without content-length pad - status');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
401 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
402 'request body without content-length pad - body');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
403
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
404 # request body without content-length - padding - limited
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
405
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
406 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
407 $sid = $s->new_stream({ body_more => 1, headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
408 { name => ':method', value => 'GET', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
409 { name => ':scheme', value => 'http', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
410 { name => ':path', value => '/client_max_body_size', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
411 { name => ':authority', value => 'localhost', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
412 $s->h2_body('TESTTEST123', { body_padding => 42 });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
413 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
414
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
415 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
416 is($frame->{headers}->{':status'}, 413,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
417 'request body without content-length pad - limited');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
418
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
419 # request body without content-length - padding with many DATA frames
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
420
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
421 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
422 $sid = $s->new_stream({ body_more => 1, headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
423 { name => ':method', value => 'GET', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
424 { name => ':scheme', value => 'http', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
425 { name => ':path', value => '/client_max_body_size', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
426 { name => ':authority', value => 'localhost', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
427 $s->h2_body('TESTTEST', { body_padding => 42, body_split => [2] });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
428 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
429
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
430 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
431 is($frame->{headers}->{':status'}, 200,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
432 'request body without content-length many pad - status');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
433 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
434 'request body without content-length many pad - body');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
435
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
436 # request body without content-length - padding with many DATA frames - limited
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
437
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
438 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
439 $sid = $s->new_stream({ body_more => 1, headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
440 { name => ':method', value => 'GET', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
441 { name => ':scheme', value => 'http', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
442 { name => ':path', value => '/client_max_body_size', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
443 { name => ':authority', value => 'localhost', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
444 $s->h2_body('TESTTEST123', { body_padding => 42, body_split => [2] });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
445 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
446
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
447 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
448 is($frame->{headers}->{':status'}, 413,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
449 'request body without content-length many pad - limited');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
450
1091
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
451 # absent request body is not buffered with client_body_in_file_only off
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
452 # see e02f1977846b for details
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
453
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
454 $s = Test::Nginx::HTTP2->new();
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
455 $sid = $s->new_stream({ path => '/off/t.html' });
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
456 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
457
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
458 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
459 is($frame->{headers}->{'x-body-file'}, undef, 'no request body in file');
a5e428f4440d Tests: added request body buffering test for requests without body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1070
diff changeset
460
1226
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
461 # ticket #1384, request body corruption in recv_buffer
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
462
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
463 $s = Test::Nginx::HTTP2->new();
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
464 $sid = $s->new_stream({ path => '/off/slow.html', body_more => 1 });
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
465 select undef, undef, undef, 0.1;
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
466
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
467 # for simplicity, DATA frame is received on its own for a known offset
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
468
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
469 $s->h2_body('TEST');
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
470 select undef, undef, undef, 0.1;
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
471
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
472 # overwrite recv_buffer; since upstream response arrival is delayed,
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
473 # this would make $request_body point to the overridden buffer space
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
474
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
475 $s->h2_ping('xxxx');
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
476
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
477 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
478 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
479 isnt($frame->{headers}->{'x-body'}, 'xxxx', 'sync buffer');
124322e9accd Tests: HTTP/2 request body sync buffer test added (ticket #1384).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1091
diff changeset
480
1597
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
481 # request body after 400 errors redirected to a proxied location
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
482
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
483 $s = Test::Nginx::HTTP2->new();
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
484 $sid = $s->new_stream({ body => "", headers => [
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
485 { name => ':method', value => "" }]});
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
486
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
487 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
488 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
489 is($frame->{data}, 'SEE-THIS', 'request body after 400 redirect');
36d69685605e Tests: added HTTP/2 tests for DATA frames after 400 errors.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1511
diff changeset
490
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
491 ###############################################################################
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
492
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
493 sub read_body_file {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
494 my ($path) = @_;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
495 open FILE, $path or return "$!";
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
496 local $/;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
497 my $content = <FILE>;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
498 close FILE;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
499 return $content;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
500 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
501
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
502 ###############################################################################