# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl large_return.t'
$ENV{log_level}='info';
$SIG{CHLD} = 'IGNORE';
use Test::More tests => 4;
BEGIN { use_ok('Parallel::Fork::BossWorkerAsync') };
require_ok('Parallel::Fork::BossWorkerAsync');
my ($path, $len, $data, $rlen, $rdata);
if (-e "./lib/Parallel/Fork/BossWorkerAsync.pm") {
$path = "./lib/Parallel/Fork/BossWorkerAsync.pm";
} elsif (-e "../lib/Parallel/Fork/BossWorkerAsync.pm") {
$path = "../lib/Parallel/Fork/BossWorkerAsync.pm";
} else {
diag("can't find large datafile: BossWorkerAsync.pm");
fail();
}
open(F, "< $path") or die $!;
$data = join('', <F>);
$len = length($data);
close(F);
my $multiplier = 256;
my $bw = Parallel::Fork::BossWorkerAsync->new(
work_handler => \&work,
);
for my $i (1..1) {
$bw->add_work( { data => $data } );
}
while ($bw->pending()) {
my $h = $bw->get_result();
$rlen = $h->{length};
$rdata = $h->{data};
}
$bw->shut_down();
is($rlen, length($rdata), "large return test 1");
is($rlen, $len * $multiplier, "large return test 2");
sub work {
my ($job)=@_;
my $large_return;
for my $i (1 .. $multiplier) {
$large_return .= $job->{data};
}
return { data => $large_return, length => length($large_return) };
}