annotate t/fastcgi-keepalive.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 e10649a96f39
children
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
34
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
20 my $t = Test::Nginx->new()->write_file_expand('nginx.conf', <<'EOF');
14
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
20
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 16
diff changeset
22 %%TEST_GLOBALS%%
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 16
diff changeset
23
14
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 master_process off;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 daemon off;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 events {
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 {
20
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 16
diff changeset
31 %%TEST_GLOBALS_HTTP%%
14
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 upstream backend {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 server 127.0.0.1:8081;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 keepalive 1;
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
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 server {
20
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 16
diff changeset
39 listen 127.0.0.1:8080;
14
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 server_name localhost;
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 location / {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 fastcgi_pass backend;
34
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
44 fastcgi_keep_conn on;
14
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);
34
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
52
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
53 eval {
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
54 open OLDERR, ">&", \*STDERR; close STDERR;
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
55 $t->run();
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
56 open STDERR, ">&", \*OLDERR;
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
57 };
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
58 plan(skip_all => 'no keepalive patches') if $@;
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
59
e10649a96f39 Keepalive: use fastcgi_keep_conn in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 20
diff changeset
60 $t->plan(6);
14
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 ###############################################################################
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('/'), qr/SEE-THIS/, 'fastcgi request');
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 like(http_get('/redir'), qr/302/, 'fastcgi redirect');
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 like(http_get('/'), qr/^request: 3$/m, 'fastcgi third request');
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 like(http_get('/single'), qr/^connection: 1$/m, 'single connection used');
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 # New connection to fastcgi application should be established after HEAD
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 # 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
72 # body).
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 unlike(http_head('/head'), qr/SEE-THIS/, 'no data in HEAD');
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 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
77
14
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 ###############################################################################
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 # Simple FastCGI responder implementation. Unlike FCGI and FCGI::Async it's
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 # able to count connections.
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 # http://www.fastcgi.com/devkit/doc/fcgi-spec.html
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 sub fastcgi_read_record($) {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 my ($socket) = @_;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 my ($n, $h, $header);
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 $n = $socket->read($header, 8);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 return undef if !defined $n or $n != 8;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 @{$h}{qw/ version type id clen plen /} = unpack("CCnnC", $header);
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 $n = $socket->read($h->{content}, $h->{clen});
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 return undef if $n != $h->{clen};
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 $n = $socket->read($h->{padding}, $h->{plen});
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 return undef if $n != $h->{plen};
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 $h->{socket} = $socket;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 return $h;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 }
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 sub fastcgi_respond($$) {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 my ($h, $body) = @_;
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 # stdout
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 $h->{socket}->write(pack("CCnnCx", $h->{version}, 6, $h->{id},
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 length($body), 0));
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 $h->{socket}->write($body);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112
16
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
113 # 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
114 # 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
115
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
116 my $tt = "test text, just for test";
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
117
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
118 $h->{socket}->write(pack("CCnnCx", $h->{version}, 6, $h->{id},
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
119 length($tt . $tt), 0) . $tt);
14
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 select(undef, undef, undef, 0.1);
16
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
121 $h->{socket}->write($tt . pack("CC", $h->{version}, 7));
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
122 select(undef, undef, undef, 0.1);
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
123 $h->{socket}->write(pack("nnCx", $h->{id}, length($tt), 0));
28f882414188 Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents: 15
diff changeset
124 $h->{socket}->write($tt);
14
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 # close stdout
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 $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
128
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 select(undef, undef, undef, 0.1);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 # end request
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 $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
133 $h->{socket}->write(pack("NCxxx", 0, 0));
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
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 sub fastcgi_test_daemon {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 my $server = IO::Socket::INET->new(
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 Proto => 'tcp',
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 LocalAddr => '127.0.0.1:8081',
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 Listen => 5,
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 Reuse => 1
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 or die "Can't create listening socket: $!\n";
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 local $SIG{PIPE} = 'IGNORE';
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 my $ccount = 0;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 my $rcount = 0;
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 while (my $client = $server->accept()) {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151 $client->autoflush(1);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 Test::Nginx::log_core('||', "fastcgi connection");
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 $ccount++;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 while (my $h = fastcgi_read_record($client)) {
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 Test::Nginx::log_core('||', "fastcgi record: "
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 . " $h->{version}, $h->{type}, $h->{id}, "
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159 . "'$h->{content}'");
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 # skip everything unless stdin, then respond
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 next if $h->{type} != 5;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 $rcount++;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 # respond
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 fastcgi_respond($h, <<EOF);
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168 Location: http://localhost:8080/redirect
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 Content-Type: text/html
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 SEE-THIS
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172 request: $rcount
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 connection: $ccount
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 EOF
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 }
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 close $client;
28af4b0b32c1 Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 }
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 ###############################################################################