annotate h2_proxy_request_buffering_ssl.t @ 1021:ebdf239722b9

Tests: relaxed proxy_cache_lock.t nolock tests to fix on Solaris. Assumed that the order of responses being arrived in nolock case may be ignored. An important part of such case is that the only last response should be cached.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 02 Sep 2016 12:17:35 +0300
parents 882267679006
children 8ef51dbb5d69
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 to ssl backend.
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;
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
21 use Test::Nginx::HTTP2;
879
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_ssl http_v2 proxy/)
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 ->has_daemon('openssl');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 $t->write_file_expand('nginx.conf', <<'EOF');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 %%TEST_GLOBALS%%
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 daemon off;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 events {
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
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 http {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 %%TEST_GLOBALS_HTTP%%
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
44 listen 127.0.0.1:8080 http2;
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 server_name localhost;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 location / {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 proxy_request_buffering off;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
49 proxy_pass https://127.0.0.1:8082;
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 client_body_buffer_size 512;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 location /chunked {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 proxy_request_buffering off;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 proxy_http_version 1.1;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
55 proxy_pass https://127.0.0.1:8082;
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 client_body_buffer_size 512;
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 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
61 listen 127.0.0.1:8082 ssl;
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 server_name localhost;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 ssl_certificate_key localhost.key;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 ssl_certificate localhost.crt;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 location / {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 proxy_request_buffering off;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
69 proxy_pass http://127.0.0.1:8081/;
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 client_body_buffer_size 1k;
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 location /chunked {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 proxy_request_buffering off;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 proxy_http_version 1.1;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
75 proxy_pass http://127.0.0.1:8081/;
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 client_body_buffer_size 1k;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 EOF
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 $t->write_file('openssl.conf', <<EOF);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 [ req ]
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 default_bits = 2048
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 encrypt_key = no
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 distinguished_name = req_distinguished_name
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 [ req_distinguished_name ]
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 EOF
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 my $d = $t->testdir();
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 foreach my $name ('localhost') {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 system('openssl req -x509 -new '
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 . "-config '$d/openssl.conf' -subj '/CN=$name/' "
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96 . "-out '$d/$name.crt' -keyout '$d/$name.key' "
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 . ">>$d/openssl.out 2>&1") == 0
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 or die "Can't create certificate for $name: $!\n";
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 $t->run();
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102
903
29aa547dd963 Tests: avoided potential hang in HTTP/2 unbuf request body tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 879
diff changeset
103 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
104 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
105 $f->{http_end}();
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107 $t->plan(40);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 ###############################################################################
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 # unbuffered request body
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 $f = get_body('/', 'content-length' => 10);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 ok($f->{headers}, 'request');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115 is($f->{upload}('01234', body_more => 1), '01234', 'part');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 is($f->{upload}('56789'), '56789', 'part 2');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 is($f->{http_end}(), 200, 'response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 $f = get_body('/', 'content-length' => 1536);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120 ok($f->{headers}, 'buffer');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 is($f->{upload}('0123' x 128, body_more => 1), '0123' x 128, 'buffer - below');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122 is($f->{upload}('4567' x 128, body_more => 1), '4567' x 128, 'buffer - equal');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 is($f->{upload}('89AB' x 128), '89AB' x 128, 'buffer - above');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124 is($f->{http_end}(), 200, 'buffer - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 $f = get_body('/', 'content-length' => 18);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 ok($f->{headers}, 'many');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128 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
129 '01234many', 'many - part');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130 is($f->{upload}('56789many', body_split => [ 5 ]),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 '56789many', 'many - part 2');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132 is($f->{http_end}(), 200, 'many - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134 $f = get_body('/', 'content-length' => 0);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135 ok($f->{headers}, 'empty');
945
d73bef563aea Tests: speed up HTTP/2 tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
136 is($f->{upload}('', body_more => 1, wait => 0.2), '', 'empty - part');
d73bef563aea Tests: speed up HTTP/2 tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
137 is($f->{upload}('', wait => 0.2), '', 'empty - part 2');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138 is($f->{http_end}(), 200, 'empty - 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 $f = get_body('/', 'content-length' => 10);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141 ok($f->{headers}, 'split');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142 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
143 is($f->{http_end}(), 200, 'split - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145 # unbuffered request body, chunked transfer-encoding
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
146
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148 ok($f->{headers}, 'chunk');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149 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
150 'chunked - part');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151 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
152 'chunked - part 2');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153 is($f->{http_end}(), 200, 'chunked - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156 ok($f->{headers}, 'chunked buffer');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 is($f->{upload}('0123' x 64, body_more => 1),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158 '100' . CRLF . '0123' x 64 . CRLF, 'chunked buffer - below');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 is($f->{upload}('4567' x 64, body_more => 1),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 '100' . CRLF . '4567' x 64 . CRLF, 'chunked buffer - equal');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 is($f->{upload}('89AB' x 64),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 '100' . CRLF . '89AB' x 64 . CRLF . '0' . CRLF . CRLF,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163 'chunked buffer - above');
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');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170 is($f->{upload}('56789many', body_split => [ 5 ]),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 '9' . CRLF . '56789many' . CRLF . '0' . CRLF . CRLF,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 'chunked many - part 2');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173 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
174
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 ok($f->{headers}, 'chunked empty');
945
d73bef563aea Tests: speed up HTTP/2 tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
177 is($f->{upload}('', body_more => 1, wait => 0.2), '', 'chunked empty - part');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178 is($f->{upload}(''), '0' . CRLF . CRLF, 'chunked empty - part 2');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 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
180
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182 ok($f->{headers}, 'chunked split');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 is($f->{upload}('0123456789', split => [ 14 ]),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184 '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
185 '0' . CRLF . CRLF, 'chunked split');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186 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
187
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188 ###############################################################################
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190 sub get_body {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
191 my ($url, %extra) = @_;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192 my ($server, $client, $f);
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 $server = IO::Socket::INET->new(
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195 Proto => 'tcp',
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196 LocalHost => '127.0.0.1',
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
197 LocalPort => port(8081),
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 Listen => 5,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 Timeout => 3,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200 Reuse => 1
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 )
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202 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
203
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
204 my $s = Test::Nginx::HTTP2->new();
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
205 my $sid = exists $extra{'content-length'}
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
206 ? $s->new_stream({ headers => [
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207 { name => ':method', value => 'GET' },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208 { name => ':scheme', value => 'http' },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209 { name => ':path', value => $url, },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
210 { name => ':authority', value => 'localhost' },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
211 { name => 'content-length',
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212 value => $extra{'content-length'} }],
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
213 body_more => 1 })
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
214 : $s->new_stream({ path => $url, body_more => 1 });
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
215
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
216 $client = $server->accept() or return;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
217
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
218 log2c("(new connection $client)");
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
219
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
220 $f->{headers} = backend_read($client);
879
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 my $chunked = $f->{headers} =~ /chunked/;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
223
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
224 $f->{upload} = sub {
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
225 my ($body, %extra) = @_;
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
226 my $len = length($body);
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
227 my $wait = $extra{wait};
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
228
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
229 $s->h2_body($body, { %extra });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
230
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
231 $body = '';
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
232
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
233 for (1 .. 10) {
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
234 my $buf = backend_read($client, $wait) or return '';
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
235 $body .= $buf;
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
236
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
237 my $got = 0;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
238 $got += $chunked ? hex $_ : $_ for $chunked
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
239 ? $body =~ /(\w+)\x0d\x0a?\w+\x0d\x0a?/g
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
240 : length($body);
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
241 last if $got >= $len;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
242 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
243
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
244 return $body;
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
245 };
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
246 $f->{http_end} = sub {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
247 $client->write(<<EOF);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
248 HTTP/1.1 200 OK
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
249 Connection: close
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
250
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
251 EOF
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
252
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
253 $client->close;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
254
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
255 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
256 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
257 return $frame->{headers}->{':status'};
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
258 };
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
259 return $f;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
260 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
261
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
262 sub backend_read {
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
263 my ($s, $timo) = @_;
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
264 my $buf = '';
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
265
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
266 if (IO::Select->new($s)->can_read($timo || 3)) {
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
267 $s->sysread($buf, 16384) or return;
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
268 log2i($buf);
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
269 }
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
270 return $buf;
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
271 }
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
272
879
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 ###############################################################################