iron_mq 4.0.3 → 4.0.5
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 +4 -4
- data/.gitignore +2 -0
- data/Gemfile.lock +23 -15
- data/README.md +20 -7
- data/iron_mq.gemspec +2 -2
- data/lib/iron_mq.rb +1 -0
- data/lib/iron_mq/alert.rb +53 -0
- data/lib/iron_mq/client.rb +2 -2
- data/lib/iron_mq/messages.rb +21 -1
- data/lib/iron_mq/queues.rb +85 -37
- data/lib/iron_mq/response.rb +26 -9
- data/lib/iron_mq/subscribers.rb +1 -1
- data/lib/iron_mq/version.rb +1 -2
- data/test/quick_run.rb +22 -39
- data/test/quick_run2.rb +114 -0
- data/test/test_alerts.rb +142 -0
- data/test/test_base.rb +13 -11
- data/test/test_beanstalkd.rb +1 -1
- data/test/test_iron_mq.rb +175 -141
- data/test/test_mq_worker_subscribers.rb +71 -0
- data/test/test_push_queues.rb +123 -3
- data/test/tmp.rb +14 -0
- metadata +29 -6
@@ -0,0 +1,71 @@
|
|
1
|
+
#
|
2
|
+
# This test requires a hello worker in your project, run next line to add one:
|
3
|
+
# iron_worker upload https://github.com/treeder/hello_worker/blob/master/hello.worker --config config.yml
|
4
|
+
#
|
5
|
+
|
6
|
+
require File.expand_path('test_base.rb', File.dirname(__FILE__))
|
7
|
+
require 'logger'
|
8
|
+
require 'iron_worker_ng'
|
9
|
+
|
10
|
+
|
11
|
+
class TestWorkerSubscribers < TestBase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def make_key(i, t, random=0)
|
18
|
+
key = "pushq-#{t}-#{i}-#{random}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_mq_worker_subscribers
|
22
|
+
|
23
|
+
publisher_name = "publisher"
|
24
|
+
receiver_name = "push_receiver"
|
25
|
+
code_name = "hello"
|
26
|
+
queue = @client.queue(publisher_name)
|
27
|
+
receiver_queue = @client.queue(receiver_name)
|
28
|
+
clear_queue(receiver_name)
|
29
|
+
|
30
|
+
# test for bad subscribers
|
31
|
+
puts "raising..."
|
32
|
+
assert_raise Rest::HttpError do
|
33
|
+
# can't subscribe to self
|
34
|
+
res = queue.update_queue(:subscribers => [{:url => "ironmq:///#{publisher_name}"}])
|
35
|
+
end
|
36
|
+
|
37
|
+
assert_raise Rest::HttpError do
|
38
|
+
# must have a token if sending to different project_id
|
39
|
+
res = queue.update_queue(:subscribers => [{:url => "ironmq://ABCDEFG@/somerandomqueue"}])
|
40
|
+
end
|
41
|
+
|
42
|
+
subscribers = []
|
43
|
+
subscribers << {:url => "ironmq:///#{receiver_name}"}
|
44
|
+
subscribers << {:url => "ironworker:///#{code_name}"}
|
45
|
+
|
46
|
+
res = queue.update_queue(:subscribers => subscribers)
|
47
|
+
|
48
|
+
LOG.debug queue.subscribers
|
49
|
+
assert_equal subscribers.size, queue.subscribers.size
|
50
|
+
|
51
|
+
body = "Hello IronMQ pusher!"
|
52
|
+
m = queue.post(body)
|
53
|
+
|
54
|
+
sleep 5
|
55
|
+
# now check that there's a message in the queue and that the worker got a job
|
56
|
+
receiver_queue.reload
|
57
|
+
assert_equal 1, receiver_queue.size
|
58
|
+
m2 = receiver_queue.get
|
59
|
+
assert_equal body, m2.body
|
60
|
+
m2.delete
|
61
|
+
|
62
|
+
|
63
|
+
wc = @config['iron']
|
64
|
+
wc[:host] = wc[:worker_host] if wc[:worker_host]
|
65
|
+
iron_worker = IronWorkerNG::Client.new(wc)
|
66
|
+
tasks = iron_worker.tasks.list(:code_name=>code_name, :from_time=>(Time.now - 30).to_i)
|
67
|
+
assert_equal 1, tasks.size
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
end
|
data/test/test_push_queues.rb
CHANGED
@@ -14,6 +14,7 @@ class TestPushQueues < TestBase
|
|
14
14
|
|
15
15
|
|
16
16
|
def test_queue_subscriptions
|
17
|
+
puts "test_queue_subscriptions"
|
17
18
|
types = ["multicast", "unicast"]
|
18
19
|
# to delete queues later (clear project)
|
19
20
|
queue_names = []
|
@@ -63,7 +64,7 @@ class TestPushQueues < TestBase
|
|
63
64
|
tries = MAX_TRIES
|
64
65
|
while tries > 0
|
65
66
|
tries -= 1
|
66
|
-
sleep
|
67
|
+
sleep 1
|
67
68
|
begin
|
68
69
|
url = "http://rest-test.iron.io/stored/#{key}"
|
69
70
|
LOG.info "checking url #{url}"
|
@@ -201,7 +202,8 @@ class TestPushQueues < TestBase
|
|
201
202
|
|
202
203
|
tries = MAX_TRIES
|
203
204
|
while tries > 0
|
204
|
-
|
205
|
+
puts 'sleeping for 5 to wait for retry'
|
206
|
+
sleep 5
|
205
207
|
tries -= 1
|
206
208
|
subscribers = queue.messages.get(m.id).subscribers
|
207
209
|
LOG.debug subscribers
|
@@ -217,6 +219,7 @@ class TestPushQueues < TestBase
|
|
217
219
|
do_retry = true
|
218
220
|
end
|
219
221
|
else
|
222
|
+
# this one should error a couple times, then be successful
|
220
223
|
LOG.info "retries_remaining: #{s["retries_remaining"]}"
|
221
224
|
if ["deleted", "error"].include? s["status"] || 200 == s["status_code"]
|
222
225
|
assert_equal 0, s["retries_remaining"]
|
@@ -237,6 +240,7 @@ class TestPushQueues < TestBase
|
|
237
240
|
|
238
241
|
|
239
242
|
def test_202
|
243
|
+
puts "test_202"
|
240
244
|
types = ["multicast"]
|
241
245
|
types.each do |t|
|
242
246
|
|
@@ -257,9 +261,13 @@ class TestPushQueues < TestBase
|
|
257
261
|
res = queue.update_queue(:subscribers => subscribers,
|
258
262
|
:push_type => t)
|
259
263
|
|
264
|
+
queue.reload
|
260
265
|
LOG.debug queue
|
266
|
+
queue = @client.queue(qname)
|
261
267
|
|
262
268
|
assert_equal num_subscribers, queue.subscribers.size
|
269
|
+
assert_equal t, queue.push_type
|
270
|
+
puts "queue.push_type: #{queue.push_type}"
|
263
271
|
# todo: assert subscriptions match
|
264
272
|
|
265
273
|
msg = "hello #{x}"
|
@@ -292,6 +300,7 @@ class TestPushQueues < TestBase
|
|
292
300
|
subscribers = queue.messages.get(m.id).subscribers
|
293
301
|
LOG.debug subscribers
|
294
302
|
assert_equal num_subscribers, subscribers.size
|
303
|
+
assert_equal t, queue.push_type
|
295
304
|
|
296
305
|
do_retry = false
|
297
306
|
subscribers.each do |s|
|
@@ -342,7 +351,6 @@ class TestPushQueues < TestBase
|
|
342
351
|
end
|
343
352
|
end
|
344
353
|
|
345
|
-
|
346
354
|
def test_post_and_instantiate
|
347
355
|
queue = @client.queue('push_and_instantiate')
|
348
356
|
|
@@ -376,4 +384,116 @@ class TestPushQueues < TestBase
|
|
376
384
|
assert_equal 200, resp.code, "API must response with HTTP 200 status, but returned HTTP #{resp.code}"
|
377
385
|
end
|
378
386
|
|
387
|
+
|
388
|
+
# tests when converting a push queue back to a pull queue
|
389
|
+
def test_converting_types
|
390
|
+
queue = @client.queue('converting_queue')
|
391
|
+
subscribers = [{:url => "http://rest-test.iron.io/code/200"},
|
392
|
+
{:url => "http://rest-test.iron.io/code/200"}]
|
393
|
+
|
394
|
+
res = queue.update_queue(:subscribers => subscribers,
|
395
|
+
:push_type => 'multicast')
|
396
|
+
queue.reload
|
397
|
+
|
398
|
+
assert_equal "multicast", queue.push_type
|
399
|
+
|
400
|
+
p queue.update_queue(:push_type => 'pull')
|
401
|
+
|
402
|
+
queue.reload
|
403
|
+
|
404
|
+
p queue.push_type
|
405
|
+
|
406
|
+
assert_nil queue.push_type
|
407
|
+
|
408
|
+
end
|
409
|
+
|
410
|
+
def test_error_queues
|
411
|
+
@rest = Rest::Client.new
|
412
|
+
qname = "badrobot"
|
413
|
+
error_queue_name = "#{qname}--errors"
|
414
|
+
clear_queue(qname)
|
415
|
+
clear_queue(error_queue_name)
|
416
|
+
|
417
|
+
x = rand(1000)
|
418
|
+
|
419
|
+
subscribers = []
|
420
|
+
subscribers << {:url => "http://rest-test.iron.io/code/503"}
|
421
|
+
subscriber_urls = subscribers
|
422
|
+
num_subscribers = subscribers.size
|
423
|
+
|
424
|
+
queue = @client.queue(qname)
|
425
|
+
res = queue.update_queue(:subscribers => subscribers,
|
426
|
+
:push_type => "multicast",
|
427
|
+
:retries => 3,
|
428
|
+
:retries_delay => 3
|
429
|
+
)
|
430
|
+
res = queue.update_queue(:error_queue => error_queue_name)
|
431
|
+
|
432
|
+
msg = "hello #{x}"
|
433
|
+
puts "Pushing msg: #{msg}"
|
434
|
+
m = queue.post(msg)
|
435
|
+
orig_id = m.id
|
436
|
+
puts "Msg id on post: #{orig_id}"
|
437
|
+
LOG.debug m
|
438
|
+
|
439
|
+
tries = MAX_TRIES
|
440
|
+
while tries > 0
|
441
|
+
puts 'sleeping for 5 to wait for retry'
|
442
|
+
sleep 5
|
443
|
+
tries -= 1
|
444
|
+
subscribers = queue.messages.get(m.id).subscribers
|
445
|
+
LOG.debug subscribers
|
446
|
+
assert_equal num_subscribers, subscribers.size
|
447
|
+
do_retry = false
|
448
|
+
subscribers.each do |s|
|
449
|
+
LOG.debug s
|
450
|
+
if s["url"] == "http://rest-test.iron.io/code/503"
|
451
|
+
if "error" == s["status"]
|
452
|
+
assert_equal 0, s["retries_remaining"]
|
453
|
+
else
|
454
|
+
assert_equal 503, s["status_code"]
|
455
|
+
do_retry = true
|
456
|
+
end
|
457
|
+
else
|
458
|
+
# this one should error a couple times, then be successful
|
459
|
+
LOG.info "retries_remaining: #{s["retries_remaining"]}"
|
460
|
+
if ["deleted", "error"].include? s["status"] || 200 == s["status_code"]
|
461
|
+
assert_equal 0, s["retries_remaining"]
|
462
|
+
else
|
463
|
+
do_retry = true
|
464
|
+
end
|
465
|
+
end
|
466
|
+
end
|
467
|
+
next if do_retry
|
468
|
+
break
|
469
|
+
end
|
470
|
+
assert_not_equal tries, 0
|
471
|
+
|
472
|
+
# check that the failed messages is in the error queue
|
473
|
+
error_queue = @client.queue(error_queue_name)
|
474
|
+
em = error_queue.get
|
475
|
+
assert_not_nil em
|
476
|
+
puts "rawbody: " + em.body
|
477
|
+
error_hash = JSON.parse(em.body)
|
478
|
+
p error_hash
|
479
|
+
assert error_hash['subscribers']
|
480
|
+
assert_equal subscriber_urls[0][:url], error_hash['subscribers'][0]['url']
|
481
|
+
assert_equal 503, error_hash['code']
|
482
|
+
assert_equal orig_id, error_hash['source_msg_id']
|
483
|
+
assert_not_nil error_hash['msg']
|
484
|
+
em.delete
|
485
|
+
|
486
|
+
# now let's get the original message
|
487
|
+
orig_msg = queue.get_message(error_hash['source_msg_id'])
|
488
|
+
puts "orig_msg:"
|
489
|
+
p orig_msg
|
490
|
+
p orig_msg.body
|
491
|
+
assert msg, orig_msg.body
|
492
|
+
|
493
|
+
error_queue.delete_queue
|
494
|
+
# delete queue on test complete
|
495
|
+
resp = queue.delete_queue
|
496
|
+
assert_equal 200, resp.code, "API must response with HTTP 200 status, but returned HTTP #{resp.code}"
|
497
|
+
end
|
498
|
+
|
379
499
|
end
|
data/test/tmp.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iron_mq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yury Yantsevich
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-11-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: iron_core
|
@@ -110,7 +110,7 @@ dependencies:
|
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: 0.5.4
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
113
|
+
name: net-http-persistent
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - '>='
|
@@ -124,7 +124,7 @@ dependencies:
|
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
127
|
+
name: quicky
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
130
|
- - '>='
|
@@ -138,7 +138,21 @@ dependencies:
|
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
|
-
name:
|
141
|
+
name: iron_worker_ng
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - '>='
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: go
|
142
156
|
requirement: !ruby/object:Gem::Requirement
|
143
157
|
requirements:
|
144
158
|
- - '>='
|
@@ -166,6 +180,7 @@ files:
|
|
166
180
|
- Rakefile
|
167
181
|
- iron_mq.gemspec
|
168
182
|
- lib/iron_mq.rb
|
183
|
+
- lib/iron_mq/alert.rb
|
169
184
|
- lib/iron_mq/client.rb
|
170
185
|
- lib/iron_mq/messages.rb
|
171
186
|
- lib/iron_mq/queues.rb
|
@@ -175,12 +190,16 @@ files:
|
|
175
190
|
- test/long_run.rb
|
176
191
|
- test/long_run_worker.rb
|
177
192
|
- test/quick_run.rb
|
193
|
+
- test/quick_run2.rb
|
178
194
|
- test/schedule_abt.rb
|
195
|
+
- test/test_alerts.rb
|
179
196
|
- test/test_base.rb
|
180
197
|
- test/test_beanstalkd.rb
|
181
198
|
- test/test_bulk.rb
|
182
199
|
- test/test_iron_mq.rb
|
200
|
+
- test/test_mq_worker_subscribers.rb
|
183
201
|
- test/test_push_queues.rb
|
202
|
+
- test/tmp.rb
|
184
203
|
homepage: https://github.com/iron-io/iron_mq_ruby
|
185
204
|
licenses: []
|
186
205
|
metadata: {}
|
@@ -200,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
219
|
version: 1.3.6
|
201
220
|
requirements: []
|
202
221
|
rubyforge_project:
|
203
|
-
rubygems_version: 2.
|
222
|
+
rubygems_version: 2.1.11
|
204
223
|
signing_key:
|
205
224
|
specification_version: 4
|
206
225
|
summary: Ruby client for IronMQ by www.iron.io
|
@@ -208,9 +227,13 @@ test_files:
|
|
208
227
|
- test/long_run.rb
|
209
228
|
- test/long_run_worker.rb
|
210
229
|
- test/quick_run.rb
|
230
|
+
- test/quick_run2.rb
|
211
231
|
- test/schedule_abt.rb
|
232
|
+
- test/test_alerts.rb
|
212
233
|
- test/test_base.rb
|
213
234
|
- test/test_beanstalkd.rb
|
214
235
|
- test/test_bulk.rb
|
215
236
|
- test/test_iron_mq.rb
|
237
|
+
- test/test_mq_worker_subscribers.rb
|
216
238
|
- test/test_push_queues.rb
|
239
|
+
- test/tmp.rb
|