annotate t/fastcgi-keepalive.t @ 16:28f882414188 0.2

Keepalive: better fastcgi testing. With previous fastcgi keepalive patches minimal number of bytes that should be fed to input filter (pipe->length) wasn't always set correctly. Try harder to catch this. Reported by: Denis F. Latypoff
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 23 Apr 2009 05:33:03 +0400
parents 4fe7e417c424
children 8d8eaaf07663
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 master_process off;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 daemon off;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 events {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 worker_connections 1024;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 }
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 http {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 access_log off;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 client_body_temp_path %%TESTDIR%%/client_body_temp;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 fastcgi_temp_path %%TESTDIR%%/fastcgi_temp;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 proxy_temp_path %%TESTDIR%%/proxy_temp;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 upstream backend {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 server 127.0.0.1:8081;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 keepalive 1;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 }
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 server {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 listen localhost:8080;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 server_name localhost;
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 location / {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 fastcgi_pass backend;
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 }
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
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 EOF
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 $t->run_daemon(\&fastcgi_test_daemon);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 $t->run();
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 ###############################################################################
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58
15
4fe7e417c424 Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
59 {
4fe7e417c424 Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
60 local $TODO = 'needs experimental patches';
4fe7e417c424 Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
61 local $SIG{__WARN__} = sub {};
4fe7e417c424 Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
62
14
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 like(http_get('/'), qr/SEE-THIS/, 'fastcgi request');
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 like(http_get('/redir'), qr/302/, 'fastcgi redirect');
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 like(http_get('/'), qr/^request: 3$/m, 'fastcgi third request');
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 like(http_get('/single'), qr/^connection: 1$/m, 'single connection used');
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 }
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 # New connection to fastcgi application should be established after HEAD
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 # 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
73 # body).
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 unlike(http_head('/head'), qr/SEE-THIS/, 'no data in HEAD');
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76
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 local $TODO = 'needs experimental patches';
15
4fe7e417c424 Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents: 14
diff changeset
79 local $SIG{__WARN__} = sub {};
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 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
82
14
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
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 ###############################################################################
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 # Simple FastCGI responder implementation. Unlike FCGI and FCGI::Async it's
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 # able to count connections.
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 # http://www.fastcgi.com/devkit/doc/fcgi-spec.html
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 sub fastcgi_read_record($) {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 my ($socket) = @_;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 my ($n, $h, $header);
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 $n = $socket->read($header, 8);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 return undef if !defined $n or $n != 8;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 @{$h}{qw/ version type id clen plen /} = unpack("CCnnC", $header);
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->{content}, $h->{clen});
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 return undef if $n != $h->{clen};
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 $n = $socket->read($h->{padding}, $h->{plen});
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 return undef if $n != $h->{plen};
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 $h->{socket} = $socket;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 return $h;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 }
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 sub fastcgi_respond($$) {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 my ($h, $body) = @_;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 # stdout
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 $h->{socket}->write(pack("CCnnCx", $h->{version}, 6, $h->{id},
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 length($body), 0));
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 $h->{socket}->write($body);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119
16
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
120 # 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
121 # 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
122
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
123 my $tt = "test text, just for test";
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
124
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
125 $h->{socket}->write(pack("CCnnCx", $h->{version}, 6, $h->{id},
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
126 length($tt . $tt), 0) . $tt);
14
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 select(undef, undef, undef, 0.1);
16
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
128 $h->{socket}->write($tt . pack("CC", $h->{version}, 7));
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
129 select(undef, undef, undef, 0.1);
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
130 $h->{socket}->write(pack("nnCx", $h->{id}, length($tt), 0));
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
131 $h->{socket}->write($tt);
14
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 # close stdout
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 $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
135
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 select(undef, undef, undef, 0.1);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 # end request
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 $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
140 $h->{socket}->write(pack("NCxxx", 0, 0));
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 }
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 sub fastcgi_test_daemon {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 my $server = IO::Socket::INET->new(
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 Proto => 'tcp',
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 LocalAddr => '127.0.0.1:8081',
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 Listen => 5,
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 Reuse => 1
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 )
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 or die "Can't create listening socket: $!\n";
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 local $SIG{PIPE} = 'IGNORE';
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 my $ccount = 0;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 my $rcount = 0;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 while (my $client = $server->accept()) {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 $client->autoflush(1);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159 Test::Nginx::log_core('||', "fastcgi connection");
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 $ccount++;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 while (my $h = fastcgi_read_record($client)) {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 Test::Nginx::log_core('||', "fastcgi record: "
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 . " $h->{version}, $h->{type}, $h->{id}, "
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 . "'$h->{content}'");
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 # skip everything unless stdin, then respond
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 next if $h->{type} != 5;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 $rcount++;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 # respond
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 fastcgi_respond($h, <<EOF);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 Location: http://localhost:8080/redirect
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 Content-Type: text/html
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 SEE-THIS
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 request: $rcount
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 connection: $ccount
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 EOF
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 close $client;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185 }
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 }
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 ###############################################################################