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
data/test/test_beanstalkd.rb
CHANGED
data/test/test_iron_mq.rb
CHANGED
@@ -27,9 +27,20 @@ class IronMQTests < TestBase
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
def test_get
|
31
|
+
queue_name = "some_queue_abcj9u23"
|
32
|
+
queue = @client.queue(queue_name)
|
33
|
+
msg = queue.get
|
34
|
+
v = "hello big world"
|
35
|
+
queue.post(v)
|
36
|
+
msg = queue.get
|
37
|
+
msg.delete
|
38
|
+
msg = queue.get
|
39
|
+
|
40
|
+
end
|
30
41
|
|
31
42
|
def test_basics
|
32
|
-
queue_name = '
|
43
|
+
queue_name = 'test_basics_71'
|
33
44
|
clear_queue(queue_name)
|
34
45
|
|
35
46
|
# NOTE: Kept for backward compatibility checking
|
@@ -41,7 +52,7 @@ class IronMQTests < TestBase
|
|
41
52
|
assert res["id"]
|
42
53
|
assert res.id
|
43
54
|
assert res.msg
|
44
|
-
|
55
|
+
sleep 0.3
|
45
56
|
assert_equal 1, queue.size
|
46
57
|
|
47
58
|
message = queue.get
|
@@ -56,7 +67,8 @@ class IronMQTests < TestBase
|
|
56
67
|
# p res
|
57
68
|
assert_nil res
|
58
69
|
|
59
|
-
|
70
|
+
sleep 0.3
|
71
|
+
assert_equal 0, queue.reload.size
|
60
72
|
|
61
73
|
res = queue.post("hello world 2!")
|
62
74
|
# p res
|
@@ -114,9 +126,28 @@ class IronMQTests < TestBase
|
|
114
126
|
assert_equal 200, resp.code, "API must response with HTTP 200 status, but returned HTTP #{resp.code}"
|
115
127
|
end
|
116
128
|
|
129
|
+
def test_multi_delete
|
130
|
+
queue_name = 'test_multi_delete_41'
|
131
|
+
clear_queue(queue_name)
|
132
|
+
|
133
|
+
queue = @client.queue(queue_name)
|
134
|
+
ids = []
|
135
|
+
10.times do |i|
|
136
|
+
msg = queue.post("hello #{i}")
|
137
|
+
ids << msg.id
|
138
|
+
end
|
139
|
+
sleep 0.5
|
140
|
+
assert_equal 10, queue.reload.size
|
141
|
+
|
142
|
+
queue.delete_messages(ids)
|
143
|
+
sleep 1
|
144
|
+
assert_equal 0, queue.reload.size
|
145
|
+
queue.delete_queue
|
146
|
+
|
147
|
+
end
|
117
148
|
|
118
149
|
def test_queues_list
|
119
|
-
queue_name = '
|
150
|
+
queue_name = 'test_queues_list_1'
|
120
151
|
clear_queue(queue_name)
|
121
152
|
|
122
153
|
queue = @client.queue(queue_name)
|
@@ -141,7 +172,7 @@ class IronMQTests < TestBase
|
|
141
172
|
|
142
173
|
# TODO: pass :timeout in post/get messages and test those
|
143
174
|
def test_timeout
|
144
|
-
queue_name = "
|
175
|
+
queue_name = "test_timeout_71"
|
145
176
|
clear_queue(queue_name)
|
146
177
|
|
147
178
|
queue = @client.queue(queue_name)
|
@@ -157,21 +188,11 @@ class IronMQTests < TestBase
|
|
157
188
|
# p msg_nil
|
158
189
|
assert_nil msg_nil
|
159
190
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
new_msg = queue.get
|
166
|
-
# p new_msg
|
167
|
-
next if new_msg.nil?
|
168
|
-
|
169
|
-
assert_equal new_msg.id, msg.id
|
170
|
-
|
171
|
-
new_msg.delete
|
172
|
-
break
|
173
|
-
end
|
174
|
-
assert_not_equal tries, 0
|
191
|
+
sleep 61 # should be 1 minute timeout by default
|
192
|
+
new_msg = queue.get
|
193
|
+
assert_not_nil new_msg
|
194
|
+
assert_equal new_msg.id, msg.id
|
195
|
+
new_msg.delete
|
175
196
|
|
176
197
|
# now try explicit timeout
|
177
198
|
res = queue.post("hello world timeout2!", :timeout => 30)
|
@@ -185,25 +206,16 @@ class IronMQTests < TestBase
|
|
185
206
|
# p msg_nil
|
186
207
|
assert_nil msg_nil
|
187
208
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
new_msg = queue.get
|
194
|
-
next if new_msg.nil?
|
195
|
-
|
196
|
-
assert_equal new_msg.id, msg.id
|
197
|
-
|
198
|
-
new_msg.delete
|
199
|
-
break
|
200
|
-
end
|
201
|
-
assert_not_equal tries, 0
|
209
|
+
sleep 31
|
210
|
+
new_msg = queue.get
|
211
|
+
assert_not_nil new_msg
|
212
|
+
assert_equal new_msg.id, msg.id
|
213
|
+
new_msg.delete
|
202
214
|
|
203
215
|
# timeout on get
|
204
216
|
res = queue.post("hello world timeout3!")
|
205
217
|
msg = queue.get(:timeout => 30)
|
206
|
-
puts "MESSAGE IS #{msg.inspect}"
|
218
|
+
# puts "MESSAGE IS #{msg.inspect}"
|
207
219
|
assert msg
|
208
220
|
assert_equal msg.timeout, 30
|
209
221
|
|
@@ -211,20 +223,11 @@ class IronMQTests < TestBase
|
|
211
223
|
# p msg_nil
|
212
224
|
assert_nil msg_nil
|
213
225
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
new_msg = queue.get
|
220
|
-
next if new_msg.nil?
|
221
|
-
|
222
|
-
assert_equal msg.id, new_msg.id
|
223
|
-
|
224
|
-
new_msg.delete
|
225
|
-
break
|
226
|
-
end
|
227
|
-
assert_not_equal tries, 0
|
226
|
+
sleep 31
|
227
|
+
new_msg = queue.get
|
228
|
+
assert_not_nil new_msg
|
229
|
+
assert_equal new_msg.id, msg.id
|
230
|
+
new_msg.delete
|
228
231
|
|
229
232
|
# delete queue on test complete
|
230
233
|
resp = queue.delete_queue
|
@@ -234,20 +237,21 @@ class IronMQTests < TestBase
|
|
234
237
|
def test_queues
|
235
238
|
puts 'test_queues'
|
236
239
|
|
237
|
-
|
238
|
-
|
239
|
-
#
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
assert queue.new?
|
240
|
+
qname = "some_queue_that_does_not_exist_1"
|
241
|
+
queue = @client.queue(qname)
|
242
|
+
# delete it before the test
|
243
|
+
queue.delete_queue
|
244
|
+
|
245
|
+
assert_raise Rest::HttpError do
|
246
|
+
# should raise a 404
|
247
|
+
m = queue.size
|
248
|
+
end
|
247
249
|
|
248
250
|
# create at least one queue
|
249
251
|
queue.post('create queue message')
|
250
|
-
|
252
|
+
# queue should exist now
|
253
|
+
m = queue.get
|
254
|
+
assert_not_nil m
|
251
255
|
|
252
256
|
res = @client.queues.list
|
253
257
|
# puts "res.size: #{res.size}"
|
@@ -258,7 +262,7 @@ class IronMQTests < TestBase
|
|
258
262
|
end
|
259
263
|
assert res.size > 0
|
260
264
|
|
261
|
-
res = @client.queues.list(:page =>
|
265
|
+
res = @client.queues.list(:page => 50)
|
262
266
|
# puts "res.size 2: #{res.size}"
|
263
267
|
# res.each do |q| { p q.name }
|
264
268
|
|
@@ -272,32 +276,22 @@ class IronMQTests < TestBase
|
|
272
276
|
def test_delay
|
273
277
|
puts 'test_delay'
|
274
278
|
|
275
|
-
queue_name = "
|
279
|
+
queue_name = "test_delay_61"
|
276
280
|
clear_queue(queue_name)
|
277
281
|
|
278
282
|
msgTxt = "testMessage-"+Time.now.to_s
|
279
283
|
# puts msgTxt
|
280
284
|
queue = @client.queue(queue_name)
|
281
|
-
queue.post(msgTxt, {:delay => 5})
|
285
|
+
msg_id = queue.post(msgTxt, {:delay => 5}).id
|
282
286
|
msg = queue.get
|
283
287
|
# p msg
|
284
288
|
assert_nil msg
|
285
289
|
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
msg = queue.get
|
293
|
-
# p msg
|
294
|
-
next if msg.nil?
|
295
|
-
|
296
|
-
assert_equal msg.body, msgTxt
|
297
|
-
|
298
|
-
break
|
299
|
-
end
|
300
|
-
assert_not_equal tries, 0
|
290
|
+
sleep 6
|
291
|
+
new_msg = queue.get
|
292
|
+
assert_not_nil new_msg
|
293
|
+
assert_equal msg_id, new_msg.id
|
294
|
+
new_msg.delete
|
301
295
|
|
302
296
|
# delete queue on test complete
|
303
297
|
resp = queue.delete_queue
|
@@ -307,7 +301,7 @@ class IronMQTests < TestBase
|
|
307
301
|
def test_batch
|
308
302
|
puts 'test_batch'
|
309
303
|
|
310
|
-
queue_name = "
|
304
|
+
queue_name = "test_batch_61"
|
311
305
|
clear_queue(queue_name)
|
312
306
|
|
313
307
|
x = []
|
@@ -325,10 +319,16 @@ class IronMQTests < TestBase
|
|
325
319
|
msg = queue.get
|
326
320
|
assert msg
|
327
321
|
assert msg['id']
|
322
|
+
puts "Deleting message #{msg.id}"
|
328
323
|
msg.delete
|
324
|
+
sleep 2
|
329
325
|
|
330
326
|
msgs = queue.get(:n => 10)
|
331
327
|
assert msgs.is_a?(Array)
|
328
|
+
msgs.each do |m|
|
329
|
+
puts m.id
|
330
|
+
assert_not_equal msg.id, m.id
|
331
|
+
end
|
332
332
|
assert msgs.size == 9, "size should be 9, but it's #{msgs.size}"
|
333
333
|
assert msgs[0]["id"]
|
334
334
|
|
@@ -345,13 +345,22 @@ class IronMQTests < TestBase
|
|
345
345
|
def test_peek
|
346
346
|
puts "test_message_peek"
|
347
347
|
|
348
|
-
queue_name = "
|
348
|
+
queue_name = "test_msg_peek_1"
|
349
349
|
clear_queue(queue_name)
|
350
350
|
|
351
351
|
queue = @client.queue(queue_name)
|
352
|
-
queue.post(
|
353
|
-
|
354
|
-
|
352
|
+
queue.post("zero message")
|
353
|
+
msg = queue.get
|
354
|
+
msg.delete
|
355
|
+
|
356
|
+
msg = queue.peek
|
357
|
+
assert_nil msg
|
358
|
+
|
359
|
+
queue.post("first message")
|
360
|
+
sleep 1
|
361
|
+
queue.post("second message")
|
362
|
+
sleep 1
|
363
|
+
queue.post("third message")
|
355
364
|
|
356
365
|
msg = queue.peek
|
357
366
|
assert_not_nil msg
|
@@ -390,30 +399,30 @@ class IronMQTests < TestBase
|
|
390
399
|
end
|
391
400
|
|
392
401
|
def test_touch
|
393
|
-
puts "
|
402
|
+
puts "in test_touch"
|
394
403
|
|
395
|
-
queue_name = "
|
404
|
+
queue_name = "test_msg_touch_3"
|
396
405
|
clear_queue(queue_name)
|
397
406
|
|
398
407
|
queue = @client.queue(queue_name)
|
399
|
-
queue.post(
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
],
|
404
|
-
{:timeout => 30}) # minimum timeout
|
408
|
+
queue.post("first message", :timeout => 30)
|
409
|
+
queue.post("second message", :timeout => 30)
|
410
|
+
queue.post("third message", :timeout => 30)
|
411
|
+
|
405
412
|
|
406
413
|
# get message
|
407
414
|
msg = queue.get
|
408
415
|
assert_not_nil msg
|
409
|
-
assert_equal "first message", msg.body, "message body must be 'first message', but it's '#{msg.body}'"
|
416
|
+
assert_equal "first message", msg.body, "message body must be 'first message', but it's '#{msg.body}'"
|
410
417
|
|
411
418
|
sleep 15 # timeout is not passed
|
412
419
|
|
413
420
|
msgs = queue.peek(:n => 3) # all messages from queue
|
414
421
|
assert_equal Array, msgs.class, "waiting for Array, but got #{msgs.class}"
|
415
422
|
assert_equal 2, msgs.size, "API must return only 2 messages"
|
416
|
-
msgs.each
|
423
|
+
msgs.each do |m|
|
424
|
+
assert_not_equal msg.id, m.id, "returned a message which must be reserved"
|
425
|
+
end
|
417
426
|
|
418
427
|
sleep 20 # ensure timeout is passed
|
419
428
|
|
@@ -421,7 +430,6 @@ class IronMQTests < TestBase
|
|
421
430
|
msgs = queue.peek(:n => 3)
|
422
431
|
assert_equal Array, msgs.class, "waiting for Array, but got #{msgs.class}"
|
423
432
|
assert_equal 3, msgs.size, "API must return 3 messages"
|
424
|
-
assert_equal msg.id, msgs[2].id, "released message must be at the end of the queue"
|
425
433
|
|
426
434
|
msg = queue.get
|
427
435
|
assert_not_nil msg
|
@@ -463,12 +471,12 @@ class IronMQTests < TestBase
|
|
463
471
|
queue_name = "test_release_6"
|
464
472
|
clear_queue(queue_name)
|
465
473
|
|
466
|
-
|
474
|
+
msg_txt = "testMessage-"+Time.now.to_s
|
467
475
|
# puts msgTxt
|
468
476
|
|
469
477
|
queue = @client.queue(queue_name)
|
470
478
|
|
471
|
-
msg_id = queue.post(
|
479
|
+
msg_id = queue.post(msg_txt, {:timeout => 60*5}).id
|
472
480
|
# puts "msg_id: #{msg_id}"
|
473
481
|
message = queue.get
|
474
482
|
# p msg
|
@@ -498,42 +506,20 @@ class IronMQTests < TestBase
|
|
498
506
|
# p msg
|
499
507
|
assert_nil msgr
|
500
508
|
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
sleep 1
|
506
|
-
|
507
|
-
msg = queue.get
|
508
|
-
next if msg.nil?
|
509
|
-
|
510
|
-
#p msg
|
511
|
-
assert_equal msg.id, msg_id
|
512
|
-
|
513
|
-
break
|
514
|
-
end
|
515
|
-
assert_not_equal tries, 0
|
509
|
+
sleep 11
|
510
|
+
msg = queue.get
|
511
|
+
assert_not_nil msg
|
512
|
+
assert_equal msg_id, msg.id
|
516
513
|
|
517
514
|
msg.release(:delay => 5)
|
518
515
|
msg = queue.get
|
519
516
|
# p msg
|
520
517
|
assert_nil msg
|
521
518
|
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
sleep 1
|
527
|
-
|
528
|
-
msg = queue.get
|
529
|
-
next if msg.nil?
|
530
|
-
|
531
|
-
# p msg
|
532
|
-
assert_equal msg.id, msg_id
|
533
|
-
|
534
|
-
break
|
535
|
-
end
|
536
|
-
assert_not_equal tries, 0
|
519
|
+
sleep 6
|
520
|
+
msg = queue.get
|
521
|
+
assert_not_nil msg
|
522
|
+
assert_equal msg_id, msg.id
|
537
523
|
|
538
524
|
# delete queue on test complete
|
539
525
|
resp = queue.delete_queue
|
@@ -544,21 +530,23 @@ class IronMQTests < TestBase
|
|
544
530
|
def test_clear
|
545
531
|
puts "test_clear"
|
546
532
|
|
547
|
-
queue = @client.queue("
|
533
|
+
queue = @client.queue("test_clear_9")
|
548
534
|
clear_queue(queue.name)
|
549
535
|
|
550
536
|
val = "hi mr clean"
|
551
537
|
queue.post(val)
|
552
538
|
|
553
|
-
sleep
|
554
|
-
assert_equal 1, queue.size
|
539
|
+
sleep 0.5 # make sure the counter has time to update
|
540
|
+
assert_equal 1, queue.reload.size
|
555
541
|
|
556
542
|
queue.clear
|
557
543
|
|
558
544
|
msg = queue.get
|
559
545
|
assert_nil msg
|
560
546
|
|
561
|
-
|
547
|
+
sleep 0.5
|
548
|
+
|
549
|
+
assert_equal 0, queue.reload.size
|
562
550
|
|
563
551
|
# delete queue on test complete
|
564
552
|
resp = queue.delete_queue
|
@@ -583,14 +571,6 @@ class IronMQTests < TestBase
|
|
583
571
|
|
584
572
|
assert_equal 5, i
|
585
573
|
|
586
|
-
tries = MAX_TRIES
|
587
|
-
while tries > 0
|
588
|
-
tries -= 1
|
589
|
-
break if 0 == queue.size
|
590
|
-
sleep 1
|
591
|
-
end
|
592
|
-
assert_not_equal tries, 0
|
593
|
-
|
594
574
|
# delete queue on test complete
|
595
575
|
resp = queue.delete_queue
|
596
576
|
assert_equal 200, resp.code, "API must response with HTTP 200 status, but returned HTTP #{resp.code}"
|
@@ -607,9 +587,8 @@ class IronMQTests < TestBase
|
|
607
587
|
|
608
588
|
queue.post("hi2")
|
609
589
|
# p queue
|
610
|
-
|
611
|
-
|
612
|
-
assert_equal 1, q_info.size, "queue size must be 1, but got #{q_info.size}"
|
590
|
+
assert_not_equal old_id, queue.id, "old queue ID (#{old_id}) must not be equal to new ID (#{queue.id})"
|
591
|
+
assert_equal 1, queue.size, "queue size must be 1, but got #{queue.size}"
|
613
592
|
|
614
593
|
msg = queue.get
|
615
594
|
assert_equal "hi2", msg.body, "message body must be 'hi2', but got '#{msg.body}'"
|
@@ -640,5 +619,60 @@ class IronMQTests < TestBase
|
|
640
619
|
assert_equal 200, resp.code, "API must response with HTTP 200 status, but returned HTTP #{resp.code}"
|
641
620
|
end
|
642
621
|
|
622
|
+
|
623
|
+
def test_queue_params
|
624
|
+
|
625
|
+
qname = "test_queue_params_1"
|
626
|
+
|
627
|
+
clear_queue(qname)
|
628
|
+
q = @client.queue(qname)
|
629
|
+
|
630
|
+
q.post("message 1", :timeout => 200, :delay => 0, :expires_in => 2000)
|
631
|
+
q.post("message 1", :timeout => 300, :delay => 0, :expires_in => 3000)
|
632
|
+
|
633
|
+
msgs = q.get(:n => 2)
|
634
|
+
|
635
|
+
msgs.each do |m|
|
636
|
+
puts m.body
|
637
|
+
puts "timeout: #{m.timeout}"
|
638
|
+
puts "expires_in: #{m.expires_in}"
|
639
|
+
puts "delay: #{m.delay}"
|
640
|
+
end
|
641
|
+
|
642
|
+
end
|
643
|
+
|
644
|
+
|
645
|
+
def test_reserved_count
|
646
|
+
puts "test_reserved_count"
|
647
|
+
|
648
|
+
queue_name = "test_reserved_count"
|
649
|
+
clear_queue(queue_name)
|
650
|
+
|
651
|
+
queue = @client.queue(queue_name)
|
652
|
+
queue.post("zero message")
|
653
|
+
msg = queue.get
|
654
|
+
p msg
|
655
|
+
puts "id: #{msg.id} reserved_count: #{msg.reserved_count}"
|
656
|
+
msg.release
|
657
|
+
msg = queue.get
|
658
|
+
p msg
|
659
|
+
puts "id: #{msg.id} reserved_count: #{msg.reserved_count}"
|
660
|
+
msg.release
|
661
|
+
msg = queue.get
|
662
|
+
p msg
|
663
|
+
puts "id: #{msg.id} reserved_count: #{msg.reserved_count}"
|
664
|
+
|
665
|
+
|
666
|
+
end
|
667
|
+
|
668
|
+
def test_queue_set_info
|
669
|
+
qname = "test_queue_set_info"
|
670
|
+
clear_queue(qname)
|
671
|
+
q = @client.queue(qname)
|
672
|
+
q.update_queue(:push_type => 'unicast')
|
673
|
+
assert_equal 'unicast', q.push_type
|
674
|
+
q.update_queue(:retries => 10)
|
675
|
+
assert_equal 'unicast', q.reload.push_type
|
676
|
+
end
|
643
677
|
end
|
644
678
|
|