annotate body_chunked.t @ 1938:e1059682aeef

Tests: fixed ClientHello with resending Initial QUIC packets. Previously it was rebuilt each time using distinct ClientHello.random resulting in different CRYPTO payload. As such, it led to TLS digest hash and derived secrets mismatch when resending Initial packet. Now ClientHello is built once and reused when resending Initial packets. Additionally, this required to preserve a generated secret value used in shared secret calculation as part of TLS key schedule. Previously it was regenerated when receiving a Retry packet, but this won't work with reused ClientHello as the resulting shared secrets won't match.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 30 Aug 2023 02:22:58 +0400
parents 2a0a6035a1af
children 5cf0e07d63a1
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
1722
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(18);
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 like(
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
140 http(
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
141 'GET / HTTP/1.1' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
142 . 'Host: localhost' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
143 . 'Connection: close' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
144 . 'Transfer-Encoding: chunked' . CRLF . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
145 . '4' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
146 . 'SEE-THIS' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
147 . '0' . CRLF . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
148 ),
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
149 qr/400 Bad/, 'runaway chunk'
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
150 );
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
151
1502
5ae8e8feac36 Tests: adjusted request body tests with invalid chunked body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1501
diff changeset
152 like(
1501
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
153 http(
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
154 'GET /discard HTTP/1.1' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
155 . 'Host: localhost' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
156 . 'Connection: close' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
157 . 'Transfer-Encoding: chunked' . CRLF . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
158 . '4' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
159 . 'SEE-THIS' . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
160 . '0' . CRLF . CRLF
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
161 ),
1502
5ae8e8feac36 Tests: adjusted request body tests with invalid chunked body.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1501
diff changeset
162 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
163 );
91235919d80f Tests: request body and invalid chunked transfer encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1500
diff changeset
164
269
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
165 # proxy_next_upstream
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
166
970bb423e59f Tests: proxy_next_upstream tests in body.t, body_chunked.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 249
diff changeset
167 like(http_get_body('/next', '0123456789'),
537
202de1d281e5 Tests: whitespace fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 317
diff changeset
168 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
169
1551
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
170 # invalid Transfer-Encoding
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
171
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
172 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
173 'transfer encoding identity');
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
174
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
175 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
176 qr/400 Bad/, 'transfer encoding repeat');
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
177
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
178 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
179 'transfer encoding list');
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
180
1711
6c03c329ed95 Tests: requests with both Content-Length and Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
181 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
182 'transfer encoding with content-length');
6c03c329ed95 Tests: requests with both Content-Length and Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
183
1722
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
184 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
185 '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
186
240
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
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189 sub read_body_file {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 my ($r) = @_;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 return '' unless $r =~ m/X-Body-File: (.*)/;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 open FILE, $1
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193 or return "$!";
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194 local $/;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 my $content = <FILE>;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196 close FILE;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 return $content;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198 }
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 sub http_get_body {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 my $uri = shift;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202 my $last = pop;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203 return http( join '', (map {
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 my $body = $_;
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 "GET $uri HTTP/1.1" . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206 . "Host: localhost" . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207 . "Transfer-Encoding: chunked" . CRLF . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 . sprintf("%x", length $body) . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 . $body . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 . "0" . CRLF . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 } @_),
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
212 "GET $uri HTTP/1.1" . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
213 . "Host: localhost" . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
214 . "Connection: close" . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 . "Transfer-Encoding: chunked" . CRLF . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 . sprintf("%x", length $last) . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217 . $last . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218 . "0" . CRLF . CRLF
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 );
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 }
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221
1551
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
222 sub http_transfer_encoding {
1722
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
223 my ($encoding, $version) = @_;
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
224 $version ||= "1.1";
1551
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
225
1722
122002b19416 Tests: HTTP/1.0 requests with Transfer-Encoding.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1711
diff changeset
226 http("GET / HTTP/$version" . CRLF
1551
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
227 . "Host: localhost" . CRLF
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
228 . "Connection: close" . CRLF
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
229 . "Transfer-Encoding: $encoding" . CRLF . CRLF
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
230 . "0" . CRLF . CRLF);
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
231 }
27237569776f Tests: additional Transfer-Encoding and Host headers tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1502
diff changeset
232
240
462d89f5732a Tests: request body and chunked transfer encoding tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 ###############################################################################