# -*-perl-*-
use strict;
use warnings;
require 't/lib/db-common.pl';
use TheSchwartz;
use Test::More tests => 14 * 3;
run_tests(
14,
sub {
my $client = test_client( dbs => ['ts1'] );
my @keys = qw(foo bar baz);
my $n = 0;
for ( 1 .. 10 ) {
my $key = $keys[ $n++ % 3 ];
my $job = TheSchwartz::Job->new(
funcname => 'Worker::CoalesceTest',
arg => { key => $key, num => $_ },
coalesce => $key
);
my $h = $client->insert($job);
ok( $h, "inserted $h ($_ = $key)" );
}
$client->reset_abilities;
$client->can_do("Worker::CoalesceTest");
Worker::CoalesceTest->set_client($client);
for ( 1 .. 3 ) {
my $rv = eval { $client->work_once; };
ok( $rv, "did stuff" );
}
my $rv = eval { $client->work_once; };
ok( !$rv, "nothing to do now" );
teardown_dbs('ts1');
}
);
############################################################################
package Worker::CoalesceTest;
use base 'TheSchwartz::Worker';
my $client;
sub set_client { $client = $_[1]; }
sub work {
my ( $class, $job ) = @_;
my $args = $job->arg;
my $key = $args->{key};
$job->completed;
if ( $key eq "foo" ) {
while (
my $job = $client->find_job_with_coalescing_prefix(
"Worker::CoalesceTest", "f"
)
)
{
$job->completed;
}
}
else {
while (
my $job = $client->find_job_with_coalescing_value(
"Worker::CoalesceTest", $key
)
)
{
$job->completed;
}
}
}
sub keep_exit_status_for {
20
} # keep exit status for 20 seconds after on_complete
sub grab_for {10}
sub max_retries {1}
sub retry_delay { my $class = shift; my $fails = shift; return 2**$fails; }