Mercurial > hg > nginx-tests
annotate body_chunked.t @ 1606:e4e0695552ed
Tests: fixed stream_proxy_ssl_conf_command.t.
The stream_proxy_ssl_conf_command.t test used stream return module
to return the response. Since this ignores actual request, but the
perl test code used http_get(). This might result in the request being
sent after the response is returned and the connection closed by the server,
resulting in RST being generated and no response seen by the client at all.
Fix is to use "stream(...)->read()" instead of http_get(), so
no request is sent at all, eliminating possibility of RST being
generated.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 10 Nov 2020 05:03:29 +0300 |
parents | 27237569776f |
children | 5ac6efbe5552 |
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 |
1551
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
25 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(16); |
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 |
1551
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
175 # invalid Transfer-Encoding |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
176 |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
177 TODO: { |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
178 local $TODO = 'not yet' unless $t->has_version('1.17.9'); |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
179 |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
180 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
|
181 'transfer encoding identity'); |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
182 |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
183 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
|
184 qr/400 Bad/, 'transfer encoding repeat'); |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
185 |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
186 } |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
187 |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
188 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
|
189 'transfer encoding list'); |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
190 |
240
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
191 ############################################################################### |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
192 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
193 sub read_body_file { |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
194 my ($r) = @_; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
195 return '' unless $r =~ m/X-Body-File: (.*)/; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
196 open FILE, $1 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
197 or return "$!"; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
198 local $/; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
199 my $content = <FILE>; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
200 close FILE; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
201 return $content; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
202 } |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
203 |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
204 sub http_get_body { |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
205 my $uri = shift; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
206 my $last = pop; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
207 return http( join '', (map { |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
208 my $body = $_; |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
209 "GET $uri HTTP/1.1" . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
210 . "Host: localhost" . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
211 . "Transfer-Encoding: chunked" . CRLF . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
212 . sprintf("%x", length $body) . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
213 . $body . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
214 . "0" . CRLF . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
215 } @_), |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
216 "GET $uri HTTP/1.1" . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
217 . "Host: localhost" . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
218 . "Connection: close" . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
219 . "Transfer-Encoding: chunked" . CRLF . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
220 . sprintf("%x", length $last) . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
221 . $last . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
222 . "0" . CRLF . CRLF |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
223 ); |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
224 } |
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
225 |
1551
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
226 sub http_transfer_encoding { |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
227 my ($encoding) = @_; |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
228 |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
229 http("GET / HTTP/1.1" . CRLF |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
230 . "Host: localhost" . CRLF |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
231 . "Connection: close" . CRLF |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
232 . "Transfer-Encoding: $encoding" . CRLF . CRLF |
27237569776f
Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1502
diff
changeset
|
233 . "0" . CRLF . CRLF); |
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 |
240
462d89f5732a
Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
236 ############################################################################### |