Mercurial > hg > nginx-tests
annotate body_chunked.t @ 1542:451e787aad76
Tests: reworked libgd version detection.
The "libgd-config" binary is deprecated in recent versions and may not exist
or have unexpected output. More, it may not present within older versions,
as well, if installed separately, which previously broke test assumptions.
The fix is change the fallback to skip tests. In addition, recent Perl GD
module (2.57) started to export libgd version, which is now also consulted.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 13 Jan 2020 18:15:35 +0300 |
parents | 5ae8e8feac36 |
children | 27237569776f |
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 |
1501
91235919d80f
Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1500
diff
changeset
|
25 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(13); |
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; |
44ce08f5259f
Tests: client_max_body_size tests in body.t, body_chunked.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
71 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
|
72 } |
240
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 location /discard { |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 return 200 "TEST\n"; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 } |
269
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
76 location /next { |
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
77 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
|
78 } |
240
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 } |
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 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
82 listen 127.0.0.1:8081; |
240
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 server_name localhost; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 location / { |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 return 200 "TEST\n"; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 } |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 } |
269
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
89 |
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
90 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
91 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
|
92 server_name localhost; |
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
93 |
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
94 location / { |
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
95 return 444; |
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
96 } |
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
97 } |
240
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 } |
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 EOF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 $t->run(); |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 |
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 like(http_get_body('/', '0123456789'), |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 qr/X-Body: 0123456789\x0d?$/ms, 'body'); |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 like(http_get_body('/', '0123456789' x 128), |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 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
|
111 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 like(http_get_body('/', '0123456789' x 512), |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 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
|
114 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 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
|
116 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
|
117 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 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
|
119 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
|
120 |
1500
44ce08f5259f
Tests: client_max_body_size tests in body.t, body_chunked.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
121 like(http_get_body('/large', '0123456789' x 128), qr/ 413 /, 'body too large'); |
44ce08f5259f
Tests: client_max_body_size tests in body.t, body_chunked.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
122 |
240
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
123 # pipelined requests |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
125 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
|
126 '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
|
127 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
|
128 '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
|
129 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
130 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
|
131 '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
|
132 'chunked body discard'); |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
133 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
|
134 '0123456789', '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 2'); |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 |
1501
91235919d80f
Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1500
diff
changeset
|
137 # invalid chunks |
91235919d80f
Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1500
diff
changeset
|
138 |
91235919d80f
Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1500
diff
changeset
|
139 TODO: { |
91235919d80f
Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1500
diff
changeset
|
140 local $TODO = 'not yet' unless $t->has_version('1.17.4'); |
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 |
91235919d80f
Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1500
diff
changeset
|
168 } |
91235919d80f
Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1500
diff
changeset
|
169 |
269
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
170 # proxy_next_upstream |
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
171 |
970bb423e59f
Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
249
diff
changeset
|
172 like(http_get_body('/next', '0123456789'), |
537
202de1d281e5
Tests: whitespace fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
317
diff
changeset
|
173 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
|
174 |
240
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 ############################################################################### |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
176 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
177 sub read_body_file { |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
178 my ($r) = @_; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
179 return '' unless $r =~ m/X-Body-File: (.*)/; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
180 open FILE, $1 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 or return "$!"; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
182 local $/; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
183 my $content = <FILE>; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
184 close FILE; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
185 return $content; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
186 } |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
187 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
188 sub http_get_body { |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
189 my $uri = shift; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
190 my $last = pop; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
191 return http( join '', (map { |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
192 my $body = $_; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
193 "GET $uri HTTP/1.1" . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
194 . "Host: localhost" . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
195 . "Transfer-Encoding: chunked" . CRLF . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
196 . sprintf("%x", length $body) . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
197 . $body . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
198 . "0" . CRLF . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
199 } @_), |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
200 "GET $uri HTTP/1.1" . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
201 . "Host: localhost" . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
202 . "Connection: close" . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
203 . "Transfer-Encoding: chunked" . CRLF . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
204 . sprintf("%x", length $last) . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
205 . $last . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
206 . "0" . CRLF . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
207 ); |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
208 } |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
209 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
210 ############################################################################### |