annotate h2_request_body_extra.t @ 1912:f61d1b4ac638

Tests: unbreak quic_ciphers.t with AEAD_AES_128_CCM enabled. Although CCM ciphers are disabled in a stock OpenSSL as rarely used, "to reduce ClientHello bloat", AEAD_AES_128_CCM is apparently turned back in certain distributions such as RHEL. Previously, this caused testing connections to fail as the CCM cipher being negotiated isn't supported yet in nginx. Now the test is skipped instead on failure. While here, fixed nearby style.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 14 Jun 2023 16:57:01 +0400
parents 236d038dc04a
children 2a0a6035a1af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1726
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4 # (C) Nginx, Inc.
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6 # Tests for HTTP/2 protocol with request body, additional tests.
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8 ###############################################################################
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use warnings;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11 use strict;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 use Test::More;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use lib 'lib';
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use Test::Nginx;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 use Test::Nginx::HTTP2;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 ###############################################################################
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 select STDERR; $| = 1;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 select STDOUT; $| = 1;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite/);
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 $t->write_file_expand('nginx.conf', <<'EOF');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 %%TEST_GLOBALS%%
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 daemon off;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 events {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 http {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 server {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 listen 127.0.0.1:8080 http2;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 listen 127.0.0.1:8081;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 server_name localhost;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 client_header_buffer_size 1k;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 client_body_buffer_size 2k;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 location / {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 add_header X-Body $request_body;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 add_header X-Body-File $request_body_file;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 proxy_pass http://127.0.0.1:8082;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 location /file {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 client_body_in_file_only on;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 add_header X-Body "$request_body";
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 add_header X-Body-File "$request_body_file";
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 proxy_pass http://127.0.0.1:8082;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 location /single {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 client_body_in_single_buffer on;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 add_header X-Body "$request_body";
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 add_header X-Body-File "$request_body_file";
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 proxy_pass http://127.0.0.1:8082;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 location /large {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 client_max_body_size 1k;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 proxy_pass http://127.0.0.1:8082;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 location /unbuf/ {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 add_header X-Unbuf-File "$request_body_file";
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 proxy_pass http://127.0.0.1:8081/;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 proxy_request_buffering off;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 proxy_http_version 1.1;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 server {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 listen 127.0.0.1:8082;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 server_name localhost;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 return 204;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 EOF
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 plan(skip_all => 'not yet') unless $t->has_version('1.21.2');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 $t->plan(50);
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92
1900
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1726
diff changeset
93 # suppress deprecation warning
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1726
diff changeset
94
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1726
diff changeset
95 open OLDERR, ">&", \*STDERR; close STDERR;
1726
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 $t->run();
1900
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1726
diff changeset
97 open STDERR, ">&", \*OLDERR;
1726
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 ###############################################################################
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 # below are basic body tests from body.t, slightly
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 # adapted to HTTP/2, repeated multiple times with variations:
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 #
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 # buffered vs. non-buffered, length vs. chunked,
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 # single frame vs. multiple frames
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 #
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 # some does not make sense in HTTP/2 (such as "body in two buffers"), but
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 # preserved for consistency and due to the fact that proxying via HTTP/1.1
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 # is used in unbuffered tests
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 unlike(http2_get('/'), qr/x-body:/ms, 'no body');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 like(http2_get_body('/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 qr/x-body: 0123456789$/ms, 'body');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 like(http2_get_body('/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 qr/x-body: (0123456789){128}$/ms, 'body in two buffers');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 like(http2_get_body('/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 qr/x-body-file/ms, 'body in file');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 like(read_body_file(http2_get_body('/file', '0123456789' x 512)),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 qr/^(0123456789){512}$/s, 'body in file only');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 like(http2_get_body('/single', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 qr/x-body: (0123456789){128}$/ms, 'body in single buffer');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 like(http2_get_body('/large', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 qr/:status: 413/, 'body too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 # without Content-Length header
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 like(http2_get_body_nolen('/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 qr/x-body: 0123456789$/ms, 'body nolen');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 like(http2_get_body_nolen('/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 qr/x-body: (0123456789){128}$/ms, 'body nolen in two buffers');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 like(http2_get_body_nolen('/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 qr/x-body-file/ms, 'body nolen in file');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 like(read_body_file(http2_get_body_nolen('/file', '0123456789' x 512)),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 qr/^(0123456789){512}$/s, 'body nolen in file only');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 like(http2_get_body_nolen('/single', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 qr/x-body: (0123456789){128}$/ms, 'body nolen in single buffer');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 like(http2_get_body_nolen('/large', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 qr/:status: 413/, 'body nolen too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 # with multiple frames
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 like(http2_get_body_multi('/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 qr/x-body: 0123456789$/ms, 'body multi');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 like(http2_get_body_multi('/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 qr/x-body: (0123456789){128}$/ms, 'body multi in two buffers');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 like(http2_get_body_multi('/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 qr/x-body-file/ms, 'body multi in file');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 like(read_body_file(http2_get_body_multi('/file', '0123456789' x 512)),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 qr/^(0123456789){512}$/s, 'body multi in file only');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151 like(http2_get_body_multi('/single', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 qr/x-body: (0123456789){128}$/ms, 'body multi in single buffer');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 like(http2_get_body_multi('/large', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 qr/:status: 413/, 'body multi too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 # with multiple frames and without Content-Length header
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 like(http2_get_body_multi_nolen('/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159 qr/x-body: 0123456789$/ms, 'body multi nolen');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 like(http2_get_body_multi_nolen('/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 qr/x-body: (0123456789){128}/ms, 'body multi nolen in two buffers');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 like(http2_get_body_multi_nolen('/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 qr/x-body-file/ms, 'body multi nolen in file');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 like(read_body_file(http2_get_body_multi_nolen('/file', '0123456789' x 512)),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 qr/^(0123456789){512}$/s, 'body multi nolen in file only');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 like(http2_get_body_multi_nolen('/single', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 qr/x-body: (0123456789){128}$/ms, 'body multi nolen in single buffer');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168 like(http2_get_body_multi_nolen('/large', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 qr/:status: 413/, 'body multi nolen too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 # unbuffered
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 unlike(http2_get('/unbuf/'), qr/x-body:/ms, 'no body unbuf');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 like(http2_get_body('/unbuf/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 qr/x-body: 0123456789$/ms, 'body unbuf');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 like(http2_get_body('/unbuf/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 qr/x-body: (0123456789){128}$/ms, 'body unbuf in two buffers');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 like(http2_get_body('/unbuf/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 qr/(?!.*x-unbuf-file.*)x-body-file/ms, 'body unbuf in file');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 like(read_body_file(http2_get_body('/unbuf/file', '0123456789' x 512)),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 qr/^(0123456789){512}$/s, 'body unbuf in file only');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183 like(http2_get_body('/unbuf/single', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 qr/x-body: (0123456789){128}$/ms, 'body unbuf in single buffer');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185 like(http2_get_body('/unbuf/large', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 qr/:status: 413/, 'body unbuf too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 # unbuffered without Content-Length
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 like(http2_get_body_nolen('/unbuf/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 qr/x-body: 0123456789$/ms, 'body unbuf nolen');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 like(http2_get_body_nolen('/unbuf/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193 qr/x-body: (0123456789){128}$/ms, 'body unbuf nolen in two buffers');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194 like(http2_get_body_nolen('/unbuf/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 qr/(?!.*x-unbuf-file.*)x-body-file/ms, 'body unbuf nolen in file');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196 like(read_body_file(http2_get_body_nolen('/unbuf/file', '0123456789' x 512)),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 qr/^(0123456789){512}$/s, 'body unbuf nolen in file only');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198 like(http2_get_body_nolen('/unbuf/single', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 qr/x-body: (0123456789){128}$/ms, 'body unbuf nolen in single buffer');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 like(http2_get_body_nolen('/unbuf/large', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 qr/:status: 413/, 'body unbuf nolen too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203 # unbuffered with multiple frames
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 like(http2_get_body_multi('/unbuf/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206 qr/x-body: 0123456789$/ms, 'body unbuf multi');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207 like(http2_get_body_multi('/unbuf/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 qr/x-body: (0123456789){128}$/ms, 'body unbuf multi in two buffers');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 like(http2_get_body_multi('/unbuf/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 qr/(?!.*x-unbuf-file.*)x-body-file/ms, 'body unbuf multi in file');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 like(read_body_file(http2_get_body_multi('/unbuf/file', '0123456789' x 512)),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
212 qr/^(0123456789){512}$/s, 'body unbuf multi in file only');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
213 like(http2_get_body_multi('/unbuf/single', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
214 qr/x-body: (0123456789){128}$/ms, 'body unbuf multi in single buffer');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 like(http2_get_body_multi('/unbuf/large', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 qr/:status: 413/, 'body unbuf multi too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218 # unbuffered with multiple frames and without Content-Length
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 like(http2_get_body_multi_nolen('/unbuf/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 qr/x-body: 0123456789$/ms, 'body unbuf multi nolen');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
222 like(http2_get_body_multi_nolen('/unbuf/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
223 qr/x-body: (0123456789){128}$/ms,
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 'body unbuf multi nolen in two buffers');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
225 like(http2_get_body_multi_nolen('/unbuf/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226 qr/(?!.*x-unbuf-file.*)x-body-file/ms,
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227 'body unbuf multi nolen in file');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 like(read_body_file(http2_get_body_multi_nolen('/unbuf/file',
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 '0123456789' x 512)), qr/^(0123456789){512}$/s,
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 'body unbuf multi nolen in file only');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 like(http2_get_body_multi_nolen('/unbuf/single', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 qr/x-body: (0123456789){128}$/ms,
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 'body unbuf multi nolen in single buffer');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 like(http2_get_body_multi_nolen('/unbuf/large', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235 qr/:status: 413/, 'body unbuf multi nolen too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
236
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
237 ###############################################################################
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 sub http2_get {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
240 my ($uri) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
241
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242 my $s = Test::Nginx::HTTP2->new();
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 my $sid = $s->new_stream({ path => $uri });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 return join("\n", map { "$_: " . $frame->{headers}->{$_}; }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 keys %{$frame->{headers}});
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 sub http2_get_body {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 my ($uri, $body) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 my $s = Test::Nginx::HTTP2->new();
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256 my $sid = $s->new_stream({ path => $uri, body => $body });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261 return join("\n", map { "$_: " . $frame->{headers}->{$_}; }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262 keys %{$frame->{headers}});
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 sub http2_get_body_nolen {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266 my ($uri, $body) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
267
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 my $s = Test::Nginx::HTTP2->new();
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269 my $sid = $s->new_stream({ path => $uri, body_more => 1 });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 $s->h2_body($body);
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275 return join("\n", map { "$_: " . $frame->{headers}->{$_}; }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276 keys %{$frame->{headers}});
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
277 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
278
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
279 sub http2_get_body_multi {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
280 my ($uri, $body) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
281
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282 my $s = Test::Nginx::HTTP2->new();
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
283 my $sid = $s->new_stream({
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
284 headers => [
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
285 { name => ':method', value => 'GET' },
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
286 { name => ':scheme', value => 'http' },
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
287 { name => ':path', value => $uri },
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
288 { name => ':authority', value => 'localhost' },
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
289 { name => 'content-length', value => length $body },
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
290 ],
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
291 body_more => 1
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
292 });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
293 for my $b (split //, $body, 10) {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
294 $s->h2_body($b, { body_more => 1 });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
295 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
296 select undef, undef, undef, 0.1;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
297 $s->h2_body('');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
298 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
299
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
300 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
301
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
302 return join("\n", map { "$_: " . $frame->{headers}->{$_}; }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
303 keys %{$frame->{headers}});
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
304 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
305
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
306 sub http2_get_body_multi_nolen {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
307 my ($uri, $body) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
308
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
309 my $s = Test::Nginx::HTTP2->new();
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
310 my $sid = $s->new_stream({ path => $uri, body_more => 1 });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
311 for my $b (split //, $body, 10) {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
312 $s->h2_body($b, { body_more => 1 });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
313 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
314 select undef, undef, undef, 0.1;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
315 $s->h2_body('');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
316 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
317
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
318 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
319
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
320 return join("\n", map { "$_: " . $frame->{headers}->{$_}; }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
321 keys %{$frame->{headers}});
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
322 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
323
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
324 sub read_body_file {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
325 my ($r) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
326 return '' unless $r =~ m/x-body-file: (.*)/;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
327 open FILE, $1
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
328 or return "$!";
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
329 local $/;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
330 my $content = <FILE>;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
331 close FILE;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
332 return $content;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
333 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
334
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
335 ###############################################################################