annotate proxy_unfinished.t @ 508:4ac60aad723e

Tests: test for auth request with proxy cache.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 04 Dec 2014 19:18:45 +0300
parents 847ea345becb
children 2cd00179f4b2
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 # 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
102 # much like with Content-Length available
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
104 http_get('/cache/chunked');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
105 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
106
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
107 # 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
108
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 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
110 'length no final chunk');
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 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
112 'chunked no final chunk');
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
114 # but there is final chunk in complete responses
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
115
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
116 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
117 'length final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
118 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
119 'chunked final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
120
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
121 # the same with proxy_buffering set to off
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
122
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
123 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
124 'unbuffered length no final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
125 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
126 'unbuffered chunked no final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
127
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
128 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
129 'unbuffered length final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
130 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
131 'unbuffered chunked final chunk');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
132
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
133 # big responses
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
134
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
135 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
136 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
137 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
138 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
139
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
140 # if disk buffering fails for some reason, there should be
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
141 # no final chunk
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 chmod(0000, $t->testdir() . '/proxy_temp');
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
144 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
145 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
146
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 ###############################################################################
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 sub http_get_11 {
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
150 my ($uri, %extra) = @_;
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 return http(
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 "GET $uri HTTP/1.1" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 "Connection: close" . CRLF .
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
155 "Host: localhost" . CRLF . CRLF,
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
156 %extra
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 );
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 ###############################################################################
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 sub http_daemon {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 my $server = IO::Socket::INET->new(
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 Proto => 'tcp',
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 LocalAddr => '127.0.0.1:8081',
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 Listen => 5,
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 Reuse => 1
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 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
170
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 local $SIG{PIPE} = 'IGNORE';
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 while (my $client = $server->accept()) {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 $client->autoflush(1);
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 my $headers = '';
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 my $uri = '';
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 while (<$client>) {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 $headers .= $_;
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 last if (/^\x0d?\x0a?$/);
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 $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
185
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 if ($uri eq '/length') {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 print $client
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 "HTTP/1.1 200 OK" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189 "Content-Length: 100" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 "Cache-Control: max-age=300" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 "Connection: close" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 CRLF .
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
193 "unfinished" . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
194
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
195 } elsif ($uri eq '/length/ok') {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
196 print $client
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
197 "HTTP/1.1 200 OK" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
198 "Content-Length: 10" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
199 "Cache-Control: max-age=300" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
200 "Connection: close" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
201 CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
202 "finished" . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
203
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
204 } elsif ($uri eq '/big') {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
205 print $client
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
206 "HTTP/1.1 200 OK" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
207 "Content-Length: 1000100" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
208 "Cache-Control: max-age=300" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
209 "Connection: close" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
210 CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
211 for (1 .. 10000) {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
212 print $client ("X" x 98) . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
213 }
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
214 print $client "unfinished" . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
215
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
216 } elsif ($uri eq '/big/ok') {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
217 print $client
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
218 "HTTP/1.1 200 OK" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
219 "Content-Length: 1000010" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
220 "Cache-Control: max-age=300" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
221 "Connection: close" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
222 CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
223 for (1 .. 10000) {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
224 print $client ("X" x 98) . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
225 }
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
226 print $client "finished" . CRLF;
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 } elsif ($uri eq '/chunked') {
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 print $client
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 "HTTP/1.1 200 OK" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 "Transfer-Encoding: chunked" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 "Cache-Control: max-age=300" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 "Connection: close" . CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 CRLF .
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235 "ff" . CRLF .
307
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
236 "unfinished" . CRLF;
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
237
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
238 } elsif ($uri eq '/chunked/ok') {
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
239 print $client
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
240 "HTTP/1.1 200 OK" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
241 "Transfer-Encoding: chunked" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
242 "Cache-Control: max-age=300" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
243 "Connection: close" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
244 CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
245 "a" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
246 "finished" . CRLF .
81c98592661f Tests: more unfinished tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 299
diff changeset
247 CRLF . "0" . CRLF . CRLF;
299
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 }
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251
44c42894fdfd Tests: move unfinished tests to a separate file.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 ###############################################################################