The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/perl

use strict;
use FindBin qw($Bin);
use Test::More;

$ENV{PERL5LIB} .= ":$Bin/../../Gearman/lib";
use lib "$Bin/../../Gearman/lib";
use lib "$Bin/../../../../server/lib";

use Gearman::Server;
use Gearman::Client::Async;

my $server = Gearman::Server->new();
$server->start_worker('t/worker.pl');

my $client = Gearman::Client::Async->new(job_servers => [ $server ]);

my $good = 0;
my $status;

plan tests => 2;

Danga::Socket->AddTimer(0, sub {
    $client->add_task( Gearman::Task->new( "sleep_for" => \ "2", {
        on_complete => sub {
            my $res = shift;
            $good++;
        },
        on_status => sub {
            $status .= '2';
        },
        on_retry => sub {
            print "RETRY: [@_]\n";
        },
        on_fail => sub {
            print "FAIL: [@_]\n";
        },
        retry_count => 5,
    } ) );

    $client->add_task( Gearman::Task->new( "sleep_for" => \ "1", {
        on_complete => sub {
            my $res = shift;
            $good++;
        },
        on_status => sub {
            $status .= '1';
        },
        on_retry => sub {
            print "RETRY: [@_]\n";
        },
        on_fail => sub {
            fail(join "/", @_);
            print "FAIL: [@_]\n";
        },
        retry_count => 5,
    } ) );
});

Danga::Socket->AddTimer(4.0, sub {
     die "Timeout, test fails";
});

Danga::Socket->SetPostLoopCallback(sub {
    if ($good >= 2) {
        pass("Got both responses");
        return 0;
    }
    return 1;
});

Danga::Socket->EventLoop();

is(length $status, 14, "12 status messages");

# vim: filetype=perl