annotate proxy_unfinished.t @ 391:915ef26ac6eb

Tests: fix proxy_unfinished.t failures with big buffers. With newer systems it becomes common to use huge socket buffers, and the "no proxy temp" test may unexpectedly fail because disk buffering will not be used. To reduce this possibility, the "listen ... sndbuf=32k" was added. Additionally, regular expression was changed to silently allow full responses.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 15 Apr 2014 22:04:08 +0400
parents e7dc8f4d0a4b
children 847ea345becb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for http proxy and prematurely closed connections. Incomplete
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6 # responses shouldn't loose information about their incompleteness.
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8 # In particular, incomplete responses:
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 #
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 # - shouldn't be cached
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11 #
343
e7dc8f4d0a4b Tests: whitespace and spelling fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 319
diff changeset
12 # - if a response is sent using chunked transfer encoding,
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 # final chunk shouldn't be sent
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 ###############################################################################
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use warnings;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 use strict;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 use Test::More;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 use Socket qw/ CRLF /;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 BEGIN { use FindBin; chdir($FindBin::Bin); }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 use lib 'lib';
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 use Test::Nginx;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 ###############################################################################
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 select STDERR; $| = 1;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 select STDOUT; $| = 1;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 plan(skip_all => 'win32') if $^O eq 'MSWin32';
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
36 my $t = Test::Nginx->new()->has(qw/http proxy cache sub/)->plan(15)
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 ->write_file_expand('nginx.conf', <<'EOF');
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 %%TEST_GLOBALS%%
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 daemon off;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 events {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 http {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 %%TEST_GLOBALS_HTTP%%
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 proxy_cache_path %%TESTDIR%%/cache levels=1:2
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 keys_zone=one:1m;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 server {
391
915ef26ac6eb Tests: fix proxy_unfinished.t failures with big buffers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 343
diff changeset
53 listen 127.0.0.1:8080 sndbuf=32k;
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 server_name localhost;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 location / {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 sub_filter foo bar;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 sub_filter_types *;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 proxy_pass http://127.0.0.1:8081;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
62 location /un/ {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
63 sub_filter foo bar;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
64 sub_filter_types *;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
65 proxy_pass http://127.0.0.1:8081/;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
66 proxy_buffering off;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
67 }
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
68
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 location /cache/ {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 proxy_pass http://127.0.0.1:8081/;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 proxy_cache one;
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
72 add_header X-Cache-Status $upstream_cache_status;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
73 }
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
74
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
75 location /proxy/ {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
76 sub_filter foo bar;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
77 sub_filter_types *;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
78 proxy_pass http://127.0.0.1:8080/local/;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
79 proxy_buffer_size 1k;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
80 proxy_buffers 4 1k;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
81 }
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
82
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
83 location /local/ {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
84 alias %%TESTDIR%%/;
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 EOF
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
91 $t->write_file('big.html', 'X' x (1024 * 1024) . 'finished');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
92
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 $t->run_daemon(\&http_daemon);
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 $t->run()->waitforsocket('127.0.0.1:8081');
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 ###############################################################################
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
98 http_get('/cache/length');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
99 like(http_get('/cache/length'), qr/MISS/, 'unfinished not cached');
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 TODO: {
319
e9de4da234c0 Tests: add version checks to TODOs for committed patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 307
diff changeset
102 local $TODO = 'not yet' unless $t->has_version('1.5.3');
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 # chunked encoding has enough information to don't cache a response,
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 # much like with Content-Length available
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
107 http_get('/cache/chunked');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
108 like(http_get('/cache/chunked'), qr/MISS/, 'unfinished chunked');
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 TODO: {
319
e9de4da234c0 Tests: add version checks to TODOs for committed patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 307
diff changeset
113 local $TODO = 'not yet' unless $t->has_version('1.5.3');
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
115 # make sure there is no final chunk in unfinished responses
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 like(http_get_11('/length'), qr/unfinished(?!.*\x0d\x0a?0\x0d\x0a?)/s,
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 'length no final chunk');
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 like(http_get_11('/chunked'), qr/unfinished(?!.*\x0d\x0a?0\x0d\x0a?)/s,
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 'chunked no final chunk');
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
124 # but there is final chunk in complete responses
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
125
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
126 like(http_get_11('/length/ok'), qr/finished.*\x0d\x0a?0\x0d\x0a?/s,
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
127 'length final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
128 like(http_get_11('/chunked/ok'), qr/finished.*\x0d\x0a?0\x0d\x0a?/s,
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
129 'chunked final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
130
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
131 TODO: {
319
e9de4da234c0 Tests: add version checks to TODOs for committed patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 307
diff changeset
132 local $TODO = 'not yet' unless $t->has_version('1.5.3');
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
133
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
134 # the same with proxy_buffering set to off
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
135
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
136 like(http_get_11('/un/length'), qr/unfinished(?!.*\x0d\x0a?0\x0d\x0a?)/s,
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
137 'unbuffered length no final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
138 like(http_get_11('/un/chunked'), qr/unfinished(?!.*\x0d\x0a?0\x0d\x0a?)/s,
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
139 'unbuffered chunked no final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
140
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
141 }
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
142
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
143 like(http_get_11('/un/length/ok'), qr/finished.*\x0d\x0a?0\x0d\x0a?/s,
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
144 'unbuffered length final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
145 like(http_get_11('/un/chunked/ok'), qr/finished.*\x0d\x0a?0\x0d\x0a?/s,
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
146 'unbuffered chunked final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
147
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
148 # big responses
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
149
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
150 like(http_get('/big', sleep => 0.1), qr/unfinished/s, 'big unfinished');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
151 like(http_get('/big/ok', sleep => 0.1), qr/finished/s, 'big finished');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
152 like(http_get('/un/big', sleep => 0.1), qr/unfinished/s, 'big unfinished un');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
153 like(http_get('/un/big/ok', sleep => 0.1), qr/finished/s, 'big finished un');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
154
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
155 TODO: {
319
e9de4da234c0 Tests: add version checks to TODOs for committed patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 307
diff changeset
156 local $TODO = 'not yet' unless $t->has_version('1.5.3');
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
157
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
158 # if disk buffering fails for some reason, there should be
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
159 # no final chunk
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
160
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
161 chmod(0000, $t->testdir() . '/proxy_temp');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
162 like(http_get_11('/proxy/big.html', sleep => 0.5),
391
915ef26ac6eb Tests: fix proxy_unfinished.t failures with big buffers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 343
diff changeset
163 qr/X(?!.*\x0d\x0a?0\x0d\x0a?)|finished/s, 'no proxy temp');
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
164
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
165 }
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
166
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 ###############################################################################
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 sub http_get_11 {
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
170 my ($uri, %extra) = @_;
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172 return http(
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 "GET $uri HTTP/1.1" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 "Connection: close" . CRLF .
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
175 "Host: localhost" . CRLF . CRLF,
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
176 %extra
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 );
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 ###############################################################################
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 sub http_daemon {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183 my $server = IO::Socket::INET->new(
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 Proto => 'tcp',
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185 LocalAddr => '127.0.0.1:8081',
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 Listen => 5,
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 Reuse => 1
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 )
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189 or die "Can't create listening socket: $!\n";
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 local $SIG{PIPE} = 'IGNORE';
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193 while (my $client = $server->accept()) {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194 $client->autoflush(1);
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196 my $headers = '';
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 my $uri = '';
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 while (<$client>) {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 $headers .= $_;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 last if (/^\x0d?\x0a?$/);
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206 if ($uri eq '/length') {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207 print $client
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 "HTTP/1.1 200 OK" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 "Content-Length: 100" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 "Cache-Control: max-age=300" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 "Connection: close" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
212 CRLF .
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
213 "unfinished" . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
214
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
215 } elsif ($uri eq '/length/ok') {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
216 print $client
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
217 "HTTP/1.1 200 OK" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
218 "Content-Length: 10" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
219 "Cache-Control: max-age=300" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
220 "Connection: close" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
221 CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
222 "finished" . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
223
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
224 } elsif ($uri eq '/big') {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
225 print $client
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
226 "HTTP/1.1 200 OK" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
227 "Content-Length: 1000100" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
228 "Cache-Control: max-age=300" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
229 "Connection: close" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
230 CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
231 for (1 .. 10000) {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
232 print $client ("X" x 98) . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
233 }
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
234 print $client "unfinished" . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
235
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
236 } elsif ($uri eq '/big/ok') {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
237 print $client
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
238 "HTTP/1.1 200 OK" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
239 "Content-Length: 1000010" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
240 "Cache-Control: max-age=300" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
241 "Connection: close" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
242 CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
243 for (1 .. 10000) {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
244 print $client ("X" x 98) . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
245 }
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
246 print $client "finished" . CRLF;
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 } elsif ($uri eq '/chunked') {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 print $client
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 "HTTP/1.1 200 OK" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251 "Transfer-Encoding: chunked" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 "Cache-Control: max-age=300" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 "Connection: close" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 "ff" . CRLF .
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
256 "unfinished" . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
257
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
258 } elsif ($uri eq '/chunked/ok') {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
259 print $client
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
260 "HTTP/1.1 200 OK" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
261 "Transfer-Encoding: chunked" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
262 "Cache-Control: max-age=300" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
263 "Connection: close" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
264 CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
265 "a" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
266 "finished" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
267 CRLF . "0" . CRLF . CRLF;
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272 ###############################################################################