worker_spec.rb
2.59 KB
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
require 'helper'
describe Delayed::Worker do
describe "backend=" do
before do
@clazz = Class.new
Delayed::Worker.backend = @clazz
end
after do
Delayed::Worker.backend = :test
end
it "sets the Delayed::Job constant to the backend" do
expect(Delayed::Job).to eq(@clazz)
end
it "sets backend with a symbol" do
Delayed::Worker.backend = :test
expect(Delayed::Worker.backend).to eq(Delayed::Backend::Test::Job)
end
end
describe "job_say" do
before do
@worker = Delayed::Worker.new
@job = double('job', :id => 123, :name => 'ExampleJob')
end
it "logs with job name and id" do
@worker.should_receive(:say).
with('Job ExampleJob (id=123) message', Delayed::Worker::DEFAULT_LOG_LEVEL)
@worker.job_say(@job, 'message')
end
end
context "worker read-ahead" do
before do
@read_ahead = Delayed::Worker.read_ahead
end
after do
Delayed::Worker.read_ahead = @read_ahead
end
it "reads five jobs" do
Delayed::Job.should_receive(:find_available).with(anything, 5, anything).and_return([])
Delayed::Job.reserve(Delayed::Worker.new)
end
it "reads a configurable number of jobs" do
Delayed::Worker.read_ahead = 15
Delayed::Job.should_receive(:find_available).with(anything, Delayed::Worker.read_ahead, anything).and_return([])
Delayed::Job.reserve(Delayed::Worker.new)
end
end
context "worker exit on complete" do
before do
Delayed::Worker.exit_on_complete = true
end
after do
Delayed::Worker.exit_on_complete = false
end
it "exits the loop when no jobs are available" do
worker = Delayed::Worker.new
Timeout::timeout(2) do
worker.start
end
end
end
context "worker job reservation" do
before do
Delayed::Worker.exit_on_complete = true
end
after do
Delayed::Worker.exit_on_complete = false
end
it "handles error during job reservation" do
Delayed::Job.should_receive(:reserve).and_raise(Exception)
Delayed::Worker.new.work_off
end
it "gives up after 10 backend failures" do
Delayed::Job.stub(:reserve).and_raise(Exception)
worker = Delayed::Worker.new
9.times { worker.work_off }
expect(lambda { worker.work_off }).to raise_exception
end
it "allows the backend to attempt recovery from reservation errors" do
Delayed::Job.should_receive(:reserve).and_raise(Exception)
Delayed::Job.should_receive(:recover_from).with(instance_of(Exception))
Delayed::Worker.new.work_off
end
end
end