Mercurial > hg > nginx-tests
annotate proxy_request_buffering_ssl.t @ 572:ca54b445d982
Tests: masked nginx bug in proxy next upstream.
When iterating through several next upstreams per a worker cycle,
a previously reported event about upstream connection error may
be improperly applied to the next upstream, thus leading to the
invalid connection error. E.g., in kqueue, where the problem is
visible, this is caused by "ev->instance" that does not tolerate
more than one next upstream at once, and kevents placed on the
kqueue separately for read and write events.
The change is to limit test case to the only one next upstream.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 14 May 2015 11:54:24 +0300 |
parents | 907e89fba9c3 |
children | 68a6678abae2 |
rev | line source |
---|---|
543
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Sergey Kandaurov |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 # (C) Nginx, Inc. |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 # Tests for unbuffered request body to ssl backend. |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 ############################################################################### |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use warnings; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 use strict; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 use Test::More; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 use Socket qw/ CRLF /; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 BEGIN { use FindBin; chdir($FindBin::Bin); } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use lib 'lib'; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 use Test::Nginx; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 ############################################################################### |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 select STDERR; $| = 1; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 select STDOUT; $| = 1; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 my $t = Test::Nginx->new()->has(qw/http http_ssl proxy rewrite/) |
568
907e89fba9c3
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
546
diff
changeset
|
28 ->has_daemon('openssl')->plan(18); |
543
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 $t->write_file_expand('nginx.conf', <<'EOF'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 %%TEST_GLOBALS%% |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 daemon off; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 events { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 http { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 %%TEST_GLOBALS_HTTP%% |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 server { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 listen 127.0.0.1:8080; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 server_name localhost; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 client_header_buffer_size 1k; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
47 proxy_request_buffering off; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 location / { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 client_body_buffer_size 2k; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 add_header X-Body "$request_body"; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 proxy_pass https://127.0.0.1:8081; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 location /single { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 client_body_in_single_buffer on; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 add_header X-Body "$request_body"; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 proxy_pass https://127.0.0.1:8081; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 location /discard { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 return 200 "TEST\n"; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 location /preread { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 proxy_pass https://127.0.0.1:8081; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
64 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 location /error_page { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 proxy_pass https://127.0.0.1:8081/404; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 error_page 404 /404; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 proxy_intercept_errors on; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 location /404 { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 return 200 "$request_body\n"; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 server { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 listen 127.0.0.1:8081 ssl; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
77 server_name localhost; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
78 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
79 ssl_certificate_key localhost.key; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
80 ssl_certificate localhost.crt; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
82 location /preread { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 client_body_buffer_size 2k; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 add_header X-Body "$request_body"; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 proxy_pass http://127.0.0.1:8082/; |
545
dbf8fb0f3d30
Tests: fixed unbuffered request body tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
543
diff
changeset
|
86 proxy_request_buffering off; |
543
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
87 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 location / { |
545
dbf8fb0f3d30
Tests: fixed unbuffered request body tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
543
diff
changeset
|
90 proxy_pass http://127.0.0.1:8080/discard; |
543
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
91 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
92 location /404 { } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
94 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
95 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
96 EOF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 $t->write_file('openssl.conf', <<EOF); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
99 [ req ] |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
100 default_bits = 2048 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
101 encrypt_key = no |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 distinguished_name = req_distinguished_name |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 [ req_distinguished_name ] |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
104 EOF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
105 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
106 my $d = $t->testdir(); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
107 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 foreach my $name ('localhost') { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 system('openssl req -x509 -new ' |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 . "-config '$d/openssl.conf' -subj '/CN=$name/' " |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
111 . "-out '$d/$name.crt' -keyout '$d/$name.key' " |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
112 . ">>$d/openssl.out 2>&1") == 0 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
113 or die "Can't create certificate for $name: $!\n"; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
114 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
115 |
568
907e89fba9c3
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
546
diff
changeset
|
116 $t->run(); |
543
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
117 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
118 ############################################################################### |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
119 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
120 unlike(http_get('/'), qr/X-Body:/ms, 'no body'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
121 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 like(http_get_body('/', '0123456789'), |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
123 qr/X-Body: 0123456789\x0d?$/ms, 'body'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
124 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
125 like(http_get_body('/', '0123456789' x 128), |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
126 qr/X-Body: (0123456789){128}\x0d?$/ms, 'body in two buffers'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
127 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
128 like(http_get_body('/single', '0123456789' x 128), |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
129 qr/X-Body: (0123456789){128}\x0d?$/ms, 'body in single buffer'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
130 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
131 like(http_get_body('/error_page', '0123456789'), |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
132 qr/^0123456789$/m, 'body in error page'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
133 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
134 # pipelined requests |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
135 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
136 like(http_get_body('/', '0123456789', '0123456789' x 128, '0123456789' x 512, |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
137 'foobar'), qr/X-Body: foobar\x0d?$/ms, 'body pipelined'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
138 like(http_get_body('/', '0123456789' x 128, '0123456789' x 512, '0123456789', |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
139 'foobar'), qr/X-Body: foobar\x0d?$/ms, 'body pipelined 2'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
140 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
141 like(http_get_body('/discard', '0123456789', '0123456789' x 128, |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
142 '0123456789' x 512, 'foobar'), qr/(TEST.*){4}/ms, |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
143 'body discard'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
144 like(http_get_body('/discard', '0123456789' x 128, '0123456789' x 512, |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
145 '0123456789', 'foobar'), qr/(TEST.*){4}/ms, |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
146 'body discard 2'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
147 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
148 # interactive tests |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
149 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
150 my $s = get_body('/preread', 8082, 10); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
151 ok($s, 'no preread'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
152 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
153 SKIP: { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
154 skip 'no preread failed', 3 unless $s; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
155 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
156 is($s->{upload}('01234'), '01234', 'no preread - body part'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
157 is($s->{upload}('56789'), '56789', 'no preread - body part 2'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
158 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
159 like($s->{http_end}(), qr/200 OK/, 'no preread - response'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
160 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
161 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
162 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 $s = get_body('/preread', 8082, 15, '01234'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 ok($s, 'preread'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
165 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 SKIP: { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 skip 'preread failed', 3 unless $s; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
168 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
169 is($s->{preread}, '01234', 'preread - preread'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
170 is($s->{upload}('56789'), '56789', 'preread - body part'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
171 is($s->{upload}('abcde'), 'abcde', 'preread - body part 2'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
172 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
173 like($s->{http_end}(), qr/200 OK/, 'preread - response'); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
174 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
175 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
176 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
177 ############################################################################### |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
178 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
179 sub http_get_body { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
180 my $uri = shift; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
181 my $last = pop; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
182 return http( join '', (map { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
183 my $body = $_; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
184 "GET $uri HTTP/1.1" . CRLF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
185 . "Host: localhost" . CRLF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
186 . "Content-Length: " . (length $body) . CRLF . CRLF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
187 . $body |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
188 } @_), |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
189 "GET $uri HTTP/1.1" . CRLF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
190 . "Host: localhost" . CRLF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
191 . "Connection: close" . CRLF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
192 . "Content-Length: " . (length $last) . CRLF . CRLF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
193 . $last |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
194 ); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
195 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
196 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
197 sub get_body { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
198 my ($url, $port, $length, $body) = @_; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
199 my ($server, $client, $s); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
200 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
201 $server = IO::Socket::INET->new( |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
202 Proto => 'tcp', |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
203 LocalHost => '127.0.0.1', |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
204 LocalPort => $port, |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
205 Listen => 5, |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
206 Reuse => 1 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
207 ) |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
208 or die "Can't create listening socket: $!\n"; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
209 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
210 my $r = <<EOF; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
211 GET $url HTTP/1.1 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
212 Host: localhost |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
213 Connection: close |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
214 Content-Length: $length |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
215 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
216 EOF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
217 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
218 if (defined $body) { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
219 $r .= $body; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
220 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
221 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
222 $s = http($r, start => 1); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
223 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
224 eval { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
225 local $SIG{ALRM} = sub { die "timeout\n" }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
226 local $SIG{PIPE} = sub { die "sigpipe\n" }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
227 alarm(5); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
228 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
229 $client = $server->accept(); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
230 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
231 alarm(0); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
232 }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
233 alarm(0); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
234 if ($@) { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
235 log_in("died: $@"); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
236 return undef; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
237 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
238 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
239 $client->sysread(my $buf, 1024); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
240 $buf =~ s/.*?\x0d\x0a?\x0d\x0a?(.*)/$1/ms; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
241 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
242 my $f = { preread => $buf }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
243 $f->{upload} = sub { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
244 my $buf = shift; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
245 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
246 eval { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
247 local $SIG{ALRM} = sub { die "timeout\n" }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
248 local $SIG{PIPE} = sub { die "sigpipe\n" }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
249 alarm(5); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
250 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
251 $s->write($buf); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
252 $client->sysread($buf, 1024); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
253 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
254 alarm(0); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
255 }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
256 alarm(0); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
257 if ($@) { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
258 log_in("died: $@"); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
259 return undef; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
260 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
261 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
262 return $buf; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
263 }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
264 $f->{http_end} = sub { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
265 my $buf = ''; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
266 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
267 $client->write(<<EOF); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
268 HTTP/1.1 200 OK |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
269 Connection: close |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
270 X-Port: $port |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
271 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
272 OK |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
273 EOF |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
274 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
275 $client->close; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
276 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
277 eval { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
278 local $SIG{ALRM} = sub { die "timeout\n" }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
279 local $SIG{PIPE} = sub { die "sigpipe\n" }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
280 alarm(5); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
281 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
282 $s->sysread($buf, 1024); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
283 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
284 alarm(0); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
285 }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
286 alarm(0); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
287 if ($@) { |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
288 log_in("died: $@"); |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
289 return undef; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
290 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
291 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
292 return $buf; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
293 }; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
294 return $f; |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
295 } |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
296 |
a36757f66c75
Tests: unbuffered request body to ssl backend.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
297 ############################################################################### |