AnyEvent-Retry

 view release on metacpan or  search on metacpan

lib/AnyEvent/Retry/Coro.pm  view on Meta::CPAN

    my ($self, $i) = @_;
    weaken $self;
    $self->running_coro(async {
        $self->handle_result($self->run_code);
        $self->clear_running_coro if defined $self;
    });
};

sub DEMOLISH {
    my $self = shift;
    $self->running_coro->throw('DEMOLISH');
}

sub wait {
    my ($status, @args) = Coro::rouse_wait();
    return $args[0] if $status eq 'success';
    die $args[1];
}

sub run {
    my $self = shift;

t/retry-basic-coro.t  view on Meta::CPAN

    try      => sub { Coro::AnyEvent::sleep 1; return 0 },
);

my $kill = async {
    while(1){
        Coro::AnyEvent::sleep 1;
        undef $r2;
    }
};

throws_ok {
    $r2->run;
} qr/DEMOLISH/, 'demolition still works';

$kill->cancel;

done_testing;

t/retry-maxtimes.t  view on Meta::CPAN

my $r = AnyEvent::Retry->new(
    on_failure => sub { $cv->croak($_[1]) },
    on_success => sub { $cv->send($_[0])  },
    max_tries  => 3,
    interval   => { Fibonacci => { scale => 1/1000 } },
    try        => sub { $_[0]->() }, # never successful (smash with hammer!)
);

$r->start;

throws_ok {
    $cv->recv;
} qr/3/, 'max_tries exceeded after 3';

done_testing;

t/retry-undef.t  view on Meta::CPAN

        interval   => { Fibonacci => { scale => 1/1000 } },
        try        => sub {},   # do nothing
    );

    $r->start;
    my $t = AnyEvent->timer( after => 0.1, cb => sub {
        ok !$r->has_timer, 'no timer running';
        undef $r;
    } );

    throws_ok {
        $cv->recv;
    } qr/DEMOLISH/,
        'we destroyed $r and the failure callback was called with DEMOLISH';
}

{
    my $cv = AnyEvent->condvar;
    my $r = AnyEvent::Retry->new(
        on_failure => sub { $cv->croak($_[1]) },
        on_success => sub { $cv->send($_[0])  },

t/retry-undef.t  view on Meta::CPAN

        interval   => { Constant => { interval => 9999 } },
        try        => sub { $_[0]->(0) }, # always unsuccessful
    );

    $r->start;
    my $t = AnyEvent->timer( after => 0.1, cb => sub {
        ok $r->has_timer, 'timer is running';
        undef $r;
    } );

    throws_ok {
        $cv->recv;
    } qr/DEMOLISH/,
        'we get the DEMOLISH message even when the timer is running';
}

done_testing;



( run in 0.264 second using v1.01-cache-2.11-cpan-496ff517765 )