From: Michal Josef Špaček Date: Mon, 19 Jul 2021 10:23:52 +0000 (+0200) Subject: Add test for FCGI over unix domain socket X-Git-Tag: 0.80~2^2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2Ffcgi2.git;a=commitdiff_plain;h=0b895b96b861d6cefccd5ad6d10053033f482b02 Add test for FCGI over unix domain socket --- diff --git a/perl/Makefile.PL b/perl/Makefile.PL index cb237c1..37ef793 100644 --- a/perl/Makefile.PL +++ b/perl/Makefile.PL @@ -137,6 +137,12 @@ WriteMakefile( 'realclean' => { FILES => 'configure MANIFEST.SKIP.bak MANIFEST.bak Makefile.old' }, PM => {'FCGI.pm' => '$(INST_ARCHLIBDIR)/FCGI.pm'}, PREREQ_PM => {'XSLoader' => '0'}, + TEST_REQUIRES => { + 'FCGI::Client' => 0, + 'File::Temp' => 0, + 'IO::Socket::UNIX' => 0, + 'Test::More' => 0, + }, @extras, ); diff --git a/perl/t/02-unix_domain_socket.t b/perl/t/02-unix_domain_socket.t new file mode 100644 index 0000000..c30af69 --- /dev/null +++ b/perl/t/02-unix_domain_socket.t @@ -0,0 +1,62 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +use FCGI; +use FCGI::Client; +use File::Temp qw(tempfile); +use IO::Socket::UNIX; +use Test::More 'tests' => 4; + +my (undef, $unix_socket_file) = tempfile(); +my $fcgi_socket = FCGI::OpenSocket($unix_socket_file, 5); + +# Client +if (my $pid = fork()) { + my $right_ret = <<'END'; +Content-Type: text/plain + +END + + my ($stdout, $stderr) = client_request($unix_socket_file); + is($stdout, $right_ret."0\n", 'Test first round on stdout.'); + is($stderr, undef, 'Test first round on stderr.'); + + ($stdout, $stderr) = client_request($unix_socket_file); + is($stdout, $right_ret."1\n", 'Test second round on stdout.'); + is($stderr, undef, 'Test second round on stderr.'); + +# Server +} elsif (defined $pid) { + my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $fcgi_socket); + + # Only two cycles. + my $count = 0; + while ($count < 2 && $request->Accept() >= 0) { + print "Content-Type: text/plain\n\n"; + print $count++."\n"; + } + exit; + +} else { + die $!; +} + +# Cleanup. +FCGI::CloseSocket($fcgi_socket); +unlink $unix_socket_file; + +sub client_request { + my $unix_socket_file = shift; + + my $sock = IO::Socket::UNIX->new( + Peer => $unix_socket_file, + ) or die $!; + my $client = FCGI::Client::Connection->new(sock => $sock); + my ($stdout, $stderr) = $client->request({ + REQUEST_METHOD => 'GET', + }, ''); + + return ($stdout, $stderr); +}