iron_mq 5.0.1 → 6.0.0.pre1
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 +1 -0
 - data/Gemfile.lock +19 -17
 - data/README.md +420 -70
 - data/iron_mq.gemspec +2 -1
 - data/lib/iron_mq/client.rb +38 -14
 - data/lib/iron_mq/messages.rb +22 -8
 - data/lib/iron_mq/queues.rb +105 -66
 - data/lib/iron_mq/response.rb +2 -2
 - data/lib/iron_mq/subscribers.rb +7 -2
 - data/lib/iron_mq/version.rb +1 -1
 - data/test/Rakefile +33 -0
 - data/test/quick_run.rb +4 -4
 - data/test/quick_run2.rb +2 -2
 - data/test/test_alerts.rb +79 -32
 - data/test/test_base.rb +6 -4
 - data/test/test_bulk.rb +1 -1
 - data/test/test_iron_mq.rb +183 -141
 - data/test/test_mq_worker_subscribers.rb +2 -2
 - data/test/test_performance.rb +29 -0
 - data/test/test_push_queues.rb +85 -116
 - data/test/tmp.rb +2 -0
 - metadata +48 -32
 - data/test/test_beanstalkd.rb +0 -243
 
| 
         @@ -29,12 +29,12 @@ class TestWorkerSubscribers < TestBase 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                # test for bad subscribers
         
     | 
| 
       31 
31 
     | 
    
         
             
                puts "raising..."
         
     | 
| 
       32 
     | 
    
         
            -
                 
     | 
| 
      
 32 
     | 
    
         
            +
                assert_raises Rest::HttpError do
         
     | 
| 
       33 
33 
     | 
    
         
             
                  # can't subscribe to self
         
     | 
| 
       34 
34 
     | 
    
         
             
                  res = queue.update_queue(:subscribers => [{:url => "ironmq:///#{publisher_name}"}])
         
     | 
| 
       35 
35 
     | 
    
         
             
                end
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                 
     | 
| 
      
 37 
     | 
    
         
            +
                assert_raises Rest::HttpError do
         
     | 
| 
       38 
38 
     | 
    
         
             
                  # must have a token if sending to different project_id
         
     | 
| 
       39 
39 
     | 
    
         
             
                  res = queue.update_queue(:subscribers => [{:url => "ironmq://ABCDEFG@/somerandomqueue"}])
         
     | 
| 
       40 
40 
     | 
    
         
             
                end
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            gem 'test-unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'parallel'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative 'test_base'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            class TmpTests < TestBase
         
     | 
| 
      
 8 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                super
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_performance_post_100_messages
         
     | 
| 
      
 14 
     | 
    
         
            +
                queue = @client.queue('test_perf_100')
         
     | 
| 
      
 15 
     | 
    
         
            +
                # slower to rackspace since this is running on aws
         
     | 
| 
      
 16 
     | 
    
         
            +
                timeout = @host.include?('rackspace') ? 40 : 12
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                assert_performance(timeout) do
         
     | 
| 
      
 19 
     | 
    
         
            +
                  100.times do
         
     | 
| 
      
 20 
     | 
    
         
            +
                    queue.post("hello world!")
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  # delete queue on test complete
         
     | 
| 
      
 24 
     | 
    
         
            +
                  resp = queue.delete_queue
         
     | 
| 
      
 25 
     | 
    
         
            +
                  assert_equal 200, resp.code, "API must response with HTTP 200 status, but returned HTTP #{resp.code}"
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
            end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
    
        data/test/test_push_queues.rb
    CHANGED
    
    | 
         @@ -14,44 +14,43 @@ class TestPushQueues < TestBase 
     | 
|
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
              def test_subscriber_add_remove
         
     | 
| 
       16 
16 
     | 
    
         
             
                puts "test_subscriber_add_remove"
         
     | 
| 
       17 
     | 
    
         
            -
                qname = " 
     | 
| 
       18 
     | 
    
         
            -
                 
     | 
| 
       19 
     | 
    
         
            -
                 
     | 
| 
      
 17 
     | 
    
         
            +
                qname = "subscriber_#{Time.now.to_i}"
         
     | 
| 
      
 18 
     | 
    
         
            +
                first_subscriber = {name: "first_subscriber", url: "http://nowhere.com:8080/somepath"}
         
     | 
| 
      
 19 
     | 
    
         
            +
                second_subscriber = {name: "second_subscriber", url: "http://somewhere.com"}
         
     | 
| 
      
 20 
     | 
    
         
            +
                subscribers = [first_subscriber, second_subscriber]
         
     | 
| 
      
 21 
     | 
    
         
            +
                @client.create_queue(qname, push: {subscribers: subscribers})
         
     | 
| 
       20 
22 
     | 
    
         
             
                queue = @client.queue(qname)
         
     | 
| 
       21 
     | 
    
         
            -
                subscribers = [{:url => s}]
         
     | 
| 
       22 
     | 
    
         
            -
                res = queue.update_queue(:subscribers => subscribers)
         
     | 
| 
       23 
23 
     | 
    
         
             
                LOG.debug queue.subscribers
         
     | 
| 
       24 
     | 
    
         
            -
                assert_equal  
     | 
| 
      
 24 
     | 
    
         
            +
                assert_equal 2, queue.subscribers.size
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                queue.reload
         
     | 
| 
       27 
     | 
    
         
            -
                assert_equal  
     | 
| 
      
 27 
     | 
    
         
            +
                assert_equal 2, queue.subscribers.size
         
     | 
| 
       28 
28 
     | 
    
         
             
                p queue.subscribers[0].url
         
     | 
| 
       29 
     | 
    
         
            -
                queue. 
     | 
| 
      
 29 
     | 
    
         
            +
                queue.remove_subscribers([{name: first_subscriber[:name]}])
         
     | 
| 
       30 
30 
     | 
    
         
             
                queue.reload
         
     | 
