AnyEvent-Task
view release on metacpan or search on metacpan
t/dont_refork_after_error.t view on Meta::CPAN
use common::sense;
use List::Util;
use Callback::Frame;
use AnyEvent::Util;
use AnyEvent::Task::Server;
use AnyEvent::Task::Client;
use Test::More tests => 7;
## This test verifies that the dont_refork_after_error client stops the
## worker process from being killed off after a checkout is released
## where the worker threw an error in its lifetime.
## Note that a checkout's methods can still be called after an error
## is thrown but before the checkout is released, perhaps to access
## error states or to rollback a transaction.
AnyEvent::Task::Server::fork_task_server(
listen => ['unix/', '/tmp/anyevent-task-test.socket'],
interface => {
get_pid => sub { return $$ },
throw => sub { my ($err) = @_; die $err; },
},
);
my $client = AnyEvent::Task::Client->new(
connect => ['unix/', '/tmp/anyevent-task-test.socket'],
max_workers => 1,
dont_refork_after_error => 1,
);
my $cv = AE::cv;
my $pid;
{
my $checkout = $client->checkout();
$checkout->get_pid(sub {
my ($checkout, $ret) = @_;
$pid = $ret;
like($pid, qr/^\d+$/, "got PID");
$checkout->get_pid(sub {
my ($checkout, $ret) = @_;
is($pid, $ret, "PID didn't change in same checkout");
$checkout->throw("BLAH", frame(code => sub {
die "throw method didn't return error";
}, catch => sub {
my $err = $@;
like($err, qr/BLAH/, "caught BLAH error");
$checkout->get_pid(sub {
my ($checkout, $ret) = @_;
is($pid, $ret, "PID didn't change even after error");
$checkout->throw("OUCH", frame(code => sub {
die "throw method didn't return error 2";
}, catch => sub {
my $err = $@;
like($err, qr/OUCH/, "caught OUCH error");
$checkout->get_pid(sub {
my ($checkout, $ret) = @_;
is($pid, $ret, "PID didn't change even after second error");
});
}));
});
}));
});
});
}
{
my $checkout = $client->checkout();
$checkout->get_pid(sub {
my ($checkout, $ret) = @_;
is($ret, $pid, "new worker was not created since previous checkout had an error and we set dont_refork_after_error");
$cv->send;
});
}
( run in 1.436 second using v1.01-cache-2.11-cpan-39bf76dae61 )