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.
@@ -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
@@ -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 0.5
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
- sleep 0.5
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
@@ -0,0 +1,14 @@
1
+ gem 'test-unit'
2
+ require 'test/unit'
3
+ require 'yaml'
4
+ require_relative 'test_base'
5
+
6
+ class TmpTests < TestBase
7
+ def setup
8
+ super
9
+
10
+ end
11
+
12
+
13
+ end
14
+
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.3
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-03-25 00:00:00.000000000 Z
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: concur
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: net-http-persistent
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: quicky
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.0.0
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