# $Id$
# -*-perl-*-
use strict;
use warnings;
require 't/lib/db-common.pl';
use TheSchwartz;
use Test::More tests => 12;
run_tests(
4,
sub {
my $client = test_client( dbs => [ 'ts1', 'ts2' ] );
my $n_jobs = 60;
for ( 1 .. $n_jobs ) {
my $handle = $client->insert("Worker::Foo");
die unless $handle;
}
my $db1 = DBI->connect( dsn_for("ts1"), $ENV{TS_DB_USER},
$ENV{TS_DB_PASS} );
my $db2 = DBI->connect( dsn_for("ts2"), $ENV{TS_DB_USER},
$ENV{TS_DB_PASS} );
die unless $db1 && $db2;
my $jobs1 = $db1->selectrow_array("SELECT COUNT(*) FROM job");
my $jobs2 = $db2->selectrow_array("SELECT COUNT(*) FROM job");
is( $jobs1 + $jobs2, $n_jobs, "inserted all $n_jobs" );
ok( $jobs1 > $n_jobs / 4,
"at least a quarter of jobs went to db1 ($jobs1 / $n_jobs)" );
ok( $jobs2 > $n_jobs / 4,
"at least a quarter of jobs went to db1 ($jobs2 / $n_jobs)" );
my $do_jobs = int( $n_jobs / 2 );
$client->can_do("Worker::Foo");
for ( 1 .. $do_jobs ) {
$client->work_once
or die;
}
my $jobs1b = $db1->selectrow_array("SELECT COUNT(*) FROM job");
my $jobs2b = $db2->selectrow_array("SELECT COUNT(*) FROM job");
my $remain_jobs = $n_jobs - $do_jobs;
is( $jobs1b + $jobs2b, $remain_jobs, "expected jobs remain" );
# deltas: how much work gone done each
my $jobs1d = $jobs1 - $jobs1b;
my $jobs2d = $jobs2 - $jobs2b;
# difference in work done:
my $workdiff = abs( $jobs1d - $jobs2d );
teardown_dbs( 'ts1', 'ts2' );
}
);
sub max { $_[0] > $_[1] ? $_[0] : $_[1] }
package Worker::Foo;
use base 'TheSchwartz::Worker';
sub work {
my ( $class, $job ) = @_;
$job->completed;
}