iron_mq 2.1.3 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +18 -19
- data/README.md +65 -9
- data/iron_mq.gemspec +3 -2
- data/lib/iron_mq/client.rb +1 -0
- data/lib/iron_mq/messages.rb +36 -29
- data/lib/iron_mq/queues.rb +67 -23
- data/lib/iron_mq/response.rb +27 -0
- data/lib/iron_mq/subscribers.rb +34 -0
- data/lib/iron_mq/version.rb +2 -1
- data/lib/iron_mq.rb +1 -0
- data/test/quick_run.rb +39 -33
- data/test/test_base.rb +9 -5
- data/test/test_beanstalkd.rb +3 -3
- data/test/test_iron_mq.rb +133 -60
- data/test/test_push_queues.rb +333 -0
- data/test/test_tmp.rb +17 -0
- metadata +27 -7
- data/test/tmp.rb +0 -45
data/test/test_iron_mq.rb
CHANGED
@@ -6,18 +6,17 @@ require_relative 'test_base'
|
|
6
6
|
class IronMQTests < TestBase
|
7
7
|
def setup
|
8
8
|
super
|
9
|
-
|
9
|
+
@skip = @host.include? 'rackspace'
|
10
|
+
LOG.info "@host: #{@host}"
|
10
11
|
queues = @client.queues.list
|
11
12
|
p queues
|
12
|
-
|
13
13
|
clear_queue()
|
14
|
-
|
15
14
|
end
|
16
15
|
|
17
16
|
def test_performance_post_100_messages
|
18
|
-
@client.queue_name = '
|
17
|
+
@client.queue_name = 'test_perf_100'
|
19
18
|
# slower to rackspace since this is running on aws
|
20
|
-
timeout = @
|
19
|
+
timeout = @host.include?('rackspace') ? 40 : 12
|
21
20
|
assert_performance timeout do
|
22
21
|
100.times do
|
23
22
|
@client.messages.post("hello world!")
|
@@ -27,7 +26,7 @@ class IronMQTests < TestBase
|
|
27
26
|
|
28
27
|
|
29
28
|
def test_basics
|
30
|
-
queue_name = '
|
29
|
+
queue_name = 'test_basics_7'
|
31
30
|
@client.queue_name = queue_name
|
32
31
|
clear_queue
|
33
32
|
|
@@ -108,6 +107,25 @@ class IronMQTests < TestBase
|
|
108
107
|
|
109
108
|
end
|
110
109
|
|
110
|
+
|
111
|
+
def test_queues_list
|
112
|
+
queue_name = 'test_queues_list'
|
113
|
+
@client.queue_name = queue_name
|
114
|
+
clear_queue
|
115
|
+
|
116
|
+
res = @client.messages.post("hello world!")
|
117
|
+
p res
|
118
|
+
|
119
|
+
res = @client.queues.list
|
120
|
+
res.each do |q|
|
121
|
+
puts "#{q.name} and #{queue_name}";
|
122
|
+
if q.name == queue_name
|
123
|
+
assert_equal q.size, 1
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
|
111
129
|
# TODO: pass :timeout in post/get messages and test those
|
112
130
|
def test_timeout
|
113
131
|
@client.queue_name = "test_timeout_6"
|
@@ -120,40 +138,45 @@ class IronMQTests < TestBase
|
|
120
138
|
p msg
|
121
139
|
assert msg
|
122
140
|
|
123
|
-
|
124
|
-
p
|
125
|
-
assert_nil
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
msg2.delete
|
141
|
+
msg_nil = @client.messages.get()
|
142
|
+
p msg_nil
|
143
|
+
assert_nil msg_nil
|
144
|
+
|
145
|
+
tries = MAX_TRIES
|
146
|
+
while tries > 0
|
147
|
+
sleep 0.5
|
148
|
+
tries -= 1
|
149
|
+
sleep 1
|
150
|
+
new_msg = @client.messages.get()
|
151
|
+
p new_msg
|
152
|
+
next if new_msg.nil?
|
153
|
+
assert_equal new_msg.id, msg.id
|
154
|
+
new_msg.delete
|
155
|
+
break
|
156
|
+
end
|
157
|
+
assert_not_equal tries, 0
|
142
158
|
|
143
159
|
# now try explicit timeout
|
144
|
-
res = @client.messages.post("hello world timeout2!", :timeout =>
|
160
|
+
res = @client.messages.post("hello world timeout2!", :timeout => 5)
|
145
161
|
p res
|
146
162
|
msg = @client.messages.get()
|
147
163
|
p msg
|
148
164
|
assert msg
|
149
|
-
|
150
|
-
p
|
151
|
-
assert_nil
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
165
|
+
msg_nil = @client.messages.get()
|
166
|
+
p msg_nil
|
167
|
+
assert_nil msg_nil
|
168
|
+
|
169
|
+
tries = MAX_TRIES
|
170
|
+
while tries > 0
|
171
|
+
sleep 0.5
|
172
|
+
tries -= 1
|
173
|
+
sleep 1
|
174
|
+
new_msg = @client.messages.get()
|
175
|
+
next if new_msg.nil?
|
176
|
+
assert_equal new_msg.id, msg.id
|
177
|
+
break
|
178
|
+
end
|
179
|
+
assert_not_equal tries, 0
|
157
180
|
|
158
181
|
end
|
159
182
|
|
@@ -181,12 +204,6 @@ class IronMQTests < TestBase
|
|
181
204
|
end
|
182
205
|
assert_equal 0, res.size
|
183
206
|
|
184
|
-
|
185
|
-
queue = @client.queue("test_basics_6")
|
186
|
-
assert queue.name
|
187
|
-
assert queue.size
|
188
|
-
|
189
|
-
|
190
207
|
end
|
191
208
|
|
192
209
|
def test_delay
|
@@ -195,14 +212,24 @@ class IronMQTests < TestBase
|
|
195
212
|
clear_queue
|
196
213
|
msgTxt = "testMessage-"+Time.now.to_s
|
197
214
|
puts msgTxt
|
198
|
-
@client.messages.post(msgTxt, {:delay =>
|
215
|
+
@client.messages.post(msgTxt, {:delay => 5})
|
199
216
|
msg = @client.messages.get
|
200
217
|
p msg
|
201
218
|
assert_nil msg
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
219
|
+
|
220
|
+
tries = MAX_TRIES
|
221
|
+
while tries > 0
|
222
|
+
sleep 0.5
|
223
|
+
tries -= 1
|
224
|
+
sleep 1
|
225
|
+
msg = @client.messages.get
|
226
|
+
p msg
|
227
|
+
next if msg.nil?
|
228
|
+
assert_equal msg.body, msgTxt
|
229
|
+
break
|
230
|
+
end
|
231
|
+
assert_not_equal tries, 0
|
232
|
+
|
206
233
|
end
|
207
234
|
|
208
235
|
def test_batch
|
@@ -270,28 +297,42 @@ class IronMQTests < TestBase
|
|
270
297
|
p msg
|
271
298
|
assert_nil msg
|
272
299
|
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
300
|
+
tries = MAX_TRIES
|
301
|
+
while tries > 0
|
302
|
+
sleep 0.5
|
303
|
+
tries -= 1
|
304
|
+
sleep 1
|
305
|
+
msg = @client.messages.get
|
306
|
+
next if msg.nil?
|
307
|
+
p msg
|
308
|
+
assert_equal msg.id, msg_id
|
309
|
+
break
|
310
|
+
end
|
311
|
+
assert_not_equal tries, 0
|
278
312
|
|
279
313
|
msg.release(:delay => 5)
|
280
314
|
msg = @client.messages.get
|
281
315
|
p msg
|
282
316
|
assert_nil msg
|
283
317
|
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
318
|
+
tries = MAX_TRIES
|
319
|
+
while tries > 0
|
320
|
+
sleep 0.5
|
321
|
+
tries -= 1
|
322
|
+
sleep 1
|
323
|
+
msg = @client.messages.get
|
324
|
+
next if msg.nil?
|
325
|
+
p msg
|
326
|
+
assert_equal msg.id, msg_id
|
327
|
+
break
|
328
|
+
end
|
329
|
+
assert_not_equal tries, 0
|
290
330
|
end
|
291
331
|
|
332
|
+
|
292
333
|
def test_clear
|
293
334
|
|
294
|
-
q = @client.queue("
|
335
|
+
q = @client.queue("test_clear_7")
|
295
336
|
|
296
337
|
clear_queue(q.name)
|
297
338
|
|
@@ -312,8 +353,11 @@ class IronMQTests < TestBase
|
|
312
353
|
|
313
354
|
|
314
355
|
def test_poll
|
315
|
-
|
316
|
-
|
356
|
+
queue_name = "test_poll_6"
|
357
|
+
@client.queue_name = queue_name
|
358
|
+
clear_queue
|
359
|
+
|
360
|
+
queue = @client.queue(queue_name)
|
317
361
|
|
318
362
|
v = "hello world"
|
319
363
|
5.times do
|
@@ -328,7 +372,14 @@ class IronMQTests < TestBase
|
|
328
372
|
|
329
373
|
assert_equal 5, i
|
330
374
|
|
331
|
-
|
375
|
+
tries = MAX_TRIES
|
376
|
+
while tries > 0
|
377
|
+
tries -= 1
|
378
|
+
break if 0 == queue.reload.size
|
379
|
+
sleep 0.5
|
380
|
+
end
|
381
|
+
assert_not_equal tries, 0
|
382
|
+
|
332
383
|
|
333
384
|
end
|
334
385
|
#
|
@@ -351,6 +402,28 @@ class IronMQTests < TestBase
|
|
351
402
|
#
|
352
403
|
#end
|
353
404
|
|
405
|
+
def test_webhooks
|
406
|
+
omit_if @skip
|
407
|
+
puts "skip webhooks: #{@skip}"
|
408
|
+
qname ="webhook_queue"
|
409
|
+
path = "#{IronMQ::Messages.path(project_id: @client.project_id, queue_name: qname)}/webhook"
|
410
|
+
url = "#{@client.base_url}#{path}"
|
411
|
+
url << "?oauth=#{@client.token}"
|
412
|
+
p url
|
413
|
+
|
414
|
+
v = "hello webhook"
|
415
|
+
|
416
|
+
@rest = Rest::Client.new
|
417
|
+
p @rest.post(url, body: v)
|
418
|
+
|
419
|
+
queue = @client.queue(qname)
|
420
|
+
msg = queue.get
|
421
|
+
p msg
|
422
|
+
assert_equal v, msg.body
|
423
|
+
|
424
|
+
|
425
|
+
end
|
426
|
+
|
354
427
|
|
355
428
|
end
|
356
429
|
|
@@ -0,0 +1,333 @@
|
|
1
|
+
# Put config.yml file in ~/Dropbox/configs/ironmq_gem/test/config.yml
|
2
|
+
require_relative 'test_base'
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
class TestPushQueues < TestBase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
super
|
9
|
+
@skip = @host.include? 'rackspace'
|
10
|
+
return if @skip # bypass these tests if rackspace
|
11
|
+
end
|
12
|
+
|
13
|
+
def make_key(i, t, random=0)
|
14
|
+
key = "pushq-#{t}-#{i}-#{random}"
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def test_queue_subscriptions
|
19
|
+
omit_if @skip
|
20
|
+
types = ["multicast", "unicast"]
|
21
|
+
types.each do |t|
|
22
|
+
|
23
|
+
LOG.info "Trying type #{t}"
|
24
|
+
|
25
|
+
qname = "subscription-queue-#{t}"
|
26
|
+
|
27
|
+
num_subscribers = 10
|
28
|
+
subscribers = []
|
29
|
+
|
30
|
+
x = rand(1000)
|
31
|
+
num_subscribers.times do |i|
|
32
|
+
key = make_key(i, t, x)
|
33
|
+
subscribers << {url: "http://rest-test.iron.io/code/200?store=#{key}"}
|
34
|
+
end
|
35
|
+
|
36
|
+
queue = @client.queue(qname)
|
37
|
+
res = queue.update_queue(:subscribers => subscribers,
|
38
|
+
:push_type => t)
|
39
|
+
queue = @client.queue(qname)
|
40
|
+
LOG.debug queue
|
41
|
+
LOG.debug queue.subscribers
|
42
|
+
assert_equal num_subscribers, queue.subscribers.size
|
43
|
+
|
44
|
+
# add the last one
|
45
|
+
queue.reload # temporary, can remove
|
46
|
+
queue.add_subscriber({url: "http://nowhere.com"})
|
47
|
+
queue.reload
|
48
|
+
assert_equal num_subscribers + 1, queue.subscribers.size
|
49
|
+
queue.remove_subscriber({url: "http://nowhere.com"})
|
50
|
+
queue.reload
|
51
|
+
assert_equal num_subscribers, queue.subscribers.size
|
52
|
+
|
53
|
+
# todo: assert subscriptions match
|
54
|
+
|
55
|
+
msg = "hello #{x}"
|
56
|
+
m = queue.post(msg)
|
57
|
+
|
58
|
+
LOG.info "Checking results..."
|
59
|
+
@rest = Rest::Client.new
|
60
|
+
found = 0
|
61
|
+
if t == "multicast"
|
62
|
+
num_subscribers.times do |i|
|
63
|
+
key = make_key(i, t, x)
|
64
|
+
tries = MAX_TRIES
|
65
|
+
while tries > 0
|
66
|
+
tries -= 1
|
67
|
+
sleep 0.5
|
68
|
+
begin
|
69
|
+
url = "http://rest-test.iron.io/stored/#{key}"
|
70
|
+
LOG.info "checking url #{url}"
|
71
|
+
response = @rest.get(url)
|
72
|
+
parsed = JSON.parse(response.body)
|
73
|
+
LOG.debug parsed['body']
|
74
|
+
assert_equal msg, parsed['body']
|
75
|
+
found += 1
|
76
|
+
break
|
77
|
+
rescue Rest::HttpError => ex
|
78
|
+
LOG.debug ex.code
|
79
|
+
assert_equal 404, ex.code
|
80
|
+
end
|
81
|
+
end
|
82
|
+
assert_not_equal tries, 0
|
83
|
+
end
|
84
|
+
elsif t == "unicast"
|
85
|
+
tries = MAX_TRIES
|
86
|
+
while tries > 0
|
87
|
+
tries -= 1
|
88
|
+
sleep 0.5
|
89
|
+
num_subscribers.times do |i|
|
90
|
+
key = make_key(i, t, x)
|
91
|
+
begin
|
92
|
+
url = "http://rest-test.iron.io/stored/#{key}"
|
93
|
+
LOG.info "checking url #{url}"
|
94
|
+
response = @rest.get(url)
|
95
|
+
parsed = JSON.parse(response.body)
|
96
|
+
LOG.debug parsed['body']
|
97
|
+
assert_equal msg, parsed['body']
|
98
|
+
found += 1
|
99
|
+
break
|
100
|
+
rescue Rest::HttpError => ex
|
101
|
+
LOG.debug ex.code
|
102
|
+
assert_equal 404, ex.code
|
103
|
+
end
|
104
|
+
end
|
105
|
+
break if found == 1
|
106
|
+
end
|
107
|
+
assert_not_equal tries, 0
|
108
|
+
end
|
109
|
+
|
110
|
+
tries = MAX_TRIES
|
111
|
+
while tries > 0
|
112
|
+
|
113
|
+
# Need to wait > 60s here, because in case of retries on pusherd
|
114
|
+
# side (due lost connection for example) there will be no response earlier
|
115
|
+
# (default retries_delay is 60s).
|
116
|
+
sleep 1
|
117
|
+
tries -= 1
|
118
|
+
msg = queue.messages.get(m.id)
|
119
|
+
LOG.info "checking for message: #{msg}"
|
120
|
+
next if msg.nil?
|
121
|
+
subscribers = msg.subscribers
|
122
|
+
|
123
|
+
LOG.debug subscribers
|
124
|
+
if t == "unicast"
|
125
|
+
assert_equal 1, found
|
126
|
+
assert_equal 1, subscribers.size
|
127
|
+
else # pubsub
|
128
|
+
assert_equal num_subscribers, found
|
129
|
+
assert_equal num_subscribers, subscribers.size
|
130
|
+
end
|
131
|
+
|
132
|
+
do_retry = false
|
133
|
+
subscribers.each do |s|
|
134
|
+
LOG.debug s
|
135
|
+
LOG.info "status_code=#{s['status_code']}"
|
136
|
+
LOG.info "status=#{s['status']}"
|
137
|
+
do_retry = true unless 200 == s["status_code"]
|
138
|
+
do_retry = true unless "deleted" == s["status"]
|
139
|
+
end
|
140
|
+
next if do_retry
|
141
|
+
break
|
142
|
+
end
|
143
|
+
assert_not_equal tries, 0
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
|
148
|
+
def test_failure
|
149
|
+
omit_if @skip
|
150
|
+
@rest = Rest::Client.new
|
151
|
+
qname = "failure-queue"
|
152
|
+
|
153
|
+
x = rand(1000)
|
154
|
+
|
155
|
+
subscribers = []
|
156
|
+
subscribers << {url: "http://rest-test.iron.io/code/503?switch_after=2&switch_to=200&namespace=push-test-failures-#{x}"}
|
157
|
+
subscribers << {url: "http://rest-test.iron.io/code/503"}
|
158
|
+
|
159
|
+
num_subscribers = 2
|
160
|
+
|
161
|
+
queue = @client.queue(qname)
|
162
|
+
res = queue.update_queue(:subscribers => subscribers,
|
163
|
+
:push_type => "multicast",
|
164
|
+
:retries => 3,
|
165
|
+
:retries_delay => 3
|
166
|
+
)
|
167
|
+
queue = @client.queue(qname)
|
168
|
+
LOG.debug queue
|
169
|
+
LOG.debug queue.subscribers
|
170
|
+
assert_equal num_subscribers, queue.subscribers.size
|
171
|
+
|
172
|
+
msg = "hello #{x}"
|
173
|
+
m = queue.post(msg)
|
174
|
+
LOG.debug m
|
175
|
+
|
176
|
+
tries = MAX_TRIES
|
177
|
+
while tries > 0
|
178
|
+
sleep 0.5
|
179
|
+
tries -= 1
|
180
|
+
LOG.info 'getting status'
|
181
|
+
subscribers = queue.messages.get(m.id).subscribers
|
182
|
+
LOG.debug subscribers
|
183
|
+
LOG.info "num_subscribers=#{num_subscribers} subscribers.size=#{subscribers.size}"
|
184
|
+
|
185
|
+
assert_equal num_subscribers, subscribers.size
|
186
|
+
do_retry = false
|
187
|
+
subscribers.each do |s|
|
188
|
+
LOG.debug s
|
189
|
+
LOG.info "status_code=#{s['status_code']}"
|
190
|
+
LOG.info "status=#{s['status']}"
|
191
|
+
do_retry = true unless 503 == s["status_code"]
|
192
|
+
do_retry = true unless ["reserved", "retrying"].include? s["status"]
|
193
|
+
end
|
194
|
+
next if do_retry
|
195
|
+
break
|
196
|
+
end
|
197
|
+
assert_not_equal tries, 0
|
198
|
+
|
199
|
+
tries = MAX_TRIES
|
200
|
+
while tries > 0
|
201
|
+
sleep 0.5
|
202
|
+
tries -= 1
|
203
|
+
subscribers = queue.messages.get(m.id).subscribers
|
204
|
+
LOG.debug subscribers
|
205
|
+
assert_equal num_subscribers, subscribers.size
|
206
|
+
do_retry = false
|
207
|
+
subscribers.each do |s|
|
208
|
+
LOG.debug s
|
209
|
+
if s["url"] == "http://rest-test.iron.io/code/503"
|
210
|
+
do_retry = true unless 503 == s["status_code"]
|
211
|
+
do_retry = true unless "error" == s["status"]
|
212
|
+
else
|
213
|
+
do_retry = true unless 200 == s["status_code"]
|
214
|
+
do_retry = true unless "deleted" == s["status"]
|
215
|
+
end
|
216
|
+
end
|
217
|
+
next if do_retry
|
218
|
+
break
|
219
|
+
end
|
220
|
+
assert_not_equal tries, 0
|
221
|
+
end
|
222
|
+
|
223
|
+
|
224
|
+
def test_202
|
225
|
+
omit_if @skip
|
226
|
+
types = ["multicast"]
|
227
|
+
types.each do |t|
|
228
|
+
|
229
|
+
LOG.info "Trying type #{t}"
|
230
|
+
|
231
|
+
qname = "subscription-queue-#{t}-202"
|
232
|
+
|
233
|
+
num_subscribers = 2
|
234
|
+
subscribers = []
|
235
|
+
|
236
|
+
x = rand(1000)
|
237
|
+
num_subscribers.times do |i|
|
238
|
+
key = make_key(i, t, x)
|
239
|
+
subscribers << {url: "http://rest-test.iron.io/code/202?store=#{key}"}
|
240
|
+
end
|
241
|
+
|
242
|
+
queue = @client.queue(qname)
|
243
|
+
res = queue.update_queue(:subscribers => subscribers,
|
244
|
+
:push_type => t)
|
245
|
+
queue = @client.queue(qname)
|
246
|
+
LOG.debug queue
|
247
|
+
LOG.debug queue.subscribers
|
248
|
+
assert_equal num_subscribers, queue.subscribers.size
|
249
|
+
# todo: assert subscriptions match
|
250
|
+
|
251
|
+
msg = "hello #{x}"
|
252
|
+
m = queue.post(msg,
|
253
|
+
{:timeout => 2})
|
254
|
+
|
255
|
+
tries = MAX_TRIES
|
256
|
+
while tries > 0
|
257
|
+
sleep 0.5
|
258
|
+
tries -= 1
|
259
|
+
subscribers = queue.messages.get(m.id).subscribers
|
260
|
+
LOG.debug subscribers
|
261
|
+
assert_equal num_subscribers, subscribers.size
|
262
|
+
do_retry = false
|
263
|
+
subscribers.each do |s|
|
264
|
+
LOG.debug s
|
265
|
+
do_retry = true unless 202 == s["status_code"]
|
266
|
+
do_retry = true unless "reserved" == s["status"]
|
267
|
+
end
|
268
|
+
next if do_retry
|
269
|
+
break
|
270
|
+
end
|
271
|
+
assert_not_equal tries, 0
|
272
|
+
|
273
|
+
LOG.info 'sleeping 2'
|
274
|
+
sleep 2
|
275
|
+
|
276
|
+
tries = MAX_TRIES
|
277
|
+
while tries > 0
|
278
|
+
sleep 0.5
|
279
|
+
subscribers = queue.messages.get(m.id).subscribers
|
280
|
+
LOG.debug subscribers
|
281
|
+
assert_equal num_subscribers, subscribers.size
|
282
|
+
|
283
|
+
do_retry = false
|
284
|
+
subscribers.each do |s|
|
285
|
+
LOG.debug s
|
286
|
+
LOG.info "status_code=#{s['status_code']}"
|
287
|
+
LOG.info "status=#{s['status']}"
|
288
|
+
|
289
|
+
do_retry = true unless 202 == s["status_code"]
|
290
|
+
do_retry = true unless "reserved" == s["status"]
|
291
|
+
end
|
292
|
+
next if do_retry
|
293
|
+
|
294
|
+
# now let's delete it to say we're done with it
|
295
|
+
subscribers.each do |s|
|
296
|
+
LOG.debug s
|
297
|
+
LOG.info "status_code=#{s['status_code']}"
|
298
|
+
LOG.info "status=#{s['status']}"
|
299
|
+
LOG.info "Acking subscriber"
|
300
|
+
res = s.delete
|
301
|
+
LOG.debug res
|
302
|
+
end
|
303
|
+
break
|
304
|
+
end
|
305
|
+
assert_not_equal 0, tries
|
306
|
+
|
307
|
+
tries = MAX_TRIES
|
308
|
+
while tries > 0
|
309
|
+
sleep 0.5
|
310
|
+
tries -= 1
|
311
|
+
subscribers = queue.messages.get(m.id).subscribers
|
312
|
+
LOG.debug subscribers
|
313
|
+
next unless num_subscribers == subscribers.size
|
314
|
+
|
315
|
+
do_retry = false
|
316
|
+
subscribers.each do |s|
|
317
|
+
LOG.debug s
|
318
|
+
LOG.info "status=#{s['status']}"
|
319
|
+
do_retry = true unless "deleted" == s["status"]
|
320
|
+
end
|
321
|
+
next if do_retry
|
322
|
+
break
|
323
|
+
end
|
324
|
+
assert_not_equal 0, tries
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
|
329
|
+
def test_202_failure
|
330
|
+
omit_if @skip
|
331
|
+
end
|
332
|
+
|
333
|
+
end
|