From 59c946a014f34cd90621b1fb3b30af99ba80bf61 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 26 Dec 2018 09:07:49 +0000 Subject: tests: consolidate process spawning code. IPC::Run provides a nice simplification in several places; and we already use it (optionally) on a lot of tests. For the non-test code, we still rely on our vfork-capable Inline::C stuff since real-world server processes can get large enough to where vfork is an advantage. Maybe Perl5 can use CLONE_VFORK somehow, one day: https://rt.perl.org/Ticket/Display.html?id=128227 Ohg V'q engure cbeg choyvp-vaobk gb Ehol :C --- t/httpd.t | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) (limited to 't/httpd.t') diff --git a/t/httpd.t b/t/httpd.t index f33c0969..44df1642 100644 --- a/t/httpd.t +++ b/t/httpd.t @@ -12,8 +12,8 @@ foreach my $mod (qw(Plack::Util Plack::Builder Danga::Socket use File::Temp qw/tempdir/; use Cwd qw/getcwd/; use IO::Socket; -use Fcntl qw(FD_CLOEXEC F_SETFD F_GETFD); use Socket qw(SO_KEEPALIVE IPPROTO_TCP TCP_NODELAY); +require './t/common.perl'; # FIXME: too much setup my $tmpdir = tempdir('pi-httpd-XXXXXX', TMPDIR => 1, CLEANUP => 1); @@ -64,25 +64,8 @@ EOF $im->done($mime); } ok($sock, 'sock created'); - $! = 0; - my $fl = fcntl($sock, F_GETFD, 0); - ok(! $!, 'no error from fcntl(F_GETFD)'); - is($fl, FD_CLOEXEC, 'cloexec set by default (Perl behavior)'); - $pid = fork; - if ($pid == 0) { - use POSIX qw(dup2); - # pretend to be systemd - fcntl($sock, F_SETFD, $fl &= ~FD_CLOEXEC); - dup2(fileno($sock), 3) or die "dup2 failed: $!\n"; - $ENV{LISTEN_PID} = $$; - $ENV{LISTEN_FDS} = 1; - exec $httpd, "--stdout=$out", "--stderr=$err"; - die "FAIL: $!\n"; - } - ok(defined $pid, 'forked httpd process successfully'); - $! = 0; - fcntl($sock, F_SETFD, $fl |= FD_CLOEXEC); - ok(! $!, 'no error from fcntl(F_SETFD)'); + my $cmd = [ $httpd, "--stdout=$out", "--stderr=$err" ]; + $pid = spawn_listener(undef, $cmd, [$sock]); my $host = $sock->sockhost; my $port = $sock->sockport; my $conn = IO::Socket::INET->new(PeerAddr => $host, -- cgit v1.2.3-24-ge0c7