use Forks::Super ':test';
use Test::More tests => 3;
use Cwd;
use Carp;
use strict;
use warnings;
our $CWD = Cwd::getcwd;
if (${^TAINT}) {
$ENV{KEEP} ||= 0;
($ENV{KEEP}) = $ENV{KEEP} =~ /(.*)/;
($CWD) = $CWD =~ /(.*)/;
$ENV{PATH} = '';
($^X) = $^X =~ /(.*)/;
}
my $output = "$CWD/t/out/daemon5.$$.out";
# does daemon respect a timeout option
my $pid = fork {
env => { LOG_FILE => $output, VALUE => 30 },
name => 'daemon4',
daemon => 1,
cmd => [ $^X, "$CWD/t/external-daemon.pl" ],
timeout => 4,
};
ok(isValidPid($pid), "fork to cmd with daemon & timeout");
sleep 2;
my $k = Forks::Super::kill 'ZERO', $pid;
ok($k, "($k) daemon proc is alive");
sleep 6;
$k = Forks::Super::kill 'ZERO', $pid;
okl(!$k, "($k) daemon proc timed out in <= 8s");
if ($k) {
for (1..5) {
sleep 1;
$k = Forks::Super::kill 'ZERO',$pid;
if (!$k) {
diag "daemon proc timed out after additional $_ s";
last;
}
}
}
unlink $output, "$output.err" unless $ENV{KEEP};