annotate h2_request_body_extra.t @ 1976:4e79bd25642f default tip

Tests: added test for headers without a colon.
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 11 May 2024 18:56:23 +0300
parents 2a0a6035a1af
children
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 $t->plan(50);
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
1900
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1726
diff changeset
92 # suppress deprecation warning
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1726
diff changeset
93
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1726
diff changeset
94 open OLDERR, ">&", \*STDERR; close STDERR;
1726
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 $t->run();
1900
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1726
diff changeset
96 open STDERR, ">&", \*OLDERR;
1726
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97
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 # 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
101 # 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
102 #
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 # buffered vs. non-buffered, length vs. chunked,
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 # single frame vs. multiple frames
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 #
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 # 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
107 # 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
108 # is used in unbuffered tests
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 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
111
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 like(http2_get_body('/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 qr/x-body: 0123456789$/ms, 'body');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 like(http2_get_body('/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 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
116 like(http2_get_body('/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 qr/x-body-file/ms, 'body in file');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 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
119 qr/^(0123456789){512}$/s, 'body in file only');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 like(http2_get_body('/single', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 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
122 like(http2_get_body('/large', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 qr/:status: 413/, 'body too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 # without Content-Length header
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 like(http2_get_body_nolen('/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 qr/x-body: 0123456789$/ms, 'body nolen');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 like(http2_get_body_nolen('/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 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
131 like(http2_get_body_nolen('/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 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
133 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
134 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
135 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
136 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
137 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
138 qr/:status: 413/, 'body nolen too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 # with multiple frames
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 like(http2_get_body_multi('/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 qr/x-body: 0123456789$/ms, 'body multi');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 like(http2_get_body_multi('/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 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
146 like(http2_get_body_multi('/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 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
148 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
149 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
150 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
151 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
152 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
153 qr/:status: 413/, 'body multi too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 # with multiple frames and without Content-Length header
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 like(http2_get_body_multi_nolen('/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 qr/x-body: 0123456789$/ms, 'body multi nolen');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159 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
160 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
161 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
162 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
163 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
164 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
165 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
166 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
167 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
168 qr/:status: 413/, 'body multi nolen too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170 # unbuffered
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172 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
173
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 like(http2_get_body('/unbuf/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 qr/x-body: 0123456789$/ms, 'body unbuf');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 like(http2_get_body('/unbuf/', '0123456789' x 128),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 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
178 like(http2_get_body('/unbuf/', '0123456789' x 512),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 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
180 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
181 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
182 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
183 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
184 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
185 qr/:status: 413/, 'body unbuf too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 # unbuffered without Content-Length
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189 like(http2_get_body_nolen('/unbuf/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 qr/x-body: 0123456789$/ms, 'body unbuf nolen');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 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
192 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
193 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
194 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
195 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
196 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
197 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
198 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
199 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
200 qr/:status: 413/, 'body unbuf nolen too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202 # unbuffered with multiple frames
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 like(http2_get_body_multi('/unbuf/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 qr/x-body: 0123456789$/ms, 'body unbuf multi');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206 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
207 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
208 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
209 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
210 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
211 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
212 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
213 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
214 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
215 qr/:status: 413/, 'body unbuf multi too large');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217 # unbuffered with multiple frames and without Content-Length
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 like(http2_get_body_multi_nolen('/unbuf/', '0123456789'),
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 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
221 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
222 qr/x-body: (0123456789){128}$/ms,
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
223 'body unbuf multi nolen in two buffers');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 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
225 qr/(?!.*x-unbuf-file.*)x-body-file/ms,
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226 'body unbuf multi nolen in file');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227 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
228 '0123456789' x 512)), qr/^(0123456789){512}$/s,
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 'body unbuf multi nolen in file only');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 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
231 qr/x-body: (0123456789){128}$/ms,
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 'body unbuf multi nolen in single buffer');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 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
234 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
235
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 sub http2_get {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 my ($uri) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
240
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
241 my $s = Test::Nginx::HTTP2->new();
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242 my $sid = $s->new_stream({ path => $uri });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 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
244
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 return join("\n", map { "$_: " . $frame->{headers}->{$_}; }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 keys %{$frame->{headers}});
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 }
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 sub http2_get_body {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 my ($uri, $body) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 my $s = Test::Nginx::HTTP2->new();
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 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
256 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
257
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 return join("\n", map { "$_: " . $frame->{headers}->{$_}; }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261 keys %{$frame->{headers}});
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262 }
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 sub http2_get_body_nolen {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 my ($uri, $body) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
267 my $s = Test::Nginx::HTTP2->new();
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 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
269 $s->h2_body($body);
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 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
271
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274 return join("\n", map { "$_: " . $frame->{headers}->{$_}; }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275 keys %{$frame->{headers}});
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276 }
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 sub http2_get_body_multi {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
279 my ($uri, $body) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
280
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
281 my $s = Test::Nginx::HTTP2->new();
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282 my $sid = $s->new_stream({
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
283 headers => [
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
284 { name => ':method', value => 'GET' },
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
285 { name => ':scheme', value => 'http' },
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
286 { name => ':path', value => $uri },
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
287 { name => ':authority', value => 'localhost' },
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
288 { name => 'content-length', value => length $body },
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
289 ],
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
290 body_more => 1
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
291 });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
292 for my $b (split //, $body, 10) {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
293 $s->h2_body($b, { body_more => 1 });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
294 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
295 select undef, undef, undef, 0.1;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
296 $s->h2_body('');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
297 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
298
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
299 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
300
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
301 return join("\n", map { "$_: " . $frame->{headers}->{$_}; }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
302 keys %{$frame->{headers}});
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
303 }
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 sub http2_get_body_multi_nolen {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
306 my ($uri, $body) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
307
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
308 my $s = Test::Nginx::HTTP2->new();
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
309 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
310 for my $b (split //, $body, 10) {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
311 $s->h2_body($b, { body_more => 1 });
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
312 }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
313 select undef, undef, undef, 0.1;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
314 $s->h2_body('');
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
315 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
316
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
317 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
318
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
319 return join("\n", map { "$_: " . $frame->{headers}->{$_}; }
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
320 keys %{$frame->{headers}});
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
321 }
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 sub read_body_file {
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
324 my ($r) = @_;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
325 return '' unless $r =~ m/x-body-file: (.*)/;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
326 open FILE, $1
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
327 or return "$!";
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
328 local $/;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
329 my $content = <FILE>;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
330 close FILE;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
331 return $content;
f66266cc82c8 Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
332 }
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 ###############################################################################