annotate h2_proxy_request_buffering.t @ 908:adf5671391ac

Tests: use read_file subroutine in several tests.
author Andrey Zelenkov <zelenkov@nginx.com>
date Mon, 18 Apr 2016 19:29:57 +0300
parents 44f37197181f
children d3ff66fc7f5c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for HTTP/2 protocol with unbuffered request body.
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 use Socket qw/ CRLF /;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 BEGIN { use FindBin; chdir($FindBin::Bin); }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use lib 'lib';
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 use Test::Nginx;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 use Test::Nginx::HTTP2 qw/ :DEFAULT :frame :io /;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 ###############################################################################
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 select STDERR; $| = 1;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 select STDOUT; $| = 1;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy/);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30 $t->write_file_expand('nginx.conf', <<'EOF');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32 %%TEST_GLOBALS%%
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 daemon off;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 events {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 http {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 %%TEST_GLOBALS_HTTP%%
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 server {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 listen 127.0.0.1:8080 http2;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 server_name localhost;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 location / {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 proxy_request_buffering off;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 proxy_pass http://127.0.0.1:8081/;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 client_body_buffer_size 1k;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 location /chunked {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 proxy_request_buffering off;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 proxy_http_version 1.1;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 proxy_pass http://127.0.0.1:8081/;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 client_body_buffer_size 1k;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 EOF
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 $t->run();
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63
903
29aa547dd963 Tests: avoided potential hang in HTTP/2 unbuf request body tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 879
diff changeset
64 my $f = get_body('/chunked');
29aa547dd963 Tests: avoided potential hang in HTTP/2 unbuf request body tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 879
diff changeset
65 plan(skip_all => 'no unbuffered request body') unless $f;
29aa547dd963 Tests: avoided potential hang in HTTP/2 unbuf request body tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 879
diff changeset
66 $f->{http_end}();
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
68 $t->plan(70);
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 ###############################################################################
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 # unbuffered request body
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 $f = get_body('/', 'content-length' => 10);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 ok($f->{headers}, 'request');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 is($f->{upload}('01234', body_more => 1), '01234', 'part');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
77 is($f->{window}, 10, 'part - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 is($f->{upload}('56789'), '56789', 'part 2');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
79 is($f->{window}, 5, 'part 2 - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 is($f->{http_end}(), 200, 'response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 $f = get_body('/', 'content-length' => 10);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 ok($f->{headers}, 'much');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 is($f->{upload}('0123456789', body_more => 1), '0123456789', 'much - part');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
85 is($f->{window}, 10, 'much - part - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 is($f->{upload}('many'), '', 'much - part 2');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
87 is($f->{window}, 10, 'much - part 2 - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 is($f->{http_end}(), 400, 'much - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 $f = get_body('/', 'content-length' => 10);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 ok($f->{headers}, 'less');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 is($f->{upload}('0123', body_more => 1), '0123', 'less - part');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
93 is($f->{window}, 10, 'less - part - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 is($f->{upload}('56789'), '', 'less - part 2');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
95 is($f->{window}, 4, 'less - part 2 - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96 is($f->{http_end}(), 400, 'less - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 $f = get_body('/', 'content-length' => 18);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 ok($f->{headers}, 'many');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 is($f->{upload}('01234many', body_split => [ 5 ], body_more => 1),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 '01234many', 'many - part');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
102 is($f->{window}, 18, 'many - part - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103 is($f->{upload}('56789many', body_split => [ 5 ]),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 '56789many', 'many - part 2');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
105 is($f->{window}, 9, 'many - part 2 - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 is($f->{http_end}(), 200, 'many - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 $f = get_body('/', 'content-length' => 0);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 ok($f->{headers}, 'empty');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110 is($f->{upload}('', body_more => 1), '', 'empty - part');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
111
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
112 TODO: {
907
44f37197181f Tests: adjusted HTTP/2 TODOs.
Sergey Kandaurov <pluknet@nginx.com>
parents: 904
diff changeset
113 local $TODO = 'not yet' unless $t->has_version('1.9.15');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
114
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
115 is($f->{window}, undef, 'empty - part - window');
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
116
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
117 }
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
118
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 is($f->{upload}(''), '', 'empty - part 2');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
120 is($f->{window}, undef, 'empty - part 2 - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 is($f->{http_end}(), 200, 'empty - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 $f = get_body('/', 'content-length' => 1536);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124 ok($f->{headers}, 'buffer');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 is($f->{upload}('0123' x 128, body_more => 1), '0123' x 128,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 'buffer - below');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
127 is($f->{window}, 1024, 'buffer - below - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128 is($f->{upload}('4567' x 128, body_more => 1), '4567' x 128,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 'buffer - equal');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
130 is($f->{window}, 512, 'buffer - equal - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 is($f->{upload}('89AB' x 128), '89AB' x 128, 'buffer - above');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
132 is($f->{window}, 512, 'buffer - above - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133 is($f->{http_end}(), 200, 'buffer - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135 $f = get_body('/', 'content-length' => 10);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136 ok($f->{headers}, 'split');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
137 is($f->{upload}('0123456789', split => [ 14 ]), '0123456789', 'split');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138 is($f->{http_end}(), 200, 'split - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140 # unbuffered request body, chunked transfer-encoding
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143 ok($f->{headers}, 'chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144 is($f->{upload}('01234', body_more => 1), '5' . CRLF . '01234' . CRLF,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145 'chunked - part');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
146 is($f->{window}, 1024, 'chunked - part - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147 is($f->{upload}('56789'), '5' . CRLF . '56789' . CRLF . '0' . CRLF . CRLF,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148 'chunked - part 2');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
149 is($f->{window}, 5, 'chunked - part 2 - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150 is($f->{http_end}(), 200, 'chunked - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153 ok($f->{headers}, 'chunked buffer');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154 is($f->{upload}('0123' x 128, body_more => 1),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155 '200' . CRLF . '0123' x 128 . CRLF, 'chunked buffer - below');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
156 is($f->{window}, 1024, 'chunked buffer - below - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 is($f->{upload}('4567' x 128, body_more => 1),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158 '200' . CRLF . '4567' x 128 . CRLF, 'chunked buffer - equal');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
159 is($f->{window}, 512, 'chunked buffer - equal - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 is($f->{upload}('89AB' x 128),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 '200' . CRLF . '89AB' x 128 . CRLF . '0' . CRLF . CRLF,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 'chunked buffer - above');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
163 is($f->{window}, 512, 'chunked buffer - above - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164 is($f->{http_end}(), 200, 'chunked buffer - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167 ok($f->{headers}, 'chunked many');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168 is($f->{upload}('01234many', body_split => [ 5 ], body_more => 1),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169 '9' . CRLF . '01234many' . CRLF, 'chunked many - part');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
170 is($f->{window}, 1024, 'chunked many - part - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 is($f->{upload}('56789many', body_split => [ 5 ]),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 '9' . CRLF . '56789many' . CRLF . '0' . CRLF . CRLF,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173 'chunked many - part 2');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
174 is($f->{window}, 9, 'chunked many - part 2 - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175 is($f->{http_end}(), 200, 'chunked many - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178 ok($f->{headers}, 'chunked empty');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 is($f->{upload}('', body_more => 1), '', 'chunked empty - part');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
180 is($f->{window}, 1024, 'chunked empty - part - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181 is($f->{upload}(''), '0' . CRLF . CRLF, 'chunked empty - part 2');
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
182 is($f->{window}, undef, 'chunked empty - part 2 - window');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 is($f->{http_end}(), 200, 'chunked empty - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
185 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186 ok($f->{headers}, 'chunked split');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187 is($f->{upload}('0123456789', split => [ 14 ]),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188 '5' . CRLF . '01234' . CRLF . '5' . CRLF . '56789' . CRLF .
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189 '0' . CRLF . CRLF, 'chunked split');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190 is($f->{http_end}(), 200, 'chunked split - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
191
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192 ###############################################################################
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
193
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194 sub get_body {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195 my ($url, %extra) = @_;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196 my ($server, $client, $f);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 $server = IO::Socket::INET->new(
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 Proto => 'tcp',
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200 LocalHost => '127.0.0.1',
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 LocalPort => 8081,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202 Listen => 5,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203 Timeout => 3,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204 Reuse => 1
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
205 )
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
206 or die "Can't create listening socket: $!\n";
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208 my $sess = new_session(8080);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209 my $sid = exists $extra{'content-length'}
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
210 ? new_stream($sess, { headers => [
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
211 { name => ':method', value => 'GET' },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212 { name => ':scheme', value => 'http' },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
213 { name => ':path', value => $url, },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
214 { name => ':authority', value => 'localhost' },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
215 { name => 'content-length',
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
216 value => $extra{'content-length'} }],
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
217 body_more => 1 })
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
218 : new_stream($sess, { path => $url, body_more => 1 });
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
219
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
220 $client = $server->accept() or return;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
221
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
222 log2c("(new connection $client)");
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
223
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
224 $f->{headers} = raw_read($client, '', 1, \&log2i);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
225
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
226 my $chunked = $f->{headers} =~ /chunked/;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
227
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
228 my $body_read = sub {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
229 my ($s, $buf, $len) = @_;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
230
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
231 for (1 .. 10) {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
232 $buf = raw_read($s, $buf, length($buf) + 1, \&log2i)
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
233 or return '';
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
234
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
235 my $got = 0;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
236 $got += $chunked ? hex $_ : $_ for $chunked
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
237 ? $buf =~ /(\w+)\x0d\x0a?\w+\x0d\x0a?/g
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
238 : length($buf);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
239 last if $got >= $len;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
240 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
241
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
242 return $buf;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
243 };
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
244
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
245 $f->{upload} = sub {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
246 my ($body, %extra) = @_;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
247
904
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
248 my $frames = h2_read($sess,
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
249 all => [{ type => 'WINDOW_UPDATE' }]);
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
250 my ($frame) = grep { $_->{type} eq "WINDOW_UPDATE" } @$frames;
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
251 $f->{window} = $frame->{wdelta};
cb8438c28482 Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
252
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
253 h2_body($sess, $body, { %extra });
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
254
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
255 return $body_read->($client, '', length($body));
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
256 };
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
257 $f->{http_end} = sub {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
258 $client->write(<<EOF);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
259 HTTP/1.1 200 OK
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
260 Connection: close
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
261
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
262 EOF
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
263
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
264 $client->close;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
265
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
266 my $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
267 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
268 return $frame->{headers}->{':status'};
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
269 };
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
270 return $f;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
271 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
272
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
273 sub log2i { Test::Nginx::log_core('|| <<', @_); }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
274 sub log2o { Test::Nginx::log_core('|| >>', @_); }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
275 sub log2c { Test::Nginx::log_core('||', @_); }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
276
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
277 ###############################################################################