| 
       31 
     | 
    
         
            -
                assert_equal  
     | 
| 
      
 31 
     | 
    
         
            +
                assert_equal 1, queue.subscribers.size
         
     | 
| 
       32 
32 
     | 
    
         
             
                p queue.subscribers
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                # add it back with add
         
     | 
| 
       35 
     | 
    
         
            -
                queue.add_subscriber( 
     | 
| 
      
 35 
     | 
    
         
            +
                queue.add_subscriber(first_subscriber)
         
     | 
| 
       36 
36 
     | 
    
         
             
                queue.reload
         
     | 
| 
       37 
     | 
    
         
            -
                assert_equal  
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal 2, queue.subscribers.size
         
     | 
| 
       38 
38 
     | 
    
         
             
                p queue.subscribers[0].url
         
     | 
| 
       39 
     | 
    
         
            -
                queue.remove_subscriber( 
     | 
| 
      
 39 
     | 
    
         
            +
                queue.remove_subscriber(first_subscriber)
         
     | 
| 
       40 
40 
     | 
    
         
             
                queue.reload
         
     | 
| 
       41 
     | 
    
         
            -
                assert_equal  
     | 
| 
      
 41 
     | 
    
         
            +
                assert_equal 1, queue.subscribers.size
         
     | 
| 
       42 
42 
     | 
    
         
             
                p queue.subscribers
         
     | 
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
                # add two, remove first
         
     | 
| 
       45 
     | 
    
         
            -
                queue.add_subscriber( 
     | 
| 
       46 
     | 
    
         
            -
                queue.add_subscriber({:url => s2})
         
     | 
| 
      
 45 
     | 
    
         
            +
                queue.add_subscriber(first_subscriber)
         
     | 
| 
       47 
46 
     | 
    
         
             
                queue.reload
         
     | 
| 
       48 
47 
     | 
    
         
             
                assert_equal 2, queue.subscribers.size
         
     | 
| 
       49 
48 
     | 
    
         
             
                p queue.subscribers[0].url
         
     | 
| 
       50 
     | 
    
         
            -
                queue.remove_subscriber( 
     | 
| 
      
 49 
     | 
    
         
            +
                queue.remove_subscriber(first_subscriber)
         
     | 
| 
       51 
50 
     | 
    
         
             
                queue.reload
         
     | 
| 
       52 
51 
     | 
    
         
             
                assert_equal 1, queue.subscribers.size
         
     | 
| 
       53 
52 
     | 
    
         
             
                p queue.subscribers[0].url
         
     | 
| 
       54 
     | 
    
         
            -
                assert_equal  
     | 
| 
      
 53 
     | 
    
         
            +
                assert_equal second_subscriber[:url], queue.subscribers[0].url
         
     | 
| 
       55 
54 
     | 
    
         | 
| 
       56 
55 
     | 
    
         
             
                queue.delete_queue
         
     | 
| 
       57 
56 
     | 
    
         
             
              end
         
     | 
| 
         @@ -66,7 +65,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       66 
65 
     | 
    
         | 
| 
       67 
66 
     | 
    
         
             
                  LOG.info "Trying type #{t}"
         
     | 
| 
       68 
67 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
                  qname = "subscription-queue-#{ 
     | 
| 
      
 68 
     | 
    
         
            +
                  qname = "subscription-queue-#{Time.now.to_i}"
         
     | 
| 
       70 
69 
     | 
    
         
             
                  queue_names << qname
         
     | 
| 
       71 
70 
     | 
    
         | 
| 
       72 
71 
     | 
    
         
             
                  num_subscribers = 10
         
     | 
| 
         @@ -75,22 +74,23 @@ class TestPushQueues < TestBase 
     | 
|
| 
       75 
74 
     | 
    
         
             
                  x = rand(1000)
         
     | 
| 
       76 
75 
     | 
    
         
             
                  num_subscribers.times do |i|
         
     | 
| 
       77 
76 
     | 
    
         
             
                    key = make_key(i, t, x)
         
     | 
| 
       78 
     | 
    
         
            -
                    subscribers << {: 
     | 
| 
      
 77 
     | 
    
         
            +
                    subscribers << {url: "http://rest-test.iron.io/code/200?store=#{key}",
         
     | 
| 
      
 78 
     | 
    
         
            +
                                    name: "name_#{key}"}
         
     | 
| 
       79 
79 
     | 
    
         
             
                  end
         
     | 
| 
       80 
80 
     | 
    
         | 
| 
      
 81 
     | 
    
         
            +
                  @client.create_queue(qname, {type: t, push: {subscribers: subscribers}})
         
     | 
| 
       81 
82 
     | 
    
         
             
                  queue = @client.queue(qname)
         
     | 
| 
       82 
     | 
    
         
            -
                  res = queue.update_queue(:subscribers => subscribers,
         
     | 
| 
       83 
     | 
    
         
            -
                                           :push_type => t)
         
     | 
| 
       84 
83 
     | 
    
         | 
| 
       85 
84 
     | 
    
         
             
                  LOG.debug queue.subscribers
         
     | 
| 
       86 
85 
     | 
    
         
             
                  assert_equal num_subscribers, queue.subscribers.size
         
     | 
| 
       87 
86 
     | 
    
         | 
| 
       88 
87 
     | 
    
         
             
                  # add the last one
         
     | 
| 
       89 
88 
     | 
    
         
             
                  queue.reload # temporary, can remove
         
     | 
| 
       90 
     | 
    
         
            -
                   
     | 
| 
      
 89 
     | 
    
         
            +
                  subscriber_name =  "name_#{Time.now.to_i}"
         
     | 
| 
      
 90 
     | 
    
         
            +
                  queue.add_subscriber({url: "http://nowhere.com", name: subscriber_name})
         
     | 
| 
       91 
91 
     | 
    
         
             
                  queue.reload
         
     | 
| 
       92 
92 
     | 
    
         
             
                  assert_equal num_subscribers + 1, queue.subscribers.size
         
     | 
| 
       93 
     | 
    
         
            -
                  queue.remove_subscriber({: 
     | 
| 
      
 93 
     | 
    
         
            +
                  queue.remove_subscriber({name: subscriber_name})
         
     | 
| 
       94 
94 
     | 
    
         
             
                  queue.reload
         
     | 
| 
       95 
95 
     | 
    
         
             
                  assert_equal num_subscribers, queue.subscribers.size
         
     | 
| 
       96 
96 
     | 
    
         | 
| 
         @@ -124,7 +124,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       124 
124 
     | 
    
         
             
                          assert_equal 404, ex.code
         
     | 
| 
       125 
125 
     | 
    
         
             
                        end
         
     | 
| 
       126 
126 
     | 
    
         
             
                      end
         
     | 
| 
       127 
     | 
    
         
            -
                       
     | 
| 
      
 127 
     | 
    
         
            +
                      refute_equal tries, 0
         
     | 
| 
       128 
128 
     | 
    
         
             
                    end
         
     | 
| 
       129 
129 
     | 
    
         
             
                  elsif t == "unicast"
         
     | 
| 
       130 
130 
     | 
    
         
             
                    tries = MAX_TRIES
         
     | 
| 
         @@ -149,7 +149,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       149 
149 
     | 
    
         
             
                      end
         
     | 
| 
       150 
150 
     | 
    
         
             
                      break if found == 1
         
     | 
| 
       151 
151 
     | 
    
         
             
                    end
         
     | 
| 
       152 
     | 
    
         
            -
                     
     | 
| 
      
 152 
     | 
    
         
            +
                    refute_equal tries, 0
         
     | 
| 
       153 
153 
     | 
    
         
             
                  end
         
     | 
| 
       154 
154 
     | 
    
         | 
| 
       155 
155 
     | 
    
         
             
                  tries = MAX_TRIES
         
     | 
| 
         @@ -161,7 +161,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       161 
161 
     | 
    
         
             
                    sleep 1
         
     | 
| 
       162 
162 
     | 
    
         
             
                    tries -= 1
         
     | 
| 
       163 
163 
     | 
    
         
             
                    # old style of message getting
         
     | 
| 
       164 
     | 
    
         
            -
                    msg = queue.messages. 
     | 
| 
      
 164 
     | 
    
         
            +
                    msg = queue.messages.get_message(m.id)
         
     | 
| 
       165 
165 
     | 
    
         
             
                    LOG.info "checking for message: #{msg}"
         
     | 
| 
       166 
166 
     | 
    
         
             
                    next if msg.nil?
         
     | 
| 
       167 
167 
     | 
    
         
             
                    subscribers = msg.subscribers
         
     | 
| 
         @@ -169,7 +169,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       169 
169 
     | 
    
         
             
                    LOG.debug subscribers
         
     | 
| 
       170 
170 
     | 
    
         
             
                    if t == "unicast"
         
     | 
| 
       171 
171 
     | 
    
         
             
                      assert_equal 1, found
         
     | 
| 
       172 
     | 
    
         
            -
                      assert_equal  
     | 
| 
      
 172 
     | 
    
         
            +
                      assert_equal num_subscribers, subscribers.size
         
     | 
| 
       173 
173 
     | 
    
         
             
                    else # pubsub
         
     | 
| 
       174 
174 
     | 
    
         
             
                      assert_equal num_subscribers, found
         
     | 
| 
       175 
175 
     | 
    
         
             
                      assert_equal num_subscribers, subscribers.size
         
     | 
| 
         @@ -186,7 +186,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       186 
186 
     | 
    
         
             
                    next if do_retry
         
     | 
| 
       187 
187 
     | 
    
         
             
                    break
         
     | 
| 
       188 
188 
     | 
    
         
             
                  end
         
     | 
| 
       189 
     | 
    
         
            -
                   
     | 
| 
      
 189 
     | 
    
         
            +
                  assert_equal tries, 0
         
     | 
| 
       190 
190 
     | 
    
         | 
| 
       191 
191 
     | 
    
         
             
                  # delete queue after all tests on it were completed
         
     | 
| 
       192 
192 
     | 
    
         
             
                  resp = queue.delete_queue
         
     | 
| 
         @@ -196,23 +196,24 @@ class TestPushQueues < TestBase 
     | 
|
| 
       196 
196 
     | 
    
         | 
| 
       197 
197 
     | 
    
         
             
              def test_headers
         
     | 
| 
       198 
198 
     | 
    
         
             
                puts "test_headers"
         
     | 
| 
       199 
     | 
    
         
            -
                qname = "push- 
     | 
| 
      
 199 
     | 
    
         
            +
                qname = "push-headers_#{Time.now.to_i}"
         
     | 
| 
       200 
200 
     | 
    
         
             
                subscribers = []
         
     | 
| 
       201 
201 
     | 
    
         | 
| 
       202 
202 
     | 
    
         
             
                x = rand(1000)
         
     | 
| 
       203 
203 
     | 
    
         
             
                key = "somemsg_#{x}"
         
     | 
| 
       204 
     | 
    
         
            -
                subscribers << {: 
     | 
| 
       205 
     | 
    
         
            -
             
     | 
| 
      
 204 
     | 
    
         
            +
                subscribers << {url: "http://rest-test.iron.io/code/200?store=#{key}",
         
     | 
| 
      
 205 
     | 
    
         
            +
                                name: "name_#{key}",
         
     | 
| 
      
 206 
     | 
    
         
            +
                                headers: {"Content-Type"=>"application/json"}}
         
     | 
| 
       206 
207 
     | 
    
         | 
| 
       207 
     | 
    
         
            -
                 
     | 
| 
       208 
     | 
    
         
            -
             
     | 
| 
       209 
     | 
    
         
            -
                                   :push_type => "multicast")
         
     | 
| 
      
 208 
     | 
    
         
            +
                @client.create_queue(qname, {type: 'multicast',
         
     | 
| 
      
 209 
     | 
    
         
            +
                                             push: {subscribers: subscribers}})
         
     | 
| 
       210 
210 
     | 
    
         | 
| 
      
 211 
     | 
    
         
            +
                queue = @client.queue(qname)
         
     | 
| 
       211 
212 
     | 
    
         
             
                LOG.debug queue.subscribers
         
     | 
| 
       212 
213 
     | 
    
         
             
                assert_equal subscribers.size, queue.subscribers.size
         
     | 
| 
       213 
214 
     | 
    
         
             
                queue.reload.subscribers.each do |s|
         
     | 
| 
       214 
215 
     | 
    
         
             
                  p s.headers
         
     | 
| 
       215 
     | 
    
         
            -
                   
     | 
| 
      
 216 
     | 
    
         
            +
                  refute_nil s.headers['Content-Type']
         
     | 
| 
       216 
217 
     | 
    
         
             
                end
         
     | 
| 
       217 
218 
     | 
    
         | 
| 
       218 
219 
     | 
    
         
             
                msg = "{\"hello\": #{x}}"
         
     | 
| 
         @@ -233,14 +234,14 @@ class TestPushQueues < TestBase 
     | 
|
| 
       233 
234 
     | 
    
         
             
                    parsed = JSON.parse(response.body)
         
     | 
| 
       234 
235 
     | 
    
         
             
                    LOG.debug parsed['body']
         
     | 
| 
       235 
236 
     | 
    
         
             
                    assert_equal msg, parsed['body']
         
     | 
| 
       236 
     | 
    
         
            -
                     
     | 
| 
      
 237 
     | 
    
         
            +
                    refute_nil parsed['headers']['Content-Type']
         
     | 
| 
       237 
238 
     | 
    
         
             
                    assert_equal 'application/json', parsed['headers']['Content-Type']
         
     | 
| 
       238 
239 
     | 
    
         
             
                    break
         
     | 
| 
       239 
240 
     | 
    
         
             
                  rescue Rest::HttpError => ex
         
     | 
| 
       240 
241 
     | 
    
         
             
                    LOG.debug ex.code
         
     | 
| 
       241 
242 
     | 
    
         
             
                    assert_equal 404, ex.code
         
     | 
| 
       242 
243 
     | 
    
         
             
                  end
         
     | 
| 
       243 
     | 
    
         
            -
                   
     | 
| 
      
 244 
     | 
    
         
            +
                  refute_equal tries, 0
         
     | 
| 
       244 
245 
     | 
    
         
             
                end
         
     | 
| 
       245 
246 
     | 
    
         | 
| 
       246 
247 
     | 
    
         
             
                # delete queue after all tests on it were completed
         
     | 
| 
         @@ -251,22 +252,24 @@ class TestPushQueues < TestBase 
     | 
|
| 
       251 
252 
     | 
    
         | 
| 
       252 
253 
     | 
    
         
             
              def test_failure
         
     | 
| 
       253 
254 
     | 
    
         
             
                @rest = Rest::Client.new
         
     | 
| 
       254 
     | 
    
         
            -
                qname = "failure-queue"
         
     | 
| 
       255 
255 
     | 
    
         | 
| 
       256 
256 
     | 
    
         
             
                x = rand(1000)
         
     | 
| 
      
 257 
     | 
    
         
            +
                qname = "failure-queue_#{x}"
         
     | 
| 
       257 
258 
     | 
    
         | 
| 
       258 
259 
     | 
    
         
             
                subscribers = []
         
     | 
| 
       259 
     | 
    
         
            -
                subscribers << {: 
     | 
| 
       260 
     | 
    
         
            -
             
     | 
| 
      
 260 
     | 
    
         
            +
                subscribers << {url: "http://rest-test.iron.io/code/503?switch_after=2&switch_to=200&namespace=push-test-failures-#{x}",
         
     | 
| 
      
 261 
     | 
    
         
            +
                                name: "name#{x}"}
         
     | 
| 
      
 262 
     | 
    
         
            +
                subscribers << {url: "http://rest-test.iron.io/code/503",
         
     | 
| 
      
 263 
     | 
    
         
            +
                                name: "name_#{Time.now.to_i}"}
         
     | 
| 
       261 
264 
     | 
    
         | 
| 
       262 
265 
     | 
    
         
             
                num_subscribers = 2
         
     | 
| 
       263 
266 
     | 
    
         | 
| 
       264 
     | 
    
         
            -
                 
     | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
       266 
     | 
    
         
            -
                                         : 
     | 
| 
       267 
     | 
    
         
            -
                                         : 
     | 
| 
       268 
     | 
    
         
            -
                                         : 
     | 
| 
       269 
     | 
    
         
            -
             
     | 
| 
      
 267 
     | 
    
         
            +
                @client.create_queue(qname, {type: 'multicast',
         
     | 
| 
      
 268 
     | 
    
         
            +
                                     push: {
         
     | 
| 
      
 269 
     | 
    
         
            +
                                         subscribers: subscribers,
         
     | 
| 
      
 270 
     | 
    
         
            +
                                         retries: 3,
         
     | 
| 
      
 271 
     | 
    
         
            +
                                         retries_delay: 3
         
     | 
| 
      
 272 
     | 
    
         
            +
                                     }})
         
     | 
| 
       270 
273 
     | 
    
         
             
                queue = @client.queue(qname)
         
     | 
| 
       271 
274 
     | 
    
         
             
                LOG.debug queue
         
     | 
| 
       272 
275 
     | 
    
         
             
                LOG.debug queue.subscribers
         
     | 
| 
         @@ -281,7 +284,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       281 
284 
     | 
    
         
             
                  sleep 0.5
         
     | 
| 
       282 
285 
     | 
    
         
             
                  tries -= 1
         
     | 
| 
       283 
286 
     | 
    
         
             
                  LOG.info 'getting status'
         
     | 
| 
       284 
     | 
    
         
            -
                  subscribers = queue. 
     | 
| 
      
 287 
     | 
    
         
            +
                  subscribers = queue.get_message(m.id).subscribers
         
     | 
| 
       285 
288 
     | 
    
         
             
                  LOG.debug subscribers
         
     | 
| 
       286 
289 
     | 
    
         
             
                  LOG.info "num_subscribers=#{num_subscribers} subscribers.size=#{subscribers.size}"
         
     | 
| 
       287 
290 
     | 
    
         | 
| 
         @@ -297,14 +300,14 @@ class TestPushQueues < TestBase 
     | 
|
| 
       297 
300 
     | 
    
         
             
                  next if do_retry
         
     | 
| 
       298 
301 
     | 
    
         
             
                  break
         
     | 
| 
       299 
302 
     | 
    
         
             
                end
         
     | 
| 
       300 
     | 
    
         
            -
                 
     | 
| 
      
 303 
     | 
    
         
            +
                assert_equal tries, 0
         
     | 
| 
       301 
304 
     | 
    
         | 
| 
       302 
305 
     | 
    
         
             
                tries = MAX_TRIES
         
     | 
| 
       303 
306 
     | 
    
         
             
                while tries > 0
         
     | 
| 
       304 
307 
     | 
    
         
             
                  puts 'sleeping for 5 to wait for retry'
         
     | 
| 
       305 
308 
     | 
    
         
             
                  sleep 5
         
     | 
| 
       306 
309 
     | 
    
         
             
                  tries -= 1
         
     | 
| 
       307 
     | 
    
         
            -
                  subscribers = queue. 
     | 
| 
      
 310 
     | 
    
         
            +
                  subscribers = queue.get_message(m.id).subscribers
         
     | 
| 
       308 
311 
     | 
    
         
             
                  LOG.debug subscribers
         
     | 
| 
       309 
312 
     | 
    
         
             
                  assert_equal num_subscribers, subscribers.size
         
     | 
| 
       310 
313 
     | 
    
         
             
                  do_retry = false
         
     | 
| 
         @@ -330,7 +333,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       330 
333 
     | 
    
         
             
                  next if do_retry
         
     | 
| 
       331 
334 
     | 
    
         
             
                  break
         
     | 
| 
       332 
335 
     | 
    
         
             
                end
         
     | 
| 
       333 
     | 
    
         
            -
                 
     | 
| 
      
 336 
     | 
    
         
            +
                assert_equal tries, 0
         
     | 
| 
       334 
337 
     | 
    
         | 
| 
       335 
338 
     | 
    
         
             
                # delete queue on test complete
         
     | 
| 
       336 
339 
     | 
    
         
             
                resp = queue.delete_queue
         
     | 
| 
         @@ -339,13 +342,13 @@ class TestPushQueues < TestBase 
     | 
|
| 
       339 
342 
     | 
    
         | 
| 
       340 
343 
     | 
    
         | 
| 
       341 
344 
     | 
    
         
             
              def test_202
         
     | 
| 
       342 
     | 
    
         
            -
                puts " 
     | 
| 
      
 345 
     | 
    
         
            +
                puts "test_202_#{Time.now.to_i}"
         
     | 
| 
       343 
346 
     | 
    
         
             
                types = ["multicast"]
         
     | 
| 
       344 
347 
     | 
    
         
             
                types.each do |t|
         
     | 
| 
       345 
348 
     | 
    
         | 
| 
       346 
349 
     | 
    
         
             
                  LOG.info "Trying type #{t}"
         
     | 
| 
       347 
350 
     | 
    
         | 
| 
       348 
     | 
    
         
            -
                  qname = "subscription-queue-#{ 
     | 
| 
      
 351 
     | 
    
         
            +
                  qname = "subscription-queue-#{Time.now.to_i}"
         
     | 
| 
       349 
352 
     | 
    
         | 
| 
       350 
353 
     | 
    
         
             
                  num_subscribers = 2
         
     | 
| 
       351 
354 
     | 
    
         
             
                  subscribers = []
         
     | 
| 
         @@ -353,20 +356,20 @@ class TestPushQueues < TestBase 
     | 
|
| 
       353 
356 
     | 
    
         
             
                  x = rand(1000)
         
     | 
| 
       354 
357 
     | 
    
         
             
                  num_subscribers.times do |i|
         
     | 
| 
       355 
358 
     | 
    
         
             
                    key = make_key(i, t, x)
         
     | 
| 
       356 
     | 
    
         
            -
                    subscribers << {: 
     | 
| 
      
 359 
     | 
    
         
            +
                    subscribers << {url: "http://test.iron.io/code/202?store=#{key}", name: "name_#{key}"}
         
     | 
| 
       357 
360 
     | 
    
         
             
                  end
         
     | 
| 
       358 
361 
     | 
    
         | 
| 
      
 362 
     | 
    
         
            +
                  res = @client.create_queue(qname, {type: t,
         
     | 
| 
      
 363 
     | 
    
         
            +
                                                     push: {subscribers: subscribers}})
         
     | 
| 
       359 
364 
     | 
    
         
             
                  queue = @client.queue(qname)
         
     | 
| 
       360 
     | 
    
         
            -
                  res = queue.update_queue(:subscribers => subscribers,
         
     | 
| 
       361 
     | 
    
         
            -
                                           :push_type => t)
         
     | 
| 
       362 
365 
     | 
    
         | 
| 
       363 
366 
     | 
    
         
             
                  queue.reload
         
     | 
| 
       364 
367 
     | 
    
         
             
                  LOG.debug queue
         
     | 
| 
       365 
368 
     | 
    
         
             
                  queue = @client.queue(qname)
         
     | 
| 
       366 
369 
     | 
    
         | 
| 
       367 
370 
     | 
    
         
             
                  assert_equal num_subscribers, queue.subscribers.size
         
     | 
| 
       368 
     | 
    
         
            -
                  assert_equal t, queue. 
     | 
| 
       369 
     | 
    
         
            -
                  puts "queue.push_type: #{queue. 
     | 
| 
      
 371 
     | 
    
         
            +
                  assert_equal t, queue.type
         
     | 
| 
      
 372 
     | 
    
         
            +
                  puts "queue.push_type: #{queue.type}"
         
     | 
| 
       370 
373 
     | 
    
         
             
                  # todo: assert subscriptions match
         
     | 
| 
       371 
374 
     | 
    
         | 
| 
       372 
375 
     | 
    
         
             
                  msg = "hello #{x}"
         
     | 
| 
         @@ -376,7 +379,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       376 
379 
     | 
    
         
             
                  while tries > 0
         
     | 
| 
       377 
380 
     | 
    
         
             
                    sleep 0.5
         
     | 
| 
       378 
381 
     | 
    
         
             
                    tries -= 1
         
     | 
| 
       379 
     | 
    
         
            -
                    subscribers = queue. 
     | 
| 
      
 382 
     | 
    
         
            +
                    subscribers = queue.get_message(m.id).subscribers
         
     | 
| 
       380 
383 
     | 
    
         
             
                    LOG.debug subscribers
         
     | 
| 
       381 
384 
     | 
    
         
             
                    assert_equal num_subscribers, subscribers.size
         
     | 
| 
       382 
385 
     | 
    
         
             
                    do_retry = false
         
     | 
| 
         @@ -388,7 +391,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       388 
391 
     | 
    
         
             
                    next if do_retry
         
     | 
| 
       389 
392 
     | 
    
         
             
                    break
         
     | 
| 
       390 
393 
     | 
    
         
             
                  end
         
     | 
| 
       391 
     | 
    
         
            -
                   
     | 
| 
      
 394 
     | 
    
         
            +
                  assert_equal tries, 0
         
     | 
| 
       392 
395 
     | 
    
         | 
| 
       393 
396 
     | 
    
         
             
                  LOG.info 'sleeping 2'
         
     | 
| 
       394 
397 
     | 
    
         
             
                  sleep 2
         
     | 
| 
         @@ -396,10 +399,10 @@ class TestPushQueues < TestBase 
     | 
|
| 
       396 
399 
     | 
    
         
             
                  tries = MAX_TRIES
         
     | 
| 
       397 
400 
     | 
    
         
             
                  while tries > 0
         
     | 
| 
       398 
401 
     | 
    
         
             
                    sleep 0.5
         
     | 
| 
       399 
     | 
    
         
            -
                    subscribers = queue. 
     | 
| 
      
 402 
     | 
    
         
            +
                    subscribers = queue.get_message(m.id).subscribers
         
     | 
| 
       400 
403 
     | 
    
         
             
                    LOG.debug subscribers
         
     | 
| 
       401 
404 
     | 
    
         
             
                    assert_equal num_subscribers, subscribers.size
         
     | 
| 
       402 
     | 
    
         
            -
                    assert_equal t, queue. 
     | 
| 
      
 405 
     | 
    
         
            +
                    assert_equal t, queue.type
         
     | 
| 
       403 
406 
     | 
    
         | 
| 
       404 
407 
     | 
    
         
             
                    do_retry = false
         
     | 
| 
       405 
408 
     | 
    
         
             
                    subscribers.each do |s|
         
     | 
| 
         @@ -423,13 +426,13 @@ class TestPushQueues < TestBase 
     | 
|
| 
       423 
426 
     | 
    
         
             
                    end
         
     | 
| 
       424 
427 
     | 
    
         
             
                    break
         
     | 
| 
       425 
428 
     | 
    
         
             
                  end
         
     | 
| 
       426 
     | 
    
         
            -
                   
     | 
| 
      
 429 
     | 
    
         
            +
                  refute_equal 0, tries
         
     | 
| 
       427 
430 
     | 
    
         | 
| 
       428 
431 
     | 
    
         
             
                  tries = MAX_TRIES
         
     | 
| 
       429 
432 
     | 
    
         
             
                  while tries > 0
         
     | 
| 
       430 
433 
     | 
    
         
             
                    sleep 0.5
         
     | 
| 
       431 
434 
     | 
    
         
             
                    tries -= 1
         
     | 
| 
       432 
     | 
    
         
            -
                    subscribers = queue. 
     | 
| 
      
 435 
     | 
    
         
            +
                    subscribers = queue.get_message(m.id).subscribers
         
     | 
| 
       433 
436 
     | 
    
         
             
                    LOG.debug subscribers
         
     | 
| 
       434 
437 
     | 
    
         
             
                    next unless num_subscribers == subscribers.size
         
     | 
| 
       435 
438 
     | 
    
         | 
| 
         @@ -442,7 +445,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       442 
445 
     | 
    
         
             
                    next if do_retry
         
     | 
| 
       443 
446 
     | 
    
         
             
                    break
         
     | 
| 
       444 
447 
     | 
    
         
             
                  end
         
     | 
| 
       445 
     | 
    
         
            -
                   
     | 
| 
      
 448 
     | 
    
         
            +
                  refute_equal 0, tries
         
     | 
| 
       446 
449 
     | 
    
         | 
| 
       447 
450 
     | 
    
         
             
                  # delete queue on test complete
         
     | 
| 
       448 
451 
     | 
    
         
             
                  resp = queue.delete_queue
         
     | 
| 
         @@ -451,14 +454,15 @@ class TestPushQueues < TestBase 
     | 
|
| 
       451 
454 
     | 
    
         
             
              end
         
     | 
| 
       452 
455 
     | 
    
         | 
| 
       453 
456 
     | 
    
         
             
              def test_post_and_instantiate
         
     | 
| 
       454 
     | 
    
         
            -
                 
     | 
| 
      
 457 
     | 
    
         
            +
                qname = "push_and_instantiate#{Time.now.to_i}"
         
     | 
| 
       455 
458 
     | 
    
         | 
| 
       456 
     | 
    
         
            -
                subscribers = [{:url => "http://rest-test.iron.io/code/200"},
         
     | 
| 
       457 
     | 
    
         
            -
                               {:url => "http://rest-test.iron.io/code/200"}]
         
     | 
| 
      
 459 
     | 
    
         
            +
                subscribers = [{:url => "http://rest-test.iron.io/code/200", name: "name#{Time.now.to_i}"},
         
     | 
| 
      
 460 
     | 
    
         
            +
                               {:url => "http://rest-test.iron.io/code/200",name: "name#{Time.now.to_i}"}]
         
     | 
| 
       458 
461 
     | 
    
         | 
| 
       459 
     | 
    
         
            -
                res =  
     | 
| 
       460 
     | 
    
         
            -
             
     | 
| 
      
 462 
     | 
    
         
            +
                res = @client.create_queue(qname, {type: 'multicast',
         
     | 
| 
      
 463 
     | 
    
         
            +
                                                   push: {subscribers: subscribers}})
         
     | 
| 
       461 
464 
     | 
    
         | 
| 
      
 465 
     | 
    
         
            +
                queue = @client.queue(qname)
         
     | 
| 
       462 
466 
     | 
    
         
             
                expected_size = subscribers.size
         
     | 
| 
       463 
467 
     | 
    
         
             
                got_size = queue.subscribers.size
         
     | 
| 
       464 
468 
     | 
    
         
             
                assert_equal expected_size, got_size, "queue's subscribers list must contain #{expected_size} elements, but got #{got_size}"
         
     | 
| 
         @@ -470,45 +474,13 @@ class TestPushQueues < TestBase 
     | 
|
| 
       470 
474 
     | 
    
         | 
| 
       471 
475 
     | 
    
         
             
                sleep 5
         
     | 
| 
       472 
476 
     | 
    
         | 
| 
       473 
     | 
    
         
            -
                msgs.each do |msg|
         
     | 
| 
       474 
     | 
    
         
            -
                  subscr_arr = msg.subscribers
         
     | 
| 
       475 
     | 
    
         
            -
                  subscr_arr.each do |s|
         
     | 
| 
       476 
     | 
    
         
            -
                    assert_instance_of(IronMQ::Subscriber, s, "message must return `Subscriber`, but got `#{s.class}`")
         
     | 
| 
       477 
     | 
    
         
            -
                    rsp = s.delete
         
     | 
| 
       478 
     | 
    
         
            -
                    assert_equal 200, rsp.code, "API must response with HTTP 200 status, but returned HTTP #{rsp.code}"
         
     | 
| 
       479 
     | 
    
         
            -
                  end
         
     | 
| 
       480 
     | 
    
         
            -
                end
         
     | 
| 
       481 
     | 
    
         
            -
             
     | 
| 
       482 
477 
     | 
    
         
             
                resp = queue.delete_queue
         
     | 
| 
       483 
478 
     | 
    
         
             
                assert_equal 200, resp.code, "API must response with HTTP 200 status, but returned HTTP #{resp.code}"
         
     | 
| 
       484 
479 
     | 
    
         
             
              end
         
     | 
| 
       485 
480 
     | 
    
         | 
| 
       486 
     | 
    
         
            -
             
     | 
| 
       487 
     | 
    
         
            -
            # tests when converting a push queue back to a pull queue
         
     | 
| 
       488 
     | 
    
         
            -
              def test_converting_types
         
     | 
| 
       489 
     | 
    
         
            -
                queue = @client.queue('converting_queue')
         
     | 
| 
       490 
     | 
    
         
            -
                subscribers = [{:url => "http://rest-test.iron.io/code/200"},
         
     | 
| 
       491 
     | 
    
         
            -
                               {:url => "http://rest-test.iron.io/code/200"}]
         
     | 
| 
       492 
     | 
    
         
            -
             
     | 
| 
       493 
     | 
    
         
            -
                res = queue.update_queue(:subscribers => subscribers,
         
     | 
| 
       494 
     | 
    
         
            -
                                         :push_type => 'multicast')
         
     | 
| 
       495 
     | 
    
         
            -
                queue.reload
         
     | 
| 
       496 
     | 
    
         
            -
             
     | 
| 
       497 
     | 
    
         
            -
                assert_equal "multicast", queue.push_type
         
     | 
| 
       498 
     | 
    
         
            -
             
     | 
| 
       499 
     | 
    
         
            -
                p queue.update_queue(:push_type => 'pull')
         
     | 
| 
       500 
     | 
    
         
            -
             
     | 
| 
       501 
     | 
    
         
            -
                queue.reload
         
     | 
| 
       502 
     | 
    
         
            -
             
     | 
| 
       503 
     | 
    
         
            -
                p queue.push_type
         
     | 
| 
       504 
     | 
    
         
            -
             
     | 
| 
       505 
     | 
    
         
            -
                assert_nil queue.push_type
         
     | 
| 
       506 
     | 
    
         
            -
             
     | 
| 
       507 
     | 
    
         
            -
              end
         
     | 
| 
       508 
     | 
    
         
            -
             
     | 
| 
       509 
481 
     | 
    
         
             
              def test_error_queues
         
     | 
| 
       510 
482 
     | 
    
         
             
                @rest = Rest::Client.new
         
     | 
| 
       511 
     | 
    
         
            -
                qname = "badrobot"
         
     | 
| 
      
 483 
     | 
    
         
            +
                qname = "badrobot#{Time.now.to_i}"
         
     | 
| 
       512 
484 
     | 
    
         
             
                error_queue_name = "#{qname}--errors"
         
     | 
| 
       513 
485 
     | 
    
         
             
                clear_queue(qname)
         
     | 
| 
       514 
486 
     | 
    
         
             
                clear_queue(error_queue_name)
         
     | 
| 
         @@ -516,18 +488,17 @@ class TestPushQueues < TestBase 
     | 
|
| 
       516 
488 
     | 
    
         
             
                x = rand(1000)
         
     | 
| 
       517 
489 
     | 
    
         | 
| 
       518 
490 
     | 
    
         
             
                subscribers = []
         
     | 
| 
       519 
     | 
    
         
            -
                subscribers << {:url => "http://rest-test.iron.io/code/503"}
         
     | 
| 
      
 491 
     | 
    
         
            +
                subscribers << {:url => "http://rest-test.iron.io/code/503", name: "name_#{Time.now.to_i}"}
         
     | 
| 
       520 
492 
     | 
    
         
             
                subscriber_urls = subscribers
         
     | 
| 
       521 
493 
     | 
    
         
             
                num_subscribers = subscribers.size
         
     | 
| 
       522 
494 
     | 
    
         | 
| 
      
 495 
     | 
    
         
            +
                res = @client.create_queue(qname, push: {
         
     | 
| 
      
 496 
     | 
    
         
            +
                    subscribers: subscribers,
         
     | 
| 
      
 497 
     | 
    
         
            +
                    retries: 3,
         
     | 
| 
      
 498 
     | 
    
         
            +
                    retries_delay: 3,
         
     | 
| 
      
 499 
     | 
    
         
            +
                    error_queue: error_queue_name
         
     | 
| 
      
 500 
     | 
    
         
            +
                })
         
     | 
| 
       523 
501 
     | 
    
         
             
                queue = @client.queue(qname)
         
     | 
| 
       524 
     | 
    
         
            -
                res = queue.update_queue(:subscribers => subscribers,
         
     | 
| 
       525 
     | 
    
         
            -
                                         :push_type => "multicast",
         
     | 
| 
       526 
     | 
    
         
            -
                                         :retries => 3,
         
     | 
| 
       527 
     | 
    
         
            -
                                         :retries_delay => 3
         
     | 
| 
       528 
     | 
    
         
            -
                )
         
     | 
| 
       529 
     | 
    
         
            -
                res = queue.update_queue(:error_queue => error_queue_name)
         
     | 
| 
       530 
     | 
    
         
            -
             
     | 
| 
       531 
502 
     | 
    
         
             
                msg = "hello #{x}"
         
     | 
| 
       532 
503 
     | 
    
         
             
                puts "Pushing msg: #{msg}"
         
     | 
| 
       533 
504 
     | 
    
         
             
                m = queue.post(msg)
         
     | 
| 
         @@ -540,7 +511,7 @@ class TestPushQueues < TestBase 
     | 
|
| 
       540 
511 
     | 
    
         
             
                  puts 'sleeping for 5 to wait for retry'
         
     | 
| 
       541 
512 
     | 
    
         
             
                  sleep 5
         
     | 
| 
       542 
513 
     | 
    
         
             
                  tries -= 1
         
     | 
| 
       543 
     | 
    
         
            -
                  subscribers = queue. 
     | 
| 
      
 514 
     | 
    
         
            +
                  subscribers = queue.get_message(m.id).subscribers
         
     | 
| 
       544 
515 
     | 
    
         
             
                  LOG.debug subscribers
         
     | 
| 
       545 
516 
     | 
    
         
             
                  assert_equal num_subscribers, subscribers.size
         
     | 
| 
       546 
517 
     | 
    
         
             
                  do_retry = false
         
     | 
| 
         @@ -566,20 +537,18 @@ class TestPushQueues < TestBase 
     | 
|
| 
       566 
537 
     | 
    
         
             
                  next if do_retry
         
     | 
| 
       567 
538 
     | 
    
         
             
                  break
         
     | 
| 
       568 
539 
     | 
    
         
             
                end
         
     | 
| 
       569 
     | 
    
         
            -
                assert_not_equal tries, 0
         
     | 
| 
       570 
540 
     | 
    
         | 
| 
       571 
541 
     | 
    
         
             
                # check that the failed messages is in the error queue
         
     | 
| 
       572 
542 
     | 
    
         
             
                error_queue = @client.queue(error_queue_name)
         
     | 
| 
       573 
543 
     | 
    
         
             
                em = error_queue.get
         
     | 
| 
       574 
     | 
    
         
            -
                 
     | 
| 
      
 544 
     | 
    
         
            +
                refute_nil em
         
     | 
| 
       575 
545 
     | 
    
         
             
                puts "rawbody: " + em.body
         
     | 
| 
       576 
546 
     | 
    
         
             
                error_hash = JSON.parse(em.body)
         
     | 
| 
       577 
     | 
    
         
            -
                p error_hash
         
     | 
| 
       578 
547 
     | 
    
         
             
                assert error_hash['subscribers']
         
     | 
| 
       579 
548 
     | 
    
         
             
                assert_equal subscriber_urls[0][:url], error_hash['subscribers'][0]['url']
         
     | 
| 
       580 
     | 
    
         
            -
                assert_equal 503, error_hash['code']
         
     | 
| 
      
 549 
     | 
    
         
            +
                assert_equal 503, error_hash['subscribers'][0]['code']
         
     | 
| 
       581 
550 
     | 
    
         
             
                assert_equal orig_id, error_hash['source_msg_id']
         
     | 
| 
       582 
     | 
    
         
            -
                 
     | 
| 
      
 551 
     | 
    
         
            +
                refute_nil error_hash['subscribers'][0]['msg']
         
     | 
| 
       583 
552 
     | 
    
         
             
                em.delete
         
     | 
| 
       584 
553 
     | 
    
         | 
| 
       585 
554 
     | 
    
         
             
                # now let's get the original message
         
     |