annotate body_chunked.t @ 1961:fe6f22da53ec default tip

Tests: tests for usage of discarded body. The client_max_body_size limit should be ignored when the request body is already discarded. In HTTP/1.x, this is done by checking the r->discard_body flag when the body is being discarded, and because r->headers_in.content_length_n is 0 when it's already discarded. This, however, does not happen with HTTP/2 and HTTP/3, and therefore "error_page 413" does not work without relaxing the limit. Further, with proxy_pass, r->headers_in.content_length_n is used to determine length of the request body, and therefore is not correct if discarding of the request body isn't yet complete. While discarding the request body, r->headers_in.content_length_n contains the rest of the body to discard (or, in case of chunked request body, the rest of the current chunk to discard). Similarly, the $content_length variable uses r->headers_in.content_length if available, and also incorrect. The $content_length variable is used when proxying with fastcgi_pass, grpc_pass, and uwsgi_pass (scgi_pass uses the value calculated based on the actual request body buffers, and therefore works correctly).
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 27 Apr 2024 18:55:50 +0300
parents 5cf0e07d63a1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for nginx request body reading, with chunked transfer-coding.
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 use Socket qw/ CRLF /;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use lib 'lib';
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use Test::Nginx;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 ###############################################################################
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDERR; $| = 1;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 select STDOUT; $| = 1;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
1954
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(24);
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 $t->write_file_expand('nginx.conf', <<'EOF');
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 %%TEST_GLOBALS%%
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
249
6a0d934950bc Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents: 242
diff changeset
31 daemon off;
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 events {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 }
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 http {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38
269
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
39 upstream u {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
40 server 127.0.0.1:8082;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
41 server 127.0.0.1:8080 backup;
269
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
42 }
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
43
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
45 listen 127.0.0.1:8080;
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 server_name localhost;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 client_header_buffer_size 1k;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 location / {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 client_body_buffer_size 2k;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 add_header X-Body "$request_body";
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 add_header X-Body-File "$request_body_file";
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
54 proxy_pass http://127.0.0.1:8081;
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 }
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 location /b {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 client_body_buffer_size 2k;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 client_body_in_file_only on;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 add_header X-Body "$request_body";
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 add_header X-Body-File "$request_body_file";
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
61 proxy_pass http://127.0.0.1:8081;
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 }
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 location /single {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 client_body_in_single_buffer on;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 add_header X-Body "$request_body";
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 add_header X-Body-File "$request_body_file";
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
67 proxy_pass http://127.0.0.1:8081;
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 }
1500
44ce08f5259f Tests: client_max_body_size tests in body.t, body_chunked.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
69 location /large {
44ce08f5259f Tests: client_max_body_size tests in body.t, body_chunked.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
70 client_max_body_size 1k;
1954
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
71 client_body_buffer_size 2k;
1500
44ce08f5259f Tests: client_max_body_size tests in body.t, body_chunked.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
72 proxy_pass http://127.0.0.1:8081;
44ce08f5259f Tests: client_max_body_size tests in body.t, body_chunked.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
73 }
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 location /discard {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 return 200 "TEST\n";
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 }
269
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
77 location /next {
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
78 proxy_pass http://u/;
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
79 }
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 }
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
83 listen 127.0.0.1:8081;
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 server_name localhost;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 location / {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 return 200 "TEST\n";
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 }
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 }
269
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
90
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
91 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
92 listen 127.0.0.1:8082;
269
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
93 server_name localhost;
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
94
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
95 location / {
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
96 return 444;
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
97 }
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
98 }
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 }
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 EOF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 $t->run();
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 ###############################################################################
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 like(http_get_body('/', '0123456789'),
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 qr/X-Body: 0123456789\x0d?$/ms, 'body');
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 like(http_get_body('/', '0123456789' x 128),
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 qr/X-Body: (0123456789){128}\x0d?$/ms, 'body in two buffers');
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 like(http_get_body('/', '0123456789' x 512),
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 qr/X-Body-File/ms, 'body in file');
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 like(read_body_file(http_get_body('/b', '0123456789' x 512)),
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 qr/^(0123456789){512}$/s, 'body in file only');
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 like(http_get_body('/single', '0123456789' x 128),
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 qr/X-Body: (0123456789){128}\x0d?$/ms, 'body in single buffer');
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121
1500
44ce08f5259f Tests: client_max_body_size tests in body.t, body_chunked.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
122 like(http_get_body('/large', '0123456789' x 128), qr/ 413 /, 'body too large');
1954
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
123 like(http_get_body('/large', 'X' x 1024), qr/ 200 /, 'body exact limit');
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
124 like(http_get_body('/large', 'X' x 1025), qr/ 413 /, 'body just above limit');
1500
44ce08f5259f Tests: client_max_body_size tests in body.t, body_chunked.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 974
diff changeset
125
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 # pipelined requests
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 like(http_get_body('/', '0123456789', '0123456789' x 128, '0123456789' x 512,
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 'foobar'), qr/X-Body: foobar\x0d?$/ms, 'chunked body pipelined');
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 like(http_get_body('/', '0123456789' x 128, '0123456789' x 512, '0123456789',
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 'foobar'), qr/X-Body: foobar\x0d?$/ms, 'chunked body pipelined 2');
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 like(http_get_body('/discard', '0123456789', '0123456789' x 128,
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 '0123456789' x 512, 'foobar'), qr/(TEST.*){4}/ms,
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 'chunked body discard');
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 like(http_get_body('/discard', '0123456789' x 128, '0123456789' x 512,
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 '0123456789', 'foobar'), qr/(TEST.*){4}/ms,
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 'chunked body discard 2');
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139
1501
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
140 # invalid chunks
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
141
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
142 like(
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
143 http(
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
144 'GET / HTTP/1.1' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
145 . 'Host: localhost' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
146 . 'Connection: close' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
147 . 'Transfer-Encoding: chunked' . CRLF . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
148 . '4' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
149 . 'SEE-THIS' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
150 . '0' . CRLF . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
151 ),
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
152 qr/400 Bad/, 'runaway chunk'
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
153 );
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
154
1502
5ae8e8feac36 Tests: adjusted request body tests with invalid chunked body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1501
diff changeset
155 like(
1501
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
156 http(
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
157 'GET /discard HTTP/1.1' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
158 . 'Host: localhost' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
159 . 'Connection: close' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
160 . 'Transfer-Encoding: chunked' . CRLF . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
161 . '4' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
162 . 'SEE-THIS' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
163 . '0' . CRLF . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
164 ),
1502
5ae8e8feac36 Tests: adjusted request body tests with invalid chunked body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1501
diff changeset
165 qr/400 Bad/, 'runaway chunk discard'
1501
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
166 );
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
167
1954
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
168 # chunk extensions and trailers
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
169
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
170 like(
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
171 http(
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
172 'GET /large HTTP/1.1' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
173 . 'Host: localhost' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
174 . 'Connection: close' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
175 . 'Transfer-Encoding: chunked' . CRLF . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
176 . ('1; foo' . CRLF . 'X' . CRLF) x 16
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
177 . '0' . CRLF . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
178 ),
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
179 qr/ 200 /, 'chunk extensions'
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
180 );
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
181
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
182 TODO: {
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
183 local $TODO = 'not yet' unless $t->has_version('1.25.5');
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
184
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
185 like(
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
186 http(
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
187 'GET /large HTTP/1.1' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
188 . 'Host: localhost' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
189 . 'Connection: close' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
190 . 'Transfer-Encoding: chunked' . CRLF . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
191 . ('1; foo' . CRLF . 'X' . CRLF) x 512
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
192 . '0' . CRLF . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
193 ),
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
194 qr/ 413 /, 'too many chunk extensions'
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
195 );
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
196
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
197 }
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
198
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
199 like(
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
200 http(
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
201 'GET /large HTTP/1.1' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
202 . 'Host: localhost' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
203 . 'Connection: close' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
204 . 'Transfer-Encoding: chunked' . CRLF . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
205 . '1' . CRLF . 'X' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
206 . '0' . CRLF . ('X-Trailer: foo' . CRLF) x 16 . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
207 ),
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
208 qr/ 200 /, 'trailers'
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
209 );
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
210
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
211 TODO: {
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
212 local $TODO = 'not yet' unless $t->has_version('1.25.5');
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
213
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
214 like(
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
215 http(
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
216 'GET /large HTTP/1.1' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
217 . 'Host: localhost' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
218 . 'Connection: close' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
219 . 'Transfer-Encoding: chunked' . CRLF . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
220 . '1' . CRLF . 'X' . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
221 . '0' . CRLF . ('X-Trailer: foo' . CRLF) x 512 . CRLF
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
222 ),
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
223 qr/ 413 /, 'too many trailers'
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
224 );
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
225
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
226 }
5cf0e07d63a1 Tests: tests for request body chunked extensions and trailers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
227
269
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
228 # proxy_next_upstream
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
229
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
230 like(http_get_body('/next', '0123456789'),
537
202de1d281e5 Tests: whitespace fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 317
diff changeset
231 qr/X-Body: 0123456789\x0d?$/ms, 'body chunked next upstream');
269
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
232
1551
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
233 # invalid Transfer-Encoding
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
234
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
235 like(http_transfer_encoding('identity'), qr/501 Not Implemented/,
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
236 'transfer encoding identity');
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
237
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
238 like(http_transfer_encoding("chunked\nTransfer-Encoding: chunked"),
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
239 qr/400 Bad/, 'transfer encoding repeat');
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
240
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
241 like(http_transfer_encoding('chunked, identity'), qr/501 Not Implemented/,
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
242 'transfer encoding list');
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
243
1711
6c03c329ed95 Tests: requests with both Content-Length and Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
244 like(http_transfer_encoding("chunked\nContent-Length: 5"), qr/400 Bad/,
6c03c329ed95 Tests: requests with both Content-Length and Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
245 'transfer encoding with content-length');
6c03c329ed95 Tests: requests with both Content-Length and Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
246
1722
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
247 like(http_transfer_encoding("chunked", "1.0"), qr/400 Bad/,
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
248 'transfer encoding in HTTP/1.0 requests');
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
249
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 ###############################################################################
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 sub read_body_file {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 my ($r) = @_;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 return '' unless $r =~ m/X-Body-File: (.*)/;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 open FILE, $1
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256 or return "$!";
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257 local $/;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258 my $content = <FILE>;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259 close FILE;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 return $content;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261 }
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 sub http_get_body {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264 my $uri = shift;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 my $last = pop;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266 return http( join '', (map {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
267 my $body = $_;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 "GET $uri HTTP/1.1" . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269 . "Host: localhost" . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 . "Transfer-Encoding: chunked" . CRLF . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 . sprintf("%x", length $body) . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272 . $body . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273 . "0" . CRLF . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274 } @_),
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275 "GET $uri HTTP/1.1" . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276 . "Host: localhost" . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
277 . "Connection: close" . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
278 . "Transfer-Encoding: chunked" . CRLF . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
279 . sprintf("%x", length $last) . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
280 . $last . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
281 . "0" . CRLF . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282 );
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
283 }
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
284
1551
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
285 sub http_transfer_encoding {
1722
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
286 my ($encoding, $version) = @_;
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
287 $version ||= "1.1";
1551
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
288
1722
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
289 http("GET / HTTP/$version" . CRLF
1551
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
290 . "Host: localhost" . CRLF
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
291 . "Connection: close" . CRLF
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
292 . "Transfer-Encoding: $encoding" . CRLF . CRLF
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
293 . "0" . CRLF . CRLF);
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
294 }
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
295
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
296 ###############################################################################