-
Notifications
You must be signed in to change notification settings - Fork 2
/
serialize.t
103 lines (76 loc) · 2.53 KB
/
serialize.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
use t::Utils;
use Test::More;
use DBI;
use Jonk;
use Storable ();
my $dbh = t::Utils->setup;
subtest '(de)serializer set each functions' => sub {
my $serialized_arg;
my $jonk = Jonk->new($dbh, {
functions => [
'MyWorker' => {
serializer => sub {$serialized_arg = Storable::nfreeze($_[0])},
deserializer => sub {Storable::thaw($_[0])}
}
]
});
subtest 'job completed' => sub {
my $job_id = $jonk->insert('MyWorker', {chars => 'bar'});
ok $job_id;
my $job = $jonk->lookup_job($job_id);
is $job->id, $job_id;
is_deeply $job->arg, {chars => 'bar'};
is $job->raw_arg, $serialized_arg;
$job->completed;
ok not $jonk->errstr;
};
subtest 'job failed and retry' => sub {
my $job_id = $jonk->insert('MyWorker', {chars => 'bar'});
ok $job_id;
my $job = $jonk->lookup_job($job_id);
is $job->id, $job_id;
is_deeply $job->arg, {chars => 'bar'};
is $job->raw_arg, $serialized_arg;
$job->failed({retry_delay => 0});
$job = $jonk->lookup_job($job_id);
is $job->id, $job_id;
is_deeply $job->arg, {chars => 'bar'};
is $job->raw_arg, $serialized_arg;
$job->completed;
ok not $jonk->errstr;
};
};
subtest '(de)serializer set global' => sub {
my $serialized_arg;
my $jonk = Jonk->new($dbh, {
functions => [qw/MyWorker/],
default_serializer => sub {$serialized_arg = Storable::nfreeze($_[0])},
default_deserializer => sub {Storable::thaw($_[0])},
});
subtest 'job completed' => sub {
my $job_id = $jonk->insert('MyWorker', {chars => 'bar'});
ok $job_id;
my $job = $jonk->lookup_job($job_id);
is $job->id, $job_id;
is_deeply $job->arg, {chars => 'bar'};
is $job->raw_arg, $serialized_arg;
$job->completed;
ok not $jonk->errstr;
};
subtest 'job failed and retry' => sub {
my $job_id = $jonk->insert('MyWorker', {chars => 'bar'});
ok $job_id;
my $job = $jonk->lookup_job($job_id);
is $job->id, $job_id;
is_deeply $job->arg, {chars => 'bar'};
is $job->raw_arg, $serialized_arg;
$job->failed({retry_delay => 0});
$job = $jonk->lookup_job($job_id);
is $job->id, $job_id;
is_deeply $job->arg, {chars => 'bar'};
is $job->raw_arg, $serialized_arg;
$job->completed;
ok not $jonk->errstr;
};
};
done_testing;