Commit | Line | Data |
0b895b96 |
1 | #!/usr/bin/env perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use FCGI; |
7 | use FCGI::Client; |
8 | use File::Temp qw(tempfile); |
9 | use IO::Socket::UNIX; |
10 | use Test::More 'tests' => 4; |
11 | |
12 | my (undef, $unix_socket_file) = tempfile(); |
13 | my $fcgi_socket = FCGI::OpenSocket($unix_socket_file, 5); |
14 | |
15 | # Client |
16 | if (my $pid = fork()) { |
17 | my $right_ret = <<'END'; |
18 | Content-Type: text/plain |
19 | |
20 | END |
21 | |
22 | my ($stdout, $stderr) = client_request($unix_socket_file); |
23 | is($stdout, $right_ret."0\n", 'Test first round on stdout.'); |
24 | is($stderr, undef, 'Test first round on stderr.'); |
25 | |
26 | ($stdout, $stderr) = client_request($unix_socket_file); |
27 | is($stdout, $right_ret."1\n", 'Test second round on stdout.'); |
28 | is($stderr, undef, 'Test second round on stderr.'); |
29 | |
30 | # Server |
31 | } elsif (defined $pid) { |
32 | my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $fcgi_socket); |
33 | |
34 | # Only two cycles. |
35 | my $count = 0; |
36 | while ($count < 2 && $request->Accept() >= 0) { |
37 | print "Content-Type: text/plain\n\n"; |
38 | print $count++."\n"; |
39 | } |
40 | exit; |
41 | |
42 | } else { |
43 | die $!; |
44 | } |
45 | |
46 | # Cleanup. |
47 | FCGI::CloseSocket($fcgi_socket); |
48 | unlink $unix_socket_file; |
49 | |
50 | sub client_request { |
51 | my $unix_socket_file = shift; |
52 | |
53 | my $sock = IO::Socket::UNIX->new( |
54 | Peer => $unix_socket_file, |
55 | ) or die $!; |
56 | my $client = FCGI::Client::Connection->new(sock => $sock); |
57 | my ($stdout, $stderr) = $client->request({ |
58 | REQUEST_METHOD => 'GET', |
59 | }, ''); |
60 | |
61 | return ($stdout, $stderr); |
62 | } |