use Forks::Super ':test_CA'; use Test::More tests => 22; use strict; use warnings; # # test the Forks::Super::waitall command # my (%x,@pid); my $t0 = Time::HiRes::time(); for (my $i=0; $i<5; $i++) { my $pid = fork { sub => sub { sleep 5 ; exit $i }, callback => { ___start => sub { print Forks::Super::Util::Ctime()," start\n" } } }; $x{$pid} = $i << 8; push @pid, $pid; } my $t = Time::HiRes::time(); Forks::Super::waitall; my $t2 = Time::HiRes::time(); ($t0,$t) = ($t2-$t0, $t2-$t); my $p = wait; ok($p == -1, "wait after waitall returns -1==$p"); okl($t0 >= 4.85 && $t <= 10, ### 2 ### was 6 obs 6.39,8.99,9.70 "took ${t}s ${t0}s expected 5-6"); foreach my $pid (@pid) { my $j = Forks::Super::Job::get($pid); ok(defined $j, "exercise $pid Forks::Super::Job::get"); ok($j->{real_pid} == $pid, "real_pid == pid for regular job"); ok($j->{state} eq "REAPED", "waitall puts jobs in REAPED state"); ok($j->{status} == $x{$pid}, "exit status was captured"); }