annotate t/proxy.t @ 42:c53e018dbcf5

Keepalive: do not reject connections with ready flag set. Instead, call read event handler explicitly to test if there are actually any unexpected data. This fixes unbuffered proxy connections not being cached with epoll and rtsig event methods.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 08 Sep 2011 17:12:07 +0400
parents 52ca695446d3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for proxy with keepalive.
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 use IO::Socket::INET;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 use Socket qw/ CRLF /;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use Test::Nginx;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 ###############################################################################
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 select STDERR; $| = 1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 select STDOUT; $| = 1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 my $t = Test::Nginx->new()->has(qw/http proxy ssi rewrite/)
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 ->write_file_expand('nginx.conf', <<'EOF');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 %%TEST_GLOBALS%%
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 daemon off;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 events {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 http {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 %%TEST_GLOBALS_HTTP%%
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 upstream backend {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 server 127.0.0.1:8081;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 keepalive 1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 server {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 listen 127.0.0.1:8080;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 server_name localhost;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 proxy_read_timeout 2s;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 proxy_http_version 1.1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 proxy_set_header Connection "";
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 location / {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 proxy_pass http://backend;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 location /unbuffered/ {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 proxy_pass http://backend;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 proxy_buffering off;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 location /inmemory/ {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 ssi on;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 rewrite ^ /ssi.html break;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 EOF
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 $t->write_file('ssi.html',
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 '<!--#include virtual="/include$request_uri" set="x" -->' .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 'set: <!--#echo var="x" -->');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 $t->run_daemon(\&http_daemon);
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 eval {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 open OLDERR, ">&", \*STDERR; close STDERR;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 $t->run();
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 open STDERR, ">&", \*OLDERR;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 };
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 plan(skip_all => 'no keepalive patches') if $@;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
33
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
80 $t->plan(50);
27
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 ###############################################################################
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 # There are 3 mostly independend modes of upstream operation:
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 #
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 # 1. Buffered, i.e. normal mode with "proxy_buffering on;"
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 # 2. Unbuffered, i.e. "proxy_buffering off;".
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 # 3. In memory, i.e. ssi <!--#include ... set -->
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 #
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 # These all should be tested.
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 my ($r, $n);
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 # buffered
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 like($r = http_get('/buffered/length1'), qr/SEE-THIS/, 'buffered');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 like(http_get('/buffered/length2'), qr/X-Connection: $n.*SEE/ms, 'buffered 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 like($r = http_get('/buffered/chunked1'), qr/SEE-THIS/, 'buffered chunked');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 like(http_get('/buffered/chunked2'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 'buffered chunked 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 like($r = http_get('/buffered/complex1'), qr/(0123456789){100}/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 'buffered complex chunked');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 like(http_get('/buffered/complex2'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 'buffered complex chunked 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 like($r = http_get('/buffered/chunk01'), qr/200 OK/, 'buffered 0 chunk');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 like(http_get('/buffered/chunk02'), qr/X-Connection: $n/, 'buffered 0 chunk 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 like($r = http_head('/buffered/length/head1'), qr/(?!SEE-THIS)/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 'buffered head');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 like(http_head('/buffered/length/head2'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 'buffered head 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 like($r = http_get('/buffered/empty1'), qr/200 OK/, 'buffered empty');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 like(http_get('/buffered/empty2'), qr/X-Connection: $n/, 'buffered empty 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 like($r = http_get('/buffered/304nolen1'), qr/304 Not/, 'buffered 304');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 like(http_get('/buffered/304nolen2'), qr/X-Connection: $n/, 'buffered 304 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 like($r = http_get('/buffered/304len1'), qr/304 Not/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 'buffered 304 with length');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 like(http_get('/buffered/304len2'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 'buffered 304 with length 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 # unbuffered
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 like($r = http_get('/unbuffered/length1'), qr/SEE-THIS/, 'unbuffered');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 like(http_get('/unbuffered/length2'), qr/X-Connection: $n/, 'unbuffered 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 like($r = http_get('/unbuffered/chunked1'), qr/SEE-THIS/, 'unbuffered chunked');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 like(http_get('/unbuffered/chunked2'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 'unbuffered chunked 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 like($r = http_get('/unbuffered/complex1'), qr/(0123456789){100}/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 'unbuffered complex chunked');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 like(http_get('/unbuffered/complex2'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 'unbuffered complex chunked 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 like($r = http_get('/unbuffered/chunk01'), qr/200 OK/, 'unbuffered 0 chunk');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 like(http_get('/unbuffered/chunk02'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 'unbuffered 0 chunk 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 like($r = http_get('/unbuffered/empty1'), qr/200 OK/, 'unbuffered empty');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159 like(http_get('/unbuffered/empty2'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 'unbuffered empty 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 like($r = http_head('/unbuffered/length/head1'), qr/(?!SEE-THIS)/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 'unbuffered head');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 like(http_head('/unbuffered/length/head2'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 'unbuffered head 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168 like($r = http_get('/unbuffered/304nolen1'), qr/304 Not/, 'unbuffered 304');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170 like(http_get('/unbuffered/304nolen2'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 'unbuffered 304 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 like($r = http_get('/unbuffered/304len1'), qr/304 Not/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 'unbuffered 304 with length');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 $r =~ m/X-Connection: (\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 like(http_get('/unbuffered/304len2'), qr/X-Connection: $n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 'unbuffered 304 with length 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 # in memory
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 like($r = http_get('/inmemory/length1'), qr/SEE-THIS/, 'inmemory');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 $r =~ m/SEE-THIS(\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183 like(http_get('/inmemory/length2'), qr/SEE-THIS$n/, 'inmemory 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185 like($r = http_get('/inmemory/empty1'), qr/200 OK/, 'inmemory empty');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 $r =~ m/SEE-THIS(\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 like(http_get('/inmemory/empty2'), qr/200 OK/, 'inmemory empty 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189 like($r = http_get('/inmemory/chunked1'), qr/SEE-THIS/, 'inmemory chunked');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 $r =~ m/SEE-THIS(\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 like(http_get('/inmemory/chunked2'), qr/SEE-THIS$n/, 'inmemory chunked 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193 like($r = http_get('/inmemory/complex1'), qr/(0123456789){100}/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194 'inmemory complex chunked');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 $r =~ m/SEE-THIS(\d+)/; $n = $1;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196 like(http_get('/inmemory/complex2'), qr/SEE-THIS$n/,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 'inmemory complex chunked 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 like(http_get('/inmemory/chunk01'), qr/set: $/, 'inmemory 0 chunk');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 like(http_get('/inmemory/chunk02'), qr/set: $/, 'inmemory 0 chunk 2');
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201
33
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
202 # closed connection tests
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
203
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
204 like(http_get('/buffered/closed1'), qr/200 OK/, 'buffered closed 1');
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
205 like(http_get('/buffered/closed2'), qr/200 OK/, 'buffered closed 2');
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
206 like(http_get('/unbuffered/closed1'), qr/200 OK/, 'unbuffered closed 1');
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
207 like(http_get('/unbuffered/closed2'), qr/200 OK/, 'unbuffered closed 2');
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
208 like(http_get('/inmemory/closed1'), qr/200 OK/, 'inmemory closed 1');
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
209 like(http_get('/inmemory/closed2'), qr/200 OK/, 'inmemory closed 2');
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
210
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
211 # check for errors, shouldn't be any
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
212
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
213 like(`grep -F '[alert]' ${\($t->testdir())}/error.log`, qr/^$/s, 'no alerts');
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
214 like(`grep -F '[error]' ${\($t->testdir())}/error.log`, qr/^$/s, 'no errors');
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
215
27
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 ###############################################################################
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218 sub http_daemon {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 my $server = IO::Socket::INET->new(
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 Proto => 'tcp',
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 LocalHost => '127.0.0.1:8081',
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
222 Listen => 5,
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
223 Reuse => 1
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 )
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
225 or die "Can't create listening socket: $!\n";
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227 my $ccount = 0;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 my $rcount = 0;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 # dumb server which is able to keep connections alive
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 while (my $client = $server->accept()) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 Test::Nginx::log_core('||', "connection from " . $client->peerhost());
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 $client->autoflush(1);
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235 $ccount++;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
236
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
237 while (1) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238 my $headers = '';
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 my $uri = '';
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
240
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
241 while (<$client>) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242 Test::Nginx::log_core('||', $_);
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 $headers .= $_;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244 last if (/^\x0d?\x0a?$/);
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 last if $headers eq '';
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 $rcount++;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 if ($uri =~ m/length/) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 "HTTP/1.1 200 OK" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 "X-Request: $rcount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256 "X-Connection: $ccount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257 "Content-Length: 26" . CRLF . CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258 print $client "TEST-OK-IF-YOU-SEE-THIS" .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259 sprintf("%03d", $ccount)
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 unless $headers =~ /^HEAD/i;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262 } elsif ($uri =~ m/empty/) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264 "HTTP/1.1 200 OK" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 "X-Request: $rcount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266 "X-Connection: $ccount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
267 "Content-Length: 0" . CRLF . CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269 } elsif ($uri =~ m/304nolen/) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 "HTTP/1.1 304 Not Modified" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272 "X-Request: $rcount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273 "X-Connection: $ccount" . CRLF . CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275 } elsif ($uri =~ m/304len/) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
277 "HTTP/1.1 304 Not Modified" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
278 "X-Request: $rcount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
279 "X-Connection: $ccount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
280 "Content-Length: 100" . CRLF . CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
281
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282 } elsif ($uri =~ m/chunked/) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
283 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
284 "HTTP/1.1 200 OK" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
285 "X-Request: $rcount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
286 "X-Connection: $ccount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
287 "Transfer-Encoding: chunked" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
288 CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
289 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
290 "1a" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
291 "TEST-OK-IF-YOU-SEE-THIS" .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
292 sprintf("%03d", $ccount) . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
293 "0" . CRLF . CRLF
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
294 unless $headers =~ /^HEAD/i;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
295
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
296 } elsif ($uri =~ m/complex/) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
297 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
298 "HTTP/1.1 200 OK" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
299 "X-Request: $rcount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
300 "X-Connection: $ccount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
301 "Transfer-Encoding: chunked" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
302 CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
303
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
304 if ($headers !~ /^HEAD/i) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
305 for my $n (1..100) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
306 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
307 "a" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
308 "0123456789" . CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
309 select undef, undef, undef, 0.01
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
310 if $n % 50 == 0;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
311 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
312 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
313 "1a" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
314 "TEST-OK-IF-YOU-SEE-THIS" .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
315 sprintf("%03d", $ccount) .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
316 CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
317 "0" . CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
318 select undef, undef, undef, 0.05;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
319 print $client CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
320 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
321
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
322 } elsif ($uri =~ m/chunk0/) {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
323 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
324 "HTTP/1.1 200 OK" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
325 "X-Request: $rcount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
326 "X-Connection: $ccount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
327 "Transfer-Encoding: chunked" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
328 CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
329 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
330 "0" . CRLF . CRLF
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
331 unless $headers =~ /^HEAD/i;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
332
33
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
333 } elsif ($uri =~ m/closed/) {
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
334 print $client
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
335 "HTTP/1.1 200 OK" . CRLF .
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
336 "X-Request: $rcount" . CRLF .
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
337 "X-Connection: $ccount" . CRLF .
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
338 "Connection: close" . CRLF .
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
339 "Content-Length: 12" . CRLF . CRLF .
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
340 "0123456789" . CRLF;
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
341 last;
52ca695446d3 Keepalive: more connection validity checks.
Maxim Dounin <mdounin@mdounin.ru>
parents: 27
diff changeset
342
27
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
343 } else {
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
344 print $client
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
345 "HTTP/1.1 404 Not Found" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
346 "X-Request: $rcount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
347 "X-Connection: $ccount" . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
348 "Connection: close" . CRLF . CRLF .
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
349 "Oops, '$uri' not found" . CRLF;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
350 last;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
351 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
352 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
353
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
354 close $client;
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
355 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
356 }
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
357
f3b50effc1d4 Keepalive: add proxy tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
358 ###############################################################################