resque-loner 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/.rubocop.yml +92 -0
- data/.simplecov +1 -0
- data/.travis.yml +12 -0
- data/CHANGELOG.markdown +11 -0
- data/Gemfile +4 -5
- data/README.markdown +4 -1
- data/Rakefile +13 -41
- data/lib/resque-ext/job.rb +9 -9
- data/lib/resque-ext/resque.rb +4 -9
- data/lib/resque-loner.rb +2 -1
- data/lib/resque-loner/helpers.rb +22 -9
- data/lib/resque-loner/legacy_helpers.rb +91 -0
- data/lib/resque-loner/unique_job.rb +23 -14
- data/lib/resque-loner/version.rb +1 -1
- data/resque-loner.gemspec +41 -32
- data/spec/loner_spec.rb +73 -51
- data/spec/spec_helper.rb +19 -3
- data/spec/support/redis_instance.rb +133 -0
- data/test/airbrake_test.rb +27 -0
- data/test/dump.rdb +0 -0
- data/test/job_hooks_test.rb +191 -52
- data/test/job_plugins_test.rb +33 -31
- data/test/plugin_test.rb +38 -26
- data/{spec/redis-test.conf → test/redis-test-cluster.conf} +4 -4
- data/test/resque-web_test.rb +23 -17
- data/test/resque_failure_redis_test.rb +23 -0
- data/test/resque_test.rb +56 -37
- data/test/test_helper.rb +58 -29
- data/test/worker_test.rb +311 -55
- metadata +157 -58
- data/init.rb +0 -1
- data/rails/init.rb +0 -1
- data/test/hoptoad_test.rb +0 -25
data/test/job_plugins_test.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
context
|
3
|
+
context 'Multiple plugins with multiple hooks' do
|
4
4
|
include PerformJob
|
5
5
|
|
6
6
|
module Plugin1
|
7
7
|
def before_perform_record_history1(history)
|
8
8
|
history << :before1
|
9
9
|
end
|
10
|
+
|
10
11
|
def after_perform_record_history1(history)
|
11
12
|
history << :after1
|
12
13
|
end
|
@@ -16,6 +17,7 @@ context "Multiple plugins with multiple hooks" do
|
|
16
17
|
def before_perform_record_history2(history)
|
17
18
|
history << :before2
|
18
19
|
end
|
20
|
+
|
19
21
|
def after_perform_record_history2(history)
|
20
22
|
history << :after2
|
21
23
|
end
|
@@ -29,14 +31,14 @@ context "Multiple plugins with multiple hooks" do
|
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
32
|
-
test
|
33
|
-
result = perform_job(ManyBeforesJob, history=[])
|
34
|
-
assert_equal true, result,
|
34
|
+
test 'hooks of each type are executed in alphabetical order' do
|
35
|
+
result = perform_job(ManyBeforesJob, history = [])
|
36
|
+
assert_equal true, result, 'perform returned true'
|
35
37
|
assert_equal [:before1, :before2, :perform, :after1, :after2], history
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
39
|
-
context
|
41
|
+
context 'Resque::Plugin ordering before_perform' do
|
40
42
|
include PerformJob
|
41
43
|
|
42
44
|
module BeforePerformPlugin
|
@@ -55,14 +57,14 @@ context "Resque::Plugin ordering before_perform" do
|
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
58
|
-
test
|
59
|
-
result = perform_job(JobPluginsTestBeforePerformJob, history=[])
|
60
|
-
assert_equal true, result,
|
60
|
+
test 'before_perform hooks are executed in order' do
|
61
|
+
result = perform_job(JobPluginsTestBeforePerformJob, history = [])
|
62
|
+
assert_equal true, result, 'perform returned true'
|
61
63
|
assert_equal [:before_perform, :before_perform1, :perform], history
|
62
64
|
end
|
63
65
|
end
|
64
66
|
|
65
|
-
context
|
67
|
+
context 'Resque::Plugin ordering after_perform' do
|
66
68
|
include PerformJob
|
67
69
|
|
68
70
|
module AfterPerformPlugin
|
@@ -81,14 +83,14 @@ context "Resque::Plugin ordering after_perform" do
|
|
81
83
|
end
|
82
84
|
end
|
83
85
|
|
84
|
-
test
|
85
|
-
result = perform_job(JobPluginsTestAfterPerformJob, history=[])
|
86
|
-
assert_equal true, result,
|
86
|
+
test 'after_perform hooks are executed in order' do
|
87
|
+
result = perform_job(JobPluginsTestAfterPerformJob, history = [])
|
88
|
+
assert_equal true, result, 'perform returned true'
|
87
89
|
assert_equal [:perform, :after_perform, :after_perform1], history
|
88
90
|
end
|
89
91
|
end
|
90
92
|
|
91
|
-
context
|
93
|
+
context 'Resque::Plugin ordering around_perform' do
|
92
94
|
include PerformJob
|
93
95
|
|
94
96
|
module AroundPerformPlugin1
|
@@ -105,9 +107,9 @@ context "Resque::Plugin ordering around_perform" do
|
|
105
107
|
end
|
106
108
|
end
|
107
109
|
|
108
|
-
test
|
109
|
-
result = perform_job(AroundPerformJustPerformsJob, history=[])
|
110
|
-
assert_equal true, result,
|
110
|
+
test 'around_perform hooks are executed before the job' do
|
111
|
+
result = perform_job(AroundPerformJustPerformsJob, history = [])
|
112
|
+
assert_equal true, result, 'perform returned true'
|
111
113
|
assert_equal [:around_perform_plugin1, :perform], history
|
112
114
|
end
|
113
115
|
|
@@ -122,9 +124,9 @@ context "Resque::Plugin ordering around_perform" do
|
|
122
124
|
end
|
123
125
|
end
|
124
126
|
|
125
|
-
test
|
126
|
-
result = perform_job(JobPluginsTestAroundPerformJob, history=[])
|
127
|
-
assert_equal true, result,
|
127
|
+
test 'around_perform hooks are executed in order' do
|
128
|
+
result = perform_job(JobPluginsTestAroundPerformJob, history = [])
|
129
|
+
assert_equal true, result, 'perform returned true'
|
128
130
|
assert_equal [:around_perform, :around_perform_plugin1, :perform], history
|
129
131
|
end
|
130
132
|
|
@@ -147,9 +149,9 @@ context "Resque::Plugin ordering around_perform" do
|
|
147
149
|
end
|
148
150
|
end
|
149
151
|
|
150
|
-
test
|
151
|
-
result = perform_job(AroundPerformJob2, history=[])
|
152
|
-
assert_equal true, result,
|
152
|
+
test 'many around_perform are executed in order' do
|
153
|
+
result = perform_job(AroundPerformJob2, history = [])
|
154
|
+
assert_equal true, result, 'perform returned true'
|
153
155
|
assert_equal [:around_perform, :around_perform_plugin1, :around_perform_plugin2, :perform], history
|
154
156
|
end
|
155
157
|
|
@@ -172,9 +174,9 @@ context "Resque::Plugin ordering around_perform" do
|
|
172
174
|
end
|
173
175
|
end
|
174
176
|
|
175
|
-
test
|
176
|
-
result = perform_job(AroundPerformJob3, history=[])
|
177
|
-
assert_equal false, result,
|
177
|
+
test 'the job is aborted if an around_perform hook does not yield' do
|
178
|
+
result = perform_job(AroundPerformJob3, history = [])
|
179
|
+
assert_equal false, result, 'perform returned false'
|
178
180
|
assert_equal [:around_perform, :around_perform0], history
|
179
181
|
end
|
180
182
|
|
@@ -193,14 +195,14 @@ context "Resque::Plugin ordering around_perform" do
|
|
193
195
|
extend AroundPerformGetsJobResult
|
194
196
|
end
|
195
197
|
|
196
|
-
test
|
198
|
+
test 'the job is aborted if an around_perform hook does not yield' do
|
197
199
|
result = perform_job(AroundPerformJobWithReturnValue, 'Bob')
|
198
|
-
assert_equal true, result,
|
200
|
+
assert_equal true, result, 'perform returned true'
|
199
201
|
assert_equal 'Good job, Bob', AroundPerformJobWithReturnValue.last_job_result
|
200
202
|
end
|
201
203
|
end
|
202
204
|
|
203
|
-
context
|
205
|
+
context 'Resque::Plugin ordering on_failure' do
|
204
206
|
include PerformJob
|
205
207
|
|
206
208
|
module OnFailurePlugin
|
@@ -213,18 +215,18 @@ context "Resque::Plugin ordering on_failure" do
|
|
213
215
|
extend OnFailurePlugin
|
214
216
|
def self.perform(history)
|
215
217
|
history << :perform
|
216
|
-
|
218
|
+
fail StandardError, 'oh no'
|
217
219
|
end
|
218
220
|
def self.on_failure(exception, history)
|
219
221
|
history << exception.message
|
220
222
|
end
|
221
223
|
end
|
222
224
|
|
223
|
-
test
|
225
|
+
test 'on_failure hooks are executed in order' do
|
224
226
|
history = []
|
225
227
|
assert_raises StandardError do
|
226
228
|
perform_job(FailureJob, history)
|
227
229
|
end
|
228
|
-
assert_equal [:perform,
|
230
|
+
assert_equal [:perform, 'oh no', 'oh no plugin'], history
|
229
231
|
end
|
230
232
|
end
|
data/test/plugin_test.rb
CHANGED
@@ -1,41 +1,53 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
context
|
3
|
+
context 'Resque::Plugin finding hooks' do
|
4
4
|
module SimplePlugin
|
5
5
|
extend self
|
6
6
|
def before_perform1; end
|
7
|
+
|
7
8
|
def before_perform; end
|
9
|
+
|
8
10
|
def before_perform2; end
|
11
|
+
|
9
12
|
def after_perform1; end
|
13
|
+
|
10
14
|
def after_perform; end
|
15
|
+
|
11
16
|
def after_perform2; end
|
17
|
+
|
12
18
|
def perform; end
|
19
|
+
|
13
20
|
def around_perform1; end
|
21
|
+
|
14
22
|
def around_perform; end
|
23
|
+
|
15
24
|
def around_perform2; end
|
25
|
+
|
16
26
|
def on_failure1; end
|
27
|
+
|
17
28
|
def on_failure; end
|
29
|
+
|
18
30
|
def on_failure2; end
|
19
31
|
end
|
20
32
|
|
21
|
-
test
|
22
|
-
assert_equal
|
33
|
+
test 'before_perform hooks are found and sorted' do
|
34
|
+
assert_equal %w(before_perform before_perform1 before_perform2), Resque::Plugin.before_hooks(SimplePlugin).map { |m| m.to_s }
|
23
35
|
end
|
24
36
|
|
25
|
-
test
|
26
|
-
assert_equal
|
37
|
+
test 'after_perform hooks are found and sorted' do
|
38
|
+
assert_equal %w(after_perform after_perform1 after_perform2), Resque::Plugin.after_hooks(SimplePlugin).map { |m| m.to_s }
|
27
39
|
end
|
28
40
|
|
29
|
-
test
|
30
|
-
assert_equal
|
41
|
+
test 'around_perform hooks are found and sorted' do
|
42
|
+
assert_equal %w(around_perform around_perform1 around_perform2), Resque::Plugin.around_hooks(SimplePlugin).map { |m| m.to_s }
|
31
43
|
end
|
32
44
|
|
33
|
-
test
|
34
|
-
assert_equal
|
45
|
+
test 'on_failure hooks are found and sorted' do
|
46
|
+
assert_equal %w(on_failure on_failure1 on_failure2), Resque::Plugin.failure_hooks(SimplePlugin).map { |m| m.to_s }
|
35
47
|
end
|
36
48
|
end
|
37
49
|
|
38
|
-
context
|
50
|
+
context 'Resque::Plugin linting' do
|
39
51
|
module ::BadBefore
|
40
52
|
def self.before_perform; end
|
41
53
|
end
|
@@ -49,39 +61,39 @@ context "Resque::Plugin linting" do
|
|
49
61
|
def self.on_failure; end
|
50
62
|
end
|
51
63
|
|
52
|
-
test
|
64
|
+
test 'before_perform must be namespaced' do
|
53
65
|
begin
|
54
66
|
Resque::Plugin.lint(BadBefore)
|
55
|
-
assert false,
|
67
|
+
assert false, 'should have failed'
|
56
68
|
rescue Resque::Plugin::LintError => e
|
57
|
-
assert_equal
|
69
|
+
assert_equal 'BadBefore.before_perform is not namespaced', e.message
|
58
70
|
end
|
59
71
|
end
|
60
72
|
|
61
|
-
test
|
73
|
+
test 'after_perform must be namespaced' do
|
62
74
|
begin
|
63
75
|
Resque::Plugin.lint(BadAfter)
|
64
|
-
assert false,
|
76
|
+
assert false, 'should have failed'
|
65
77
|
rescue Resque::Plugin::LintError => e
|
66
|
-
assert_equal
|
78
|
+
assert_equal 'BadAfter.after_perform is not namespaced', e.message
|
67
79
|
end
|
68
80
|
end
|
69
81
|
|
70
|
-
test
|
82
|
+
test 'around_perform must be namespaced' do
|
71
83
|
begin
|
72
84
|
Resque::Plugin.lint(BadAround)
|
73
|
-
assert false,
|
85
|
+
assert false, 'should have failed'
|
74
86
|
rescue Resque::Plugin::LintError => e
|
75
|
-
assert_equal
|
87
|
+
assert_equal 'BadAround.around_perform is not namespaced', e.message
|
76
88
|
end
|
77
89
|
end
|
78
90
|
|
79
|
-
test
|
91
|
+
test 'on_failure must be namespaced' do
|
80
92
|
begin
|
81
93
|
Resque::Plugin.lint(BadFailure)
|
82
|
-
assert false,
|
94
|
+
assert false, 'should have failed'
|
83
95
|
rescue Resque::Plugin::LintError => e
|
84
|
-
assert_equal
|
96
|
+
assert_equal 'BadFailure.on_failure is not namespaced', e.message
|
85
97
|
end
|
86
98
|
end
|
87
99
|
|
@@ -98,19 +110,19 @@ context "Resque::Plugin linting" do
|
|
98
110
|
def self.on_failure1; end
|
99
111
|
end
|
100
112
|
|
101
|
-
test
|
113
|
+
test 'before_perform1 is an ok name' do
|
102
114
|
Resque::Plugin.lint(GoodBefore)
|
103
115
|
end
|
104
116
|
|
105
|
-
test
|
117
|
+
test 'after_perform1 is an ok name' do
|
106
118
|
Resque::Plugin.lint(GoodAfter)
|
107
119
|
end
|
108
120
|
|
109
|
-
test
|
121
|
+
test 'around_perform1 is an ok name' do
|
110
122
|
Resque::Plugin.lint(GoodAround)
|
111
123
|
end
|
112
124
|
|
113
|
-
test
|
125
|
+
test 'on_failure1 is an ok name' do
|
114
126
|
Resque::Plugin.lint(GoodFailure)
|
115
127
|
end
|
116
128
|
end
|
@@ -6,10 +6,10 @@ daemonize yes
|
|
6
6
|
|
7
7
|
# When run as a daemon, Redis write a pid file in /var/run/redis.pid by default.
|
8
8
|
# You can specify a custom pid file location here.
|
9
|
-
pidfile ./
|
9
|
+
pidfile ./test/redis-test-cluster.pid
|
10
10
|
|
11
11
|
# Accept connections on the specified port, default is 6379
|
12
|
-
port
|
12
|
+
port 9737
|
13
13
|
|
14
14
|
# If you want you can bind a single interface, if the bind option is not
|
15
15
|
# specified all the interfaces will listen for connections.
|
@@ -35,11 +35,11 @@ save 300 10
|
|
35
35
|
save 60 10000
|
36
36
|
|
37
37
|
# The filename where to dump the DB
|
38
|
-
dbfilename dump.rdb
|
38
|
+
dbfilename dump-cluster.rdb
|
39
39
|
|
40
40
|
# For default save/load DB in/from the working directory
|
41
41
|
# Note that you must specify a directory not a file name.
|
42
|
-
dir ./
|
42
|
+
dir ./test/
|
43
43
|
|
44
44
|
# Set server verbosity to 'debug'
|
45
45
|
# it can be one of:
|
data/test/resque-web_test.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
require 'resque/server/test_helper'
|
3
|
-
|
3
|
+
|
4
4
|
# Root path test
|
5
|
-
context
|
6
|
-
setup { get
|
5
|
+
context 'on GET to /' do
|
6
|
+
setup { get '/' }
|
7
7
|
|
8
|
-
test
|
8
|
+
test 'redirect to overview' do
|
9
9
|
follow_redirect!
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
# Global overview
|
14
|
-
context
|
15
|
-
setup { get
|
14
|
+
context 'on GET to /overview' do
|
15
|
+
setup { get '/overview' }
|
16
16
|
|
17
17
|
test "should at least display 'queues'" do
|
18
18
|
assert last_response.body.include?('Queues')
|
@@ -20,34 +20,40 @@ context "on GET to /overview" do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
# Working jobs
|
23
|
-
context
|
24
|
-
setup { get
|
23
|
+
context 'on GET to /working' do
|
24
|
+
setup { get '/working' }
|
25
25
|
|
26
26
|
should_respond_with_success
|
27
27
|
end
|
28
28
|
|
29
29
|
# Failed
|
30
|
-
context
|
31
|
-
setup { get
|
30
|
+
context 'on GET to /failed' do
|
31
|
+
setup { get '/failed' }
|
32
|
+
|
33
|
+
should_respond_with_success
|
34
|
+
end
|
35
|
+
|
36
|
+
# Stats
|
37
|
+
context 'on GET to /stats/resque' do
|
38
|
+
setup { get '/stats/resque' }
|
32
39
|
|
33
40
|
should_respond_with_success
|
34
41
|
end
|
35
42
|
|
36
|
-
|
37
|
-
|
38
|
-
setup { get "/stats/resque" }
|
43
|
+
context 'on GET to /stats/redis' do
|
44
|
+
setup { get '/stats/redis' }
|
39
45
|
|
40
46
|
should_respond_with_success
|
41
47
|
end
|
42
48
|
|
43
|
-
context
|
44
|
-
setup { get
|
49
|
+
context 'on GET to /stats/resque' do
|
50
|
+
setup { get '/stats/keys' }
|
45
51
|
|
46
52
|
should_respond_with_success
|
47
53
|
end
|
48
54
|
|
49
|
-
context
|
50
|
-
setup { get
|
55
|
+
context 'also works with slash at the end' do
|
56
|
+
setup { get '/working/' }
|
51
57
|
|
52
58
|
should_respond_with_success
|
53
59
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'resque/failure/redis'
|
3
|
+
|
4
|
+
context 'Resque::Failure::Redis' do
|
5
|
+
setup do
|
6
|
+
@bad_string = [39, 250, 141, 168, 138, 191, 52, 211, 159, 86, 93, 95, 39].map { |c| c.chr }.join
|
7
|
+
exception = StandardError.exception(@bad_string)
|
8
|
+
worker = Resque::Worker.new(:test)
|
9
|
+
queue = 'queue'
|
10
|
+
payload = { 'class' => Object, 'args' => 3 }
|
11
|
+
@redis_backend = Resque::Failure::Redis.new(exception, worker, queue, payload)
|
12
|
+
end
|
13
|
+
|
14
|
+
test 'cleans up bad strings before saving the failure, in order to prevent errors on the resque UI' do
|
15
|
+
# test assumption: the bad string should not be able to round trip though JSON
|
16
|
+
assert_raises(MultiJson::DecodeError) do
|
17
|
+
MultiJson.decode(MultiJson.encode(@bad_string))
|
18
|
+
end
|
19
|
+
|
20
|
+
@redis_backend.save
|
21
|
+
Resque::Failure::Redis.all # should not raise an error
|
22
|
+
end
|
23
|
+
end
|
data/test/resque_test.rb
CHANGED
@@ -1,36 +1,41 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
context
|
3
|
+
context 'Resque' do
|
4
4
|
setup do
|
5
5
|
Resque.redis.flushall
|
6
6
|
|
7
|
-
Resque.push(:people,
|
8
|
-
Resque.push(:people,
|
9
|
-
Resque.push(:people,
|
7
|
+
Resque.push(:people, 'name' => 'chris')
|
8
|
+
Resque.push(:people, 'name' => 'bob')
|
9
|
+
Resque.push(:people, 'name' => 'mark')
|
10
|
+
@original_redis = Resque.redis
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
+
teardown do
|
14
|
+
Resque.redis = @original_redis
|
15
|
+
end
|
16
|
+
|
17
|
+
test 'can set a namespace through a url-like string' do
|
13
18
|
assert Resque.redis
|
14
19
|
assert_equal :resque, Resque.redis.namespace
|
15
20
|
Resque.redis = 'localhost:9736/namespace'
|
16
21
|
assert_equal 'namespace', Resque.redis.namespace
|
17
22
|
end
|
18
23
|
|
19
|
-
test
|
20
|
-
new_redis = Redis.new(:
|
21
|
-
new_namespace = Redis::Namespace.new(
|
24
|
+
test 'redis= works correctly with a Redis::Namespace param' do
|
25
|
+
new_redis = Redis.new(host: 'localhost', port: 9736)
|
26
|
+
new_namespace = Redis::Namespace.new('namespace', redis: new_redis)
|
22
27
|
Resque.redis = new_namespace
|
23
28
|
assert_equal new_namespace, Resque.redis
|
24
29
|
|
25
30
|
Resque.redis = 'localhost:9736/namespace'
|
26
31
|
end
|
27
32
|
|
28
|
-
test
|
33
|
+
test 'can put jobs on a queue' do
|
29
34
|
assert Resque::Job.create(:jobs, 'SomeJob', 20, '/tmp')
|
30
35
|
assert Resque::Job.create(:jobs, 'SomeJob', 20, '/tmp')
|
31
36
|
end
|
32
37
|
|
33
|
-
test
|
38
|
+
test 'can grab jobs off a queue' do
|
34
39
|
Resque::Job.create(:jobs, 'some-job', 20, '/tmp')
|
35
40
|
|
36
41
|
job = Resque.reserve(:jobs)
|
@@ -41,7 +46,7 @@ context "Resque" do
|
|
41
46
|
assert_equal '/tmp', job.args[1]
|
42
47
|
end
|
43
48
|
|
44
|
-
test
|
49
|
+
test 'can re-queue jobs' do
|
45
50
|
Resque::Job.create(:jobs, 'some-job', 20, '/tmp')
|
46
51
|
|
47
52
|
job = Resque.reserve(:jobs)
|
@@ -50,7 +55,7 @@ context "Resque" do
|
|
50
55
|
assert_equal job, Resque.reserve(:jobs)
|
51
56
|
end
|
52
57
|
|
53
|
-
test
|
58
|
+
test 'can put jobs on a queue by way of an ivar' do
|
54
59
|
assert_equal 0, Resque.size(:ivar)
|
55
60
|
assert Resque.enqueue(SomeIvarJob, 20, '/tmp')
|
56
61
|
assert Resque.enqueue(SomeIvarJob, 20, '/tmp')
|
@@ -66,7 +71,7 @@ context "Resque" do
|
|
66
71
|
assert_equal nil, Resque.reserve(:ivar)
|
67
72
|
end
|
68
73
|
|
69
|
-
test
|
74
|
+
test 'can remove jobs from a queue by way of an ivar' do
|
70
75
|
assert_equal 0, Resque.size(:ivar)
|
71
76
|
assert Resque.enqueue(SomeIvarJob, 20, '/tmp')
|
72
77
|
assert Resque.enqueue(SomeIvarJob, 30, '/tmp')
|
@@ -81,13 +86,13 @@ context "Resque" do
|
|
81
86
|
assert_equal 1, Resque.size(:ivar)
|
82
87
|
end
|
83
88
|
|
84
|
-
test
|
89
|
+
test 'jobs have a nice #inspect' do
|
85
90
|
assert Resque::Job.create(:jobs, 'SomeJob', 20, '/tmp')
|
86
91
|
job = Resque.reserve(:jobs)
|
87
92
|
assert_equal '(Job{jobs} | SomeJob | [20, "/tmp"])', job.inspect
|
88
93
|
end
|
89
94
|
|
90
|
-
test
|
95
|
+
test 'jobs can be destroyed' do
|
91
96
|
assert Resque::Job.create(:jobs, 'SomeJob', 20, '/tmp')
|
92
97
|
assert Resque::Job.create(:jobs, 'BadJob', 20, '/tmp')
|
93
98
|
assert Resque::Job.create(:jobs, 'SomeJob', 20, '/tmp')
|
@@ -101,7 +106,7 @@ context "Resque" do
|
|
101
106
|
assert_equal 2, Resque.size(:jobs)
|
102
107
|
end
|
103
108
|
|
104
|
-
test
|
109
|
+
test 'jobs can test for equality' do
|
105
110
|
assert Resque::Job.create(:jobs, 'SomeJob', 20, '/tmp')
|
106
111
|
assert Resque::Job.create(:jobs, 'some-job', 20, '/tmp')
|
107
112
|
assert_equal Resque.reserve(:jobs), Resque.reserve(:jobs)
|
@@ -115,7 +120,7 @@ context "Resque" do
|
|
115
120
|
assert_not_equal Resque.reserve(:jobs), Resque.reserve(:jobs)
|
116
121
|
end
|
117
122
|
|
118
|
-
test
|
123
|
+
test 'can put jobs on a queue by way of a method' do
|
119
124
|
assert_equal 0, Resque.size(:method)
|
120
125
|
assert Resque.enqueue(SomeMethodJob, 20, '/tmp')
|
121
126
|
assert Resque.enqueue(SomeMethodJob, 20, '/tmp')
|
@@ -131,30 +136,40 @@ context "Resque" do
|
|
131
136
|
assert_equal nil, Resque.reserve(:method)
|
132
137
|
end
|
133
138
|
|
134
|
-
test
|
139
|
+
test 'can define a queue for jobs by way of a method' do
|
140
|
+
assert_equal 0, Resque.size(:method)
|
141
|
+
assert Resque.enqueue_to(:new_queue, SomeMethodJob, 20, '/tmp')
|
142
|
+
|
143
|
+
job = Resque.reserve(:new_queue)
|
144
|
+
assert_equal SomeMethodJob, job.payload_class
|
145
|
+
assert_equal 20, job.args[0]
|
146
|
+
assert_equal '/tmp', job.args[1]
|
147
|
+
end
|
148
|
+
|
149
|
+
test 'needs to infer a queue with enqueue' do
|
135
150
|
assert_raises Resque::NoQueueError do
|
136
151
|
Resque.enqueue(SomeJob, 20, '/tmp')
|
137
152
|
end
|
138
153
|
end
|
139
154
|
|
140
|
-
test
|
155
|
+
test 'validates job for queue presence' do
|
141
156
|
assert_raises Resque::NoQueueError do
|
142
157
|
Resque.validate(SomeJob)
|
143
158
|
end
|
144
159
|
end
|
145
160
|
|
146
|
-
test
|
147
|
-
assert Resque.push(:people,
|
161
|
+
test 'can put items on a queue' do
|
162
|
+
assert Resque.push(:people, 'name' => 'jon')
|
148
163
|
end
|
149
164
|
|
150
|
-
test
|
165
|
+
test 'can pull items off a queue' do
|
151
166
|
assert_equal({ 'name' => 'chris' }, Resque.pop(:people))
|
152
167
|
assert_equal({ 'name' => 'bob' }, Resque.pop(:people))
|
153
168
|
assert_equal({ 'name' => 'mark' }, Resque.pop(:people))
|
154
169
|
assert_equal nil, Resque.pop(:people)
|
155
170
|
end
|
156
171
|
|
157
|
-
test
|
172
|
+
test 'knows how big a queue is' do
|
158
173
|
assert_equal 3, Resque.size(:people)
|
159
174
|
|
160
175
|
assert_equal({ 'name' => 'chris' }, Resque.pop(:people))
|
@@ -165,12 +180,12 @@ context "Resque" do
|
|
165
180
|
assert_equal 0, Resque.size(:people)
|
166
181
|
end
|
167
182
|
|
168
|
-
test
|
183
|
+
test 'can peek at a queue' do
|
169
184
|
assert_equal({ 'name' => 'chris' }, Resque.peek(:people))
|
170
185
|
assert_equal 3, Resque.size(:people)
|
171
186
|
end
|
172
187
|
|
173
|
-
test
|
188
|
+
test 'can peek multiple items on a queue' do
|
174
189
|
assert_equal({ 'name' => 'bob' }, Resque.peek(:people, 1, 1))
|
175
190
|
|
176
191
|
assert_equal([{ 'name' => 'bob' }, { 'name' => 'mark' }], Resque.peek(:people, 1, 2))
|
@@ -181,36 +196,36 @@ context "Resque" do
|
|
181
196
|
assert_equal [], Resque.peek(:people, 3, 2)
|
182
197
|
end
|
183
198
|
|
184
|
-
test
|
199
|
+
test 'knows what queues it is managing' do
|
185
200
|
assert_equal %w( people ), Resque.queues
|
186
|
-
Resque.push(:cars,
|
201
|
+
Resque.push(:cars, 'make' => 'bmw')
|
187
202
|
assert_equal %w( cars people ), Resque.queues
|
188
203
|
end
|
189
204
|
|
190
|
-
test
|
205
|
+
test 'queues are always a list' do
|
191
206
|
Resque.redis.flushall
|
192
207
|
assert_equal [], Resque.queues
|
193
208
|
end
|
194
209
|
|
195
|
-
test
|
196
|
-
Resque.push(:cars,
|
210
|
+
test 'can delete a queue' do
|
211
|
+
Resque.push(:cars, 'make' => 'bmw')
|
197
212
|
assert_equal %w( cars people ), Resque.queues
|
198
213
|
Resque.remove_queue(:people)
|
199
214
|
assert_equal %w( cars ), Resque.queues
|
200
215
|
assert_equal nil, Resque.pop(:people)
|
201
216
|
end
|
202
217
|
|
203
|
-
test
|
204
|
-
assert_equal [
|
218
|
+
test 'keeps track of resque keys' do
|
219
|
+
assert_equal ['queue:people', 'queues'].sort, Resque.keys.sort
|
205
220
|
end
|
206
221
|
|
207
|
-
test
|
222
|
+
test 'badly wants a class name, too' do
|
208
223
|
assert_raises Resque::NoClassError do
|
209
224
|
Resque::Job.create(:jobs, nil)
|
210
225
|
end
|
211
226
|
end
|
212
227
|
|
213
|
-
test
|
228
|
+
test 'keeps stats' do
|
214
229
|
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
215
230
|
Resque::Job.create(:jobs, BadJob)
|
216
231
|
Resque::Job.create(:jobs, GoodJob)
|
@@ -238,16 +253,20 @@ context "Resque" do
|
|
238
253
|
assert_equal 3, stats[:queues]
|
239
254
|
assert_equal 3, stats[:processed]
|
240
255
|
assert_equal 1, stats[:failed]
|
241
|
-
|
256
|
+
if ENV.key? 'RESQUE_DISTRIBUTED'
|
257
|
+
assert_equal [Resque.redis.respond_to?(:server) ? 'localhost:9736, localhost:9737' : 'redis://localhost:9736/0, redis://localhost:9737/0'], stats[:servers]
|
258
|
+
else
|
259
|
+
assert_equal [Resque.redis.respond_to?(:server) ? 'localhost:9736' : 'redis://localhost:9736/0'], stats[:servers]
|
260
|
+
end
|
242
261
|
end
|
243
262
|
|
244
|
-
test
|
263
|
+
test 'decode bad json' do
|
245
264
|
assert_raises Resque::Helpers::DecodeException do
|
246
265
|
Resque.decode("{\"error\":\"Module not found \\u002\"}")
|
247
266
|
end
|
248
267
|
end
|
249
268
|
|
250
|
-
test
|
269
|
+
test 'inlining jobs' do
|
251
270
|
begin
|
252
271
|
Resque.inline = true
|
253
272
|
Resque.enqueue(SomeIvarJob, 20, '/tmp')
|