iron_mq 2.1.3 → 3.0.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.
- 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
|