annotate h2_proxy_request_buffering_ssl.t @ 1427:eb1d883305ea

Tests: avoid edge cases in upstream random two test. Unavailable servers contribute to the number of attempts, if selected, before the balancer would fall back to the default round-robin method. This means that it's quite possible to get server with more connections. To facilitate with selecting two alive servers, down server was removed from the upstream configuration at the cost of slightly worse coverage.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 10 Jan 2019 17:42:34 +0300
parents 4e48bf51714f
children dbce8fb5f5f8
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 ]
1116
8ef51dbb5d69 Tests: reduced OpenSSL default key length to 1024.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
85 default_bits = 1024
879
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 '
1220
0af58b78df35 Tests: removed single quotes from system() calls.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1116
diff changeset
95 . "-config $d/openssl.conf -subj /CN=$name/ "
0af58b78df35 Tests: removed single quotes from system() calls.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1116
diff changeset
96 . "-out $d/$name.crt -keyout $d/$name.key "
879
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 $t->plan(40);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 ###############################################################################
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 # unbuffered request body
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107
1251
766bcbb632ee Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1220
diff changeset
108 my $f = get_body('/', 'content-length' => 10);
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 ok($f->{headers}, 'request');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110 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
111 is($f->{upload}('56789'), '56789', 'part 2');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112 is($f->{http_end}(), 200, 'response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 $f = get_body('/', 'content-length' => 1536);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115 ok($f->{headers}, 'buffer');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 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
117 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
118 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
119 is($f->{http_end}(), 200, 'buffer - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 $f = get_body('/', 'content-length' => 18);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122 ok($f->{headers}, 'many');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 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
124 '01234many', 'many - part');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 is($f->{upload}('56789many', body_split => [ 5 ]),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 '56789many', 'many - part 2');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 is($f->{http_end}(), 200, 'many - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 $f = get_body('/', 'content-length' => 0);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130 ok($f->{headers}, 'empty');
945
d73bef563aea Tests: speed up HTTP/2 tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
131 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
132 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
133 is($f->{http_end}(), 200, 'empty - 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}, 'chunk');
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');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
146 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
147 'chunked - part 2');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148 is($f->{http_end}(), 200, 'chunked - response');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151 ok($f->{headers}, 'chunked buffer');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 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
153 '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
154 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
155 '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
156 is($f->{upload}('89AB' x 64),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 '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
158 'chunked buffer - above');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 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
160
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 ok($f->{headers}, 'chunked many');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163 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
164 '9' . CRLF . '01234many' . CRLF, 'chunked many - part');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 is($f->{upload}('56789many', body_split => [ 5 ]),
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166 '9' . CRLF . '56789many' . CRLF . '0' . CRLF . CRLF,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167 'chunked many - part 2');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168 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
169
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 ok($f->{headers}, 'chunked empty');
945
d73bef563aea Tests: speed up HTTP/2 tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 903
diff changeset
172 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
173 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
174 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
175
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 $f = get_body('/chunked');
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177 ok($f->{headers}, 'chunked split');
1271
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
178 is(http_content($f->{upload}('0123456789', split => [ 14 ])),
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
179 '0123456789', 'chunked split');
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180 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
181
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182 ###############################################################################
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183
1271
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
184 sub http_content {
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
185 my ($body) = @_;
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
186 my $content = '';
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
187
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
188 while ($body =~ /\G\x0d?\x0a?([0-9a-f]+)\x0d\x0a?/gcmsi) {
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
189 my $len = hex($1);
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
190 $content .= substr($body, pos($body), $len);
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
191 pos($body) += $len;
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
192 }
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
193
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
194 return $content;
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
195 }
6ca8b38f63b6 Tests: relaxed proxy_request_buffering tests to pass on slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1251
diff changeset
196
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197 sub get_body {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 my ($url, %extra) = @_;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 my ($server, $client, $f);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 $server = IO::Socket::INET->new(
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202 Proto => 'tcp',
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203 LocalHost => '127.0.0.1',
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
204 LocalPort => port(8081),
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
205 Listen => 5,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
206 Timeout => 3,
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207 Reuse => 1
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208 )
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209 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
210
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
211 my $s = Test::Nginx::HTTP2->new();
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212 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
213 ? $s->new_stream({ headers => [
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
214 { name => ':method', value => 'GET' },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
215 { name => ':scheme', value => 'http' },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
216 { name => ':path', value => $url, },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
217 { name => ':authority', value => 'localhost' },
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
218 { name => 'content-length',
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
219 value => $extra{'content-length'} }],
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
220 body_more => 1 })
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
221 : $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
222
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
223 $client = $server->accept() or return;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
224
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
225 log2c("(new connection $client)");
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
226
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
227 $f->{headers} = backend_read($client);
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
228
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
229 my $chunked = $f->{headers} =~ /chunked/;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
230
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
231 $f->{upload} = sub {
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
232 my ($body, %extra) = @_;
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
233 my $len = length($body);
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
234 my $wait = $extra{wait};
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
235
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
236 $s->h2_body($body, { %extra });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
237
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
238 $body = '';
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
239
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
240 for (1 .. 10) {
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
241 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
242 $body .= $buf;
879
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 my $got = 0;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
245 $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
246 ? $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
247 : length($body);
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
248 last if $got >= $len;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
249 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
250
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
251 return $body;
879
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 $f->{http_end} = sub {
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
254 $client->write(<<EOF);
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
255 HTTP/1.1 200 OK
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
256 Connection: close
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
257
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
258 EOF
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
259
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
260 $client->close;
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 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
263 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
264 return $frame->{headers}->{':status'};
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 return $f;
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
267 }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
268
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
269 sub backend_read {
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
270 my ($s, $timo) = @_;
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
271 my $buf = '';
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
272
1421
4e48bf51714f Tests: aligned various generic read timeouts to http_end().
Sergey Kandaurov <pluknet@nginx.com>
parents: 1420
diff changeset
273 if (IO::Select->new($s)->can_read($timo || 8)) {
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
274 $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
275 log2i($buf);
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
276 }
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
277 return $buf;
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
278 }
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
279
879
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
280 sub log2i { Test::Nginx::log_core('|| <<', @_); }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
281 sub log2o { Test::Nginx::log_core('|| >>', @_); }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
282 sub log2c { Test::Nginx::log_core('||', @_); }
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
283
127a602f36c8 Tests: HTTP/2 tests for unbuffered request body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
284 ###############################################################################