Async-Simple-Pool

 view release on metacpan or  search on metacpan

t/06-task-forktmpfile.t  view on Meta::CPAN

#!perl -T

use Modern::Perl;
use POSIX;
use Test::Spec;
use Test::Exception;
use Time::HiRes qw/ sleep /;

plan tests => 21;

# use lib '../lib';

use Async::Simple::Task::ForkTmpFile;

my $task;
my $timeout    = 1;
my $sub        = sub { sleep $timeout; return $_[0]-1  };
my $sub_scalar = sub { return $_[0]+1                  };
my $sub_hash   = sub { return { y => $_[0]->{x}+1 }    };
my $sub_array  = sub { return [ reverse @{ $_[0] } ]   };

describe 'All' => sub {

    describe 'init data' => sub {

#         it 'init errors' => sub {
#             # Create a fork process, which will wait for data and execute &$sub if data will be passed
#             ok( ! eval{ Async::Simple::Task::ForkTmpFile->new( ) } && $@, 'no params' );
#             undef $@;
#             ok( ! eval{ Async::Simple::Task::ForkTmpFile->new( task => 1234 ) } && $@, 'bad params' );
#             undef $@;
#         };

        it 'init ok' => sub {
            my $task = Async::Simple::Task::ForkTmpFile->new( task => $sub, id => 12345 );
            my $pid = $task->pid;

            isa_ok( $task, 'Async::Simple::Task::ForkTmpFile', 'successful init.' );
            is( ref $task->reader, '', 'have scalar reader=' . $task->reader );
            is( ref $task->writer, '', 'have scalar writer=' . $task->writer );
            isa_ok( $task->task, 'CODE', 'task exists and is a CODE' );

            is( $task->timeout, 0.01, 'default timeout' );
            is( $task->id, 12345, 'id found' );
            ok( $task->pid =~ /^-?\d{2,}$/, 'fork done, pid setted' );
            is( $task->kill_on_exit, 1, 'default kill_on_exit' );
            ok( -d $task->tmp_dir, 'tmp directory exists:' . $task->tmp_dir );
            ok( -w $task->tmp_dir, 'tmp dir is writable' . $task->tmp_dir );
            is( waitpid( $task->pid, WNOHANG ), 0, 'kid is active' );
            undef $task;
            sleep 0.2;
            ok( waitpid( $pid, WNOHANG ) =~ /^-?\d{1,}$/, 'kid closed' ); # win: -1, linux: pid
        };

        it 'init params check' => sub {
            my $task = Async::Simple::Task::ForkTmpFile->new( task => $sub, timeout => 1, kill_on_exit => 0, tmp_dir => 'var_tmp' );
            is( $task->timeout, 1, 'timeout setted' );
            is( $task->tmp_dir, 'var_tmp', 'tmpdir setted to user`s' );
            is( $task->kill_on_exit, 0, 'kill_on_exit setted' );
            $task->kill_on_exit(1);
            undef $task;
        };
    };



( run in 2.374 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )