root/trunk/t/grab_and_work_on.t @ 164

Revision 164, 1.7 kB (checked in by miyagawa, 7 months ago)

PostgreSQL patch from clkao

Line 
1# -*-perl-*-
2
3use strict;
4use warnings;
5
6require 't/lib/db-common.pl';
7
8use TheSchwartz;
9use Test::More tests => 27;
10
11run_tests(9, sub {
12    my $client = test_client(dbs => ['ts1']);
13
14    my $available = TheSchwartz::Job->new(
15        funcname => 'Worker::Grabber',
16    );
17    my $grabbed_until = time + 2;
18    my $grabbed = TheSchwartz::Job->new(
19        funcname => 'Worker::Grabber',
20        grabbed_until => $grabbed_until,
21    );
22    my $available_handle = $client->insert($available);
23    my $grabbed_handle   = $client->insert($grabbed);
24
25    $client->reset_abilities;
26    $client->can_do("Worker::Grabber");
27
28    Worker::Grabber->set_client($client);
29
30    my $rv = $client->grab_and_work_on($grabbed_handle->as_string);
31    ok(!$rv, "we couldn't grab it");
32    is scalar $grabbed->failure_log, 0, "no errors";
33    $grabbed->refresh;
34    is $grabbed->grabbed_until, $grabbed_until, "Still grabbed";
35
36    $rv = $client->grab_and_work_on($available_handle->as_string);
37    is scalar $available->failure_log, 0, "no errors";
38    ok($rv, "we worked on it");
39   
40    $rv = $client->grab_and_work_on($available_handle->as_string);
41    is scalar $available->failure_log, 0, "no errors";
42    ok(!$rv, "There is nothing to do for it now.");
43   
44    teardown_dbs('ts1');
45});
46
47############################################################################
48package Worker::Grabber;
49use base 'TheSchwartz::Worker';
50use Test::More;
51
52my $client;
53sub set_client { $client = $_[1]; }
54
55sub work {
56    my ($class, $job) = @_;
57
58    ok(($job->grabbed_until > time), "this job is locked");
59
60    ## try to work on it
61    my $rv =  $client->grab_and_work_on($job->handle->as_string);
62    ok(!$rv, "We are already working on it, so we can't grab it");
63   
64    $job->completed;
65}
Note: See TracBrowser for help on using the browser.