iron_mq 4.0.3 → 4.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|