Mercurial > hg > ngx_http_upstream_keepalive
annotate t/fastcgi-keepalive.t @ 21:9a4ee6fe1c6d
Keepalive: avoid closing upstream connection on stale events.
Under some conditions it's possible that stale events occur, i.e. read
event handler called for just saved upstream connection without any data
available for read. We shouldn't close upstream connection in such
situation.
Reported by: Martin Fjordvald
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 14 Sep 2010 04:01:14 +0400 |
parents | 8d8eaaf07663 |
children | e10649a96f39 |
rev | line source |
---|---|
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Test for fastcgi backend with keepalive. |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 use Test::More; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 use Test::Nginx; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 ############################################################################### |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 select STDERR; $| = 1; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 select STDOUT; $| = 1; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 my $t = Test::Nginx->new()->plan(6) |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 ->write_file_expand('nginx.conf', <<'EOF'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 |
20 | 23 %%TEST_GLOBALS%% |
24 | |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 master_process off; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 daemon off; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 events { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 http { |
20 | 32 %%TEST_GLOBALS_HTTP%% |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 upstream backend { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 server 127.0.0.1:8081; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 keepalive 1; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 server { |
20 | 40 listen 127.0.0.1:8080; |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 server_name localhost; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 location / { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 fastcgi_pass backend; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 EOF |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 $t->run_daemon(\&fastcgi_test_daemon); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 $t->run(); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 ############################################################################### |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 |
15
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
56 { |
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
57 local $TODO = 'needs experimental patches'; |
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
58 local $SIG{__WARN__} = sub {}; |
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
59 |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 like(http_get('/'), qr/SEE-THIS/, 'fastcgi request'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 like(http_get('/redir'), qr/302/, 'fastcgi redirect'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 like(http_get('/'), qr/^request: 3$/m, 'fastcgi third request'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 like(http_get('/single'), qr/^connection: 1$/m, 'single connection used'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 # New connection to fastcgi application should be established after HEAD |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 # requests since nginx doesn't read whole response (as it doesn't need |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 # body). |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 unlike(http_head('/head'), qr/SEE-THIS/, 'no data in HEAD'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 local $TODO = 'needs experimental patches'; |
15
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
76 local $SIG{__WARN__} = sub {}; |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 like(http_get('/after'), qr/^connection: 2$/m, 'new connection after HEAD'); |
15
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
79 |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 ############################################################################### |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 # Simple FastCGI responder implementation. Unlike FCGI and FCGI::Async it's |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 # able to count connections. |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 # http://www.fastcgi.com/devkit/doc/fcgi-spec.html |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 sub fastcgi_read_record($) { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 my ($socket) = @_; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 my ($n, $h, $header); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 $n = $socket->read($header, 8); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 return undef if !defined $n or $n != 8; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 @{$h}{qw/ version type id clen plen /} = unpack("CCnnC", $header); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 $n = $socket->read($h->{content}, $h->{clen}); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 return undef if $n != $h->{clen}; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 $n = $socket->read($h->{padding}, $h->{plen}); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 return undef if $n != $h->{plen}; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 $h->{socket} = $socket; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 return $h; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 sub fastcgi_respond($$) { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 my ($h, $body) = @_; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 # stdout |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 $h->{socket}->write(pack("CCnnCx", $h->{version}, 6, $h->{id}, |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 length($body), 0)); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 $h->{socket}->write($body); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 |
16
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
117 # write some text to stdout and stderr splitted over multiple network |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
118 # packets to test if we correctly set pipe length in various places |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
119 |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
120 my $tt = "test text, just for test"; |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
121 |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
122 $h->{socket}->write(pack("CCnnCx", $h->{version}, 6, $h->{id}, |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
123 length($tt . $tt), 0) . $tt); |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 select(undef, undef, undef, 0.1); |
16
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
125 $h->{socket}->write($tt . pack("CC", $h->{version}, 7)); |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
126 select(undef, undef, undef, 0.1); |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
127 $h->{socket}->write(pack("nnCx", $h->{id}, length($tt), 0)); |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
128 $h->{socket}->write($tt); |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
129 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
130 # close stdout |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
131 $h->{socket}->write(pack("CCnnCx", $h->{version}, 6, $h->{id}, 0, 0)); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
132 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
133 select(undef, undef, undef, 0.1); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
134 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
135 # end request |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 $h->{socket}->write(pack("CCnnCx", $h->{version}, 3, $h->{id}, 8, 0)); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 $h->{socket}->write(pack("NCxxx", 0, 0)); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
138 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
139 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
140 sub fastcgi_test_daemon { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
141 my $server = IO::Socket::INET->new( |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 Proto => 'tcp', |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
143 LocalAddr => '127.0.0.1:8081', |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
144 Listen => 5, |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
145 Reuse => 1 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
146 ) |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
147 or die "Can't create listening socket: $!\n"; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
148 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
149 local $SIG{PIPE} = 'IGNORE'; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
150 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
151 my $ccount = 0; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 my $rcount = 0; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
153 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 while (my $client = $server->accept()) { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
155 $client->autoflush(1); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
156 Test::Nginx::log_core('||', "fastcgi connection"); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
157 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
158 $ccount++; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
159 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
160 while (my $h = fastcgi_read_record($client)) { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
161 Test::Nginx::log_core('||', "fastcgi record: " |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
162 . " $h->{version}, $h->{type}, $h->{id}, " |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
163 . "'$h->{content}'"); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
164 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
165 # skip everything unless stdin, then respond |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
166 next if $h->{type} != 5; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
167 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
168 $rcount++; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
169 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
170 # respond |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 fastcgi_respond($h, <<EOF); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 Location: http://localhost:8080/redirect |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 Content-Type: text/html |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 SEE-THIS |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
176 request: $rcount |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
177 connection: $ccount |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
178 EOF |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
179 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
180 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 close $client; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
182 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
183 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
184 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
185 ############################################################################### |