iron_mq 4.0.5 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +17 -16
- data/lib/iron_mq/alert.rb +10 -6
- data/lib/iron_mq/queues.rb +3 -9
- data/lib/iron_mq/subscribers.rb +8 -0
- data/lib/iron_mq/version.rb +2 -1
- data/test/test_alerts.rb +189 -102
- data/test/test_push_queues.rb +110 -11
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f1f8bd2435758c3f0e785860745e53693f420dd
|
4
|
+
data.tar.gz: 8c528651911fbab189d39f2517a6916ccff76455
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dff00f9dc21895c394d2b0b03fd37e4cc3994d80b980ac9ac1e56c4169c07b540f42df0a07ae02eb3015261695de0bfeb8bd55655ec2024c092d033122254493
|
7
|
+
data.tar.gz: f55c54ab596adc06964a1209b7ed5bef4c09c4ce4013dcedeec0a6d234489c8abbd28834acfd7320d06f50704ae7fd232b4b7990ac35d064c77337e109efc762
|
data/Gemfile.lock
CHANGED
@@ -9,33 +9,34 @@ GEM
|
|
9
9
|
specs:
|
10
10
|
beanstalk-client (1.1.1)
|
11
11
|
concur (2.1.1)
|
12
|
-
ethon (0.6.
|
12
|
+
ethon (0.6.2)
|
13
13
|
ffi (>= 1.3.0)
|
14
14
|
mime-types (~> 1.18)
|
15
|
-
ffi (1.9.
|
15
|
+
ffi (1.9.3)
|
16
16
|
go (1.1.0)
|
17
17
|
concur
|
18
|
-
iron_core (1.0.
|
19
|
-
rest (>= 2.
|
20
|
-
iron_worker_ng (1.0.
|
21
|
-
bundler
|
18
|
+
iron_core (1.0.3)
|
19
|
+
rest (>= 2.6.4)
|
20
|
+
iron_worker_ng (1.0.4)
|
21
|
+
bundler
|
22
22
|
iron_core (>= 1.0.0)
|
23
23
|
rubyzip (= 0.9.9)
|
24
|
-
mime-types (1.25)
|
25
|
-
minitest (5.
|
24
|
+
mime-types (1.25.1)
|
25
|
+
minitest (5.2.1)
|
26
26
|
net-http-persistent (2.9)
|
27
|
+
netrc (0.7.7)
|
27
28
|
quicky (0.4.0)
|
28
|
-
rake (10.1.
|
29
|
-
rest (2.
|
29
|
+
rake (10.1.1)
|
30
|
+
rest (2.7.0)
|
30
31
|
net-http-persistent
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
rest_client (>= 1.7.1)
|
33
|
+
rest_client (1.7.2)
|
34
|
+
netrc (~> 0.7.7)
|
34
35
|
rubyzip (0.9.9)
|
35
36
|
test-unit (2.5.5)
|
36
|
-
typhoeus (0.6.
|
37
|
-
ethon (~> 0.6.
|
38
|
-
uber_config (1.0
|
37
|
+
typhoeus (0.6.7)
|
38
|
+
ethon (~> 0.6.2)
|
39
|
+
uber_config (1.1.0)
|
39
40
|
|
40
41
|
PLATFORMS
|
41
42
|
ruby
|
data/lib/iron_mq/alert.rb
CHANGED
@@ -11,21 +11,25 @@ module IronMQ
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def id
|
14
|
-
@raw[
|
14
|
+
@raw['id']
|
15
15
|
end
|
16
16
|
|
17
17
|
# alert type
|
18
18
|
def type
|
19
|
-
@raw[
|
19
|
+
@raw['type']
|
20
20
|
end
|
21
21
|
|
22
22
|
# target queue
|
23
23
|
def queue
|
24
|
-
@raw[
|
24
|
+
@raw['queue']
|
25
25
|
end
|
26
26
|
|
27
27
|
def trigger
|
28
|
-
@raw[
|
28
|
+
@raw['trigger']
|
29
|
+
end
|
30
|
+
|
31
|
+
def direction
|
32
|
+
@raw['direction']
|
29
33
|
end
|
30
34
|
|
31
35
|
# `options` was kept for backward compatibility
|
@@ -33,9 +37,9 @@ module IronMQ
|
|
33
37
|
@message.call_api_and_parse_response(:delete, path)
|
34
38
|
rescue Rest::HttpError => ex
|
35
39
|
if ex.code == 404
|
36
|
-
IronCore::Logger.info(
|
40
|
+
IronCore::Logger.info('IronMQ', 'Delete got 404, safe to ignore.')
|
37
41
|
# return ResponseBase as normal
|
38
|
-
ResponseBase.new({
|
42
|
+
ResponseBase.new({'msg' => 'Deleted'}, 404)
|
39
43
|
else
|
40
44
|
raise ex
|
41
45
|
end
|
data/lib/iron_mq/queues.rb
CHANGED
@@ -8,7 +8,6 @@ module IronMQ
|
|
8
8
|
def initialize(client, queue_name)
|
9
9
|
@client = client
|
10
10
|
@name = queue_name
|
11
|
-
|
12
11
|
end
|
13
12
|
|
14
13
|
def info
|
@@ -17,9 +16,8 @@ module IronMQ
|
|
17
16
|
|
18
17
|
# this is only run once if it hasn't been called before unless force is true, then it will force reload.
|
19
18
|
def load
|
20
|
-
if @raw.nil?
|
21
|
-
|
22
|
-
end
|
19
|
+
reload if @raw.nil?
|
20
|
+
|
23
21
|
@raw
|
24
22
|
end
|
25
23
|
|
@@ -243,11 +241,7 @@ module IronMQ
|
|
243
241
|
private
|
244
242
|
|
245
243
|
def to_alerts(alert_array)
|
246
|
-
|
247
|
-
alert_array.each do |a|
|
248
|
-
r << Alert.new(self, a)
|
249
|
-
end
|
250
|
-
r
|
244
|
+
alert_array.each_with_object([]) { |a, res| res << Alert.new(self, a) }
|
251
245
|
end
|
252
246
|
|
253
247
|
def path(ext_path)
|
data/lib/iron_mq/subscribers.rb
CHANGED
@@ -10,6 +10,14 @@ module IronMQ
|
|
10
10
|
@options = options
|
11
11
|
end
|
12
12
|
|
13
|
+
def url
|
14
|
+
@raw['url']
|
15
|
+
end
|
16
|
+
|
17
|
+
def headers
|
18
|
+
@raw['headers']
|
19
|
+
end
|
20
|
+
|
13
21
|
# `options` was kept for backward compatibility
|
14
22
|
def delete(options = {})
|
15
23
|
@message.call_api_and_parse_response(:delete, path)
|
data/lib/iron_mq/version.rb
CHANGED
data/test/test_alerts.rb
CHANGED
@@ -13,130 +13,217 @@ class TestAlerts < TestBase
|
|
13
13
|
def test_size_alerts
|
14
14
|
return if @skip
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
#
|
16
|
+
type = 'size'
|
17
|
+
trigger = 10
|
18
|
+
# Test size alets, direction is ascending
|
19
|
+
queue, alert_queue = clear_queue_add_alert(type, trigger, 'asc')
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
clear_queue(qname)
|
23
|
-
queue = @client.queue(qname)
|
24
|
-
puts "queue: #{queue}"
|
25
|
-
trigger_value = 10
|
26
|
-
# todo: should :queue be called something else, like target_queue? or url and have to use ironmq:// url?
|
27
|
-
target_queue_name = "alert-target-queue-#{x}"
|
28
|
-
r = queue.add_alert({:type => "size", :trigger => trigger_value, :queue => target_queue_name})
|
29
|
-
p r
|
21
|
+
# queue size will be trigger + 3
|
22
|
+
trigger_alert(queue, alert_queue, trigger, 3)
|
30
23
|
|
31
|
-
|
32
|
-
|
33
|
-
assert_equal 1,
|
34
|
-
alert = alerts[0]
|
35
|
-
assert_equal "size", alert.type
|
36
|
-
assert_equal trigger_value, alert.trigger
|
37
|
-
assert_equal target_queue_name, alert.queue
|
24
|
+
# must not trigger alert, queue size will be trigger + 13
|
25
|
+
post_messages(queue, 10)
|
26
|
+
assert_equal 1, get_queue_size(alert_queue)
|
38
27
|
|
39
|
-
|
40
|
-
|
28
|
+
# must not trigger alert, queue size will be trigger - 3
|
29
|
+
delete_messages(queue, 16)
|
30
|
+
assert_equal 1, get_queue_size(alert_queue)
|
41
31
|
|
42
|
-
(
|
43
|
-
puts "posting #{i}"
|
44
|
-
queue.post("message #{i}")
|
45
|
-
end
|
46
|
-
sleep 0.5
|
47
|
-
assert_equal 0, target_queue.size
|
48
|
-
queue.post("message #{trigger_value}")
|
49
|
-
sleep 0.5
|
50
|
-
assert_equal trigger_value, queue.size
|
51
|
-
assert_equal 1, target_queue.size
|
52
|
-
|
53
|
-
# now let's get it down the reset point and trigger it again
|
54
|
-
(trigger_value / 2).times do |i|
|
55
|
-
m = queue.get
|
56
|
-
m.delete
|
57
|
-
end
|
58
|
-
assert_equal trigger_value/2, queue.size
|
59
|
-
assert_equal 1, target_queue.size
|
32
|
+
trigger_alert(queue, alert_queue, trigger)
|
60
33
|
|
61
|
-
|
62
|
-
(trigger_value / 2).times do |i|
|
63
|
-
queue.post("second set: message #{i}")
|
64
|
-
end
|
65
|
-
sleep 0.5
|
66
|
-
assert_equal trigger_value, queue.size
|
67
|
-
assert_equal 2, target_queue.size
|
34
|
+
delete_queues(queue, alert_queue)
|
68
35
|
|
69
|
-
|
70
|
-
|
36
|
+
# Test size alerts, direction is descending
|
37
|
+
queue, alert_queue = clear_queue_add_alert(type, trigger, 'desc')
|
71
38
|
|
72
|
-
|
39
|
+
# must not trigger descending alert
|
40
|
+
post_messages(queue, 15)
|
41
|
+
assert_equal 0, get_queue_size(alert_queue)
|
42
|
+
|
43
|
+
# will remove 5 msgs, queue size will be 10
|
44
|
+
trigger_alert(queue, alert_queue, trigger)
|
45
|
+
|
46
|
+
# must not trigger alert
|
47
|
+
post_messages(queue, 12)
|
48
|
+
assert_equal 1, get_queue_size(alert_queue)
|
49
|
+
|
50
|
+
trigger_alert(queue, alert_queue, trigger)
|
51
|
+
|
52
|
+
# must not trigger alert
|
53
|
+
delete_messages(queue, 8)
|
54
|
+
assert_equal 2, get_queue_size(alert_queue)
|
55
|
+
|
56
|
+
delete_queues(queue, alert_queue)
|
57
|
+
|
58
|
+
# Test size alerts, direction is "both"
|
59
|
+
queue, alert_queue = clear_queue_add_alert(type, trigger, 'both')
|
73
60
|
|
61
|
+
# trigger ascending alert
|
62
|
+
trigger_alert(queue, alert_queue, trigger)
|
63
|
+
|
64
|
+
# must not trigger alert
|
65
|
+
post_messages(queue, 8)
|
66
|
+
assert_equal 1, get_queue_size(alert_queue)
|
67
|
+
|
68
|
+
# trigger descending alert, queue size will be trigger - 3
|
69
|
+
trigger_alert(queue, alert_queue, trigger, 3)
|
70
|
+
|
71
|
+
# trigger ascending alert, queue size will be trigger + 3
|
72
|
+
trigger_alert(queue, alert_queue, trigger, 3)
|
73
|
+
|
74
|
+
delete_queues(queue, alert_queue)
|
75
|
+
end
|
74
76
|
|
75
77
|
def test_progressive_alerts
|
76
78
|
return if @skip
|
77
79
|
|
78
|
-
|
79
|
-
|
80
|
-
#
|
80
|
+
type = 'progressive'
|
81
|
+
trigger = 10
|
82
|
+
# Test ascending progressive alert
|
83
|
+
queue, alert_queue = clear_queue_add_alert(type, trigger, 'asc')
|
84
|
+
|
85
|
+
# Trigger 3 alerts
|
86
|
+
(1..3).each { |n| trigger_alert(queue, alert_queue, n * trigger) }
|
87
|
+
|
88
|
+
# Must not trigger alerts
|
89
|
+
delete_messages(queue, 15)
|
90
|
+
assert_equal 3, get_queue_size(alert_queue)
|
91
|
+
|
92
|
+
trig = (get_queue_size(queue) / trigger.to_f).ceil * trigger
|
93
|
+
trigger_alert(queue, alert_queue, trig)
|
94
|
+
|
95
|
+
# must not trigger alert
|
96
|
+
delete_messages(queue, get_queue_size(queue) - 1)
|
97
|
+
|
98
|
+
delete_queues(queue, alert_queue)
|
99
|
+
|
100
|
+
# Test descending progressive alert
|
101
|
+
queue, alert_queue = clear_queue_add_alert(type, trigger, 'desc')
|
102
|
+
|
103
|
+
# must not trigger alert
|
104
|
+
post_messages(queue, 25)
|
105
|
+
assert_equal 0, get_queue_size(alert_queue)
|
106
|
+
|
107
|
+
# trigger descending alert twice
|
108
|
+
2.downto(1) { |n| trigger_alert(queue, alert_queue, n * trigger) }
|
109
|
+
|
110
|
+
# must not trigger alert at size of 0
|
111
|
+
delete_messages(queue, 5)
|
112
|
+
assert_equal 2, get_queue_size(alert_queue)
|
113
|
+
|
114
|
+
# must not trigger alert
|
115
|
+
post_messages(queue, 15)
|
116
|
+
assert_equal 2, get_queue_size(alert_queue)
|
117
|
+
|
118
|
+
delete_queues(queue, alert_queue)
|
119
|
+
|
120
|
+
# Test "both" direction progressive alerts
|
121
|
+
queue, alert_queue = clear_queue_add_alert(type, trigger, 'both')
|
122
|
+
|
123
|
+
trigger_alert(queue, alert_queue, trigger, 2)
|
124
|
+
trigger_alert(queue, alert_queue, 2 * trigger) # queue size = 2 * trigger
|
125
|
+
|
126
|
+
# must not trigger descending alert
|
127
|
+
delete_messages(queue, trigger / 2)
|
128
|
+
assert_equal 2, get_queue_size(alert_queue)
|
129
|
+
|
130
|
+
# trigger descending alert, queue size will be trigger - 3
|
131
|
+
trigger_alert(queue, alert_queue, trigger, 3)
|
132
|
+
|
133
|
+
# trigger ascending alert, queue size will be trigger + 5
|
134
|
+
trigger_alert(queue, alert_queue, trigger, 5)
|
135
|
+
|
136
|
+
# must not trigger alerts below, queue size will be 2 * trigger - 1
|
137
|
+
post_messages(queue, trigger - 5 - 1)
|
138
|
+
assert_equal 4, get_queue_size(alert_queue)
|
139
|
+
|
140
|
+
# one message before trigger value
|
141
|
+
delete_messages(queue, trigger - 2)
|
142
|
+
assert_equal 4, get_queue_size(alert_queue)
|
143
|
+
|
144
|
+
delete_queues(queue, alert_queue)
|
145
|
+
end
|
146
|
+
|
147
|
+
def post_messages(queue, n)
|
148
|
+
queue.post(Array.new(n, { :body => 'message' }))
|
149
|
+
sleep 1
|
150
|
+
end
|
151
|
+
|
152
|
+
def delete_messages(queue, n)
|
153
|
+
msgs = queue.get(:n => n)
|
154
|
+
[msgs].flatten.each { |msg| msg.delete }
|
155
|
+
sleep 1
|
156
|
+
end
|
157
|
+
|
158
|
+
def delete_queues(*queues)
|
159
|
+
queues.each { |q| q.delete_queue }
|
160
|
+
end
|
161
|
+
|
162
|
+
def trigger_alert(queue, alert_queue, trigger, overhead = 0)
|
163
|
+
puts "trigger_alert(), called at #{caller[0]}"
|
164
|
+
|
165
|
+
qsize = get_queue_size(queue)
|
166
|
+
puts "Initial queue size is #{qsize}"
|
167
|
+
puts 'Alert is already triggered!' if qsize == trigger
|
168
|
+
aq_size = get_queue_size(alert_queue)
|
169
|
+
|
170
|
+
if qsize < trigger
|
171
|
+
nmsgs = trigger - qsize - 1
|
172
|
+
puts "Try to trigger ascending alert... post #{nmsgs} messages"
|
173
|
+
post_messages(queue, nmsgs)
|
174
|
+
else
|
175
|
+
nmsgs = qsize - trigger - 1
|
176
|
+
puts "Try to trigger descending alert... delete #{nmsgs} messages"
|
177
|
+
delete_messages(queue, nmsgs)
|
178
|
+
end
|
179
|
+
assert_equal aq_size, get_queue_size(alert_queue)
|
180
|
+
|
181
|
+
if qsize < trigger
|
182
|
+
puts "Post more #{1 + overhead} messages"
|
183
|
+
post_messages(queue, 1 + overhead)
|
184
|
+
else
|
185
|
+
puts "Delete more #{1 + overhead} messages"
|
186
|
+
delete_messages(queue, 1 + overhead)
|
187
|
+
end
|
188
|
+
assert_equal aq_size + 1, get_queue_size(alert_queue)
|
189
|
+
end
|
190
|
+
|
191
|
+
def clear_queue_add_alert(type, trigger, direction)
|
192
|
+
puts "clear_queue_add_alert(), called at #{caller[0]}"
|
193
|
+
|
194
|
+
qname = "#{type}-#{direction}-#{trigger}"
|
195
|
+
alert_qname = "#{qname}-alerts"
|
81
196
|
|
82
|
-
x = rand(1000)
|
83
|
-
qname = "alert-queue-#{x}"
|
84
197
|
queue = @client.queue(qname)
|
85
|
-
|
86
|
-
#
|
87
|
-
|
88
|
-
|
89
|
-
|
198
|
+
alert_queue = @client.queue(alert_qname)
|
199
|
+
# delete instead of clearing to remove all alerts from queue
|
200
|
+
delete_queues(queue, alert_queue)
|
201
|
+
# todo: should :queue be called something else,
|
202
|
+
# like alert_queue? or url and have to use ironmq:// url?
|
203
|
+
r = queue.add_alert({ :type => type, :trigger => trigger,
|
204
|
+
:queue => alert_qname, :direction => direction })
|
205
|
+
#p r
|
90
206
|
|
91
207
|
alerts = queue.alerts
|
208
|
+
#p alerts
|
209
|
+
|
92
210
|
assert_equal 1, alerts.size
|
93
211
|
alert = alerts[0]
|
94
|
-
|
95
|
-
assert_equal
|
96
|
-
assert_equal
|
97
|
-
|
98
|
-
|
99
|
-
assert_equal 0, target_queue.size
|
100
|
-
|
101
|
-
post_messages(queue, trigger_value)
|
102
|
-
assert_equal trigger_value, queue.size
|
103
|
-
assert_equal 1, target_queue.size
|
104
|
-
|
105
|
-
# now let's do it again and see if it tiggers again
|
106
|
-
post_messages(queue, trigger_value)
|
107
|
-
assert_equal trigger_value * 2, queue.size
|
108
|
-
assert_equal 2, target_queue.size
|
109
|
-
|
110
|
-
# now let's do it once again and see if it triggers again
|
111
|
-
post_messages(queue, trigger_value)
|
112
|
-
assert_equal trigger_value * 3, queue.size
|
113
|
-
assert_equal 3, target_queue.size
|
114
|
-
|
115
|
-
# now let's get it down to the reset point and trigger it again
|
116
|
-
(trigger_value).times do |i|
|
117
|
-
m = queue.get
|
118
|
-
m.delete
|
119
|
-
end
|
120
|
-
sleep 0.5
|
121
|
-
assert_equal trigger_value*2, queue.size
|
122
|
-
assert_equal 3, target_queue.size
|
123
|
-
|
124
|
-
# once it's at half, it should reset so let's get it back up to trigger_value again
|
125
|
-
post_messages(queue, trigger_value)
|
126
|
-
assert_equal trigger_value*3, queue.size
|
127
|
-
assert_equal 4, target_queue.size
|
128
|
-
|
129
|
-
queue.delete_queue
|
130
|
-
target_queue.delete_queue
|
212
|
+
#p alert
|
213
|
+
assert_equal type, alert.type
|
214
|
+
assert_equal trigger, alert.trigger
|
215
|
+
assert_equal alert_qname, alert.queue
|
216
|
+
assert_equal direction, alert.direction
|
131
217
|
|
218
|
+
[queue, @client.queue(alert_qname)]
|
132
219
|
end
|
133
220
|
|
134
|
-
def
|
135
|
-
|
136
|
-
queue.
|
221
|
+
def get_queue_size(queue)
|
222
|
+
begin
|
223
|
+
queue.reload.size
|
224
|
+
rescue Rest::HttpError => ex
|
225
|
+
ex.message =~ /404/ ? 0 : raise(ex)
|
137
226
|
end
|
138
|
-
sleep 0.5
|
139
227
|
end
|
140
|
-
|
141
228
|
|
142
229
|
end
|
data/test/test_push_queues.rb
CHANGED
@@ -12,6 +12,50 @@ class TestPushQueues < TestBase
|
|
12
12
|
key = "pushq-#{t}-#{i}-#{random}"
|
13
13
|
end
|
14
14
|
|
15
|
+
def test_subscriber_add_remove
|
16
|
+
puts "test_subscriber_add_remove"
|
17
|
+
qname = "subscribers_add_remove_test"
|
18
|
+
s = "http://nowhere.com:8080/somepath"
|
19
|
+
s2 = "http://somewhere.com"
|
20
|
+
queue = @client.queue(qname)
|
21
|
+
subscribers = [{:url => s}]
|
22
|
+
res = queue.update_queue(:subscribers => subscribers)
|
23
|
+
LOG.debug queue.subscribers
|
24
|
+
assert_equal 1, queue.subscribers.size
|
25
|
+
|
26
|
+
queue.reload
|
27
|
+
assert_equal 1, queue.subscribers.size
|
28
|
+
p queue.subscribers[0].url
|
29
|
+
queue.remove_subscriber({:url => s})
|
30
|
+
queue.reload
|
31
|
+
assert_equal 0, queue.subscribers.size
|
32
|
+
p queue.subscribers
|
33
|
+
|
34
|
+
# add it back with add
|
35
|
+
queue.add_subscriber({:url => s})
|
36
|
+
queue.reload
|
37
|
+
assert_equal 1, queue.subscribers.size
|
38
|
+
p queue.subscribers[0].url
|
39
|
+
queue.remove_subscriber({:url => s})
|
40
|
+
queue.reload
|
41
|
+
assert_equal 0, queue.subscribers.size
|
42
|
+
p queue.subscribers
|
43
|
+
|
44
|
+
# add two, remove first
|
45
|
+
queue.add_subscriber({:url => s})
|
46
|
+
queue.add_subscriber({:url => s2})
|
47
|
+
queue.reload
|
48
|
+
assert_equal 2, queue.subscribers.size
|
49
|
+
p queue.subscribers[0].url
|
50
|
+
queue.remove_subscriber({:url => s})
|
51
|
+
queue.reload
|
52
|
+
assert_equal 1, queue.subscribers.size
|
53
|
+
p queue.subscribers[0].url
|
54
|
+
assert_equal s2, queue.subscribers[0].url
|
55
|
+
|
56
|
+
queue.delete_queue
|
57
|
+
end
|
58
|
+
|
15
59
|
|
16
60
|
def test_queue_subscriptions
|
17
61
|
puts "test_queue_subscriptions"
|
@@ -69,6 +113,7 @@ class TestPushQueues < TestBase
|
|
69
113
|
url = "http://rest-test.iron.io/stored/#{key}"
|
70
114
|
LOG.info "checking url #{url}"
|
71
115
|
response = @rest.get(url)
|
116
|
+
p response.body
|
72
117
|
parsed = JSON.parse(response.body)
|
73
118
|
LOG.debug parsed['body']
|
74
119
|
assert_equal msg, parsed['body']
|
@@ -78,7 +123,7 @@ class TestPushQueues < TestBase
|
|
78
123
|
LOG.debug ex.code
|
79
124
|
assert_equal 404, ex.code
|
80
125
|
end
|
81
|
-
end
|
126
|
+
end
|
82
127
|
assert_not_equal tries, 0
|
83
128
|
end
|
84
129
|
elsif t == "unicast"
|
@@ -103,7 +148,7 @@ class TestPushQueues < TestBase
|
|
103
148
|
end
|
104
149
|
end
|
105
150
|
break if found == 1
|
106
|
-
end
|
151
|
+
end
|
107
152
|
assert_not_equal tries, 0
|
108
153
|
end
|
109
154
|
|
@@ -111,7 +156,7 @@ class TestPushQueues < TestBase
|
|
111
156
|
while tries > 0
|
112
157
|
|
113
158
|
# 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
|
159
|
+
# side (due lost connection for example) there will be no response earlier
|
115
160
|
# (default retries_delay is 60s).
|
116
161
|
sleep 1
|
117
162
|
tries -= 1
|
@@ -149,6 +194,60 @@ class TestPushQueues < TestBase
|
|
149
194
|
end
|
150
195
|
end
|
151
196
|
|
197
|
+
def test_headers
|
198
|
+
puts "test_headers"
|
199
|
+
qname = "push-headers"
|
200
|
+
subscribers = []
|
201
|
+
|
202
|
+
x = rand(1000)
|
203
|
+
key = "somemsg_#{x}"
|
204
|
+
subscribers << {:url => "http://rest-test.iron.io/code/200?store=#{key}",
|
205
|
+
:headers=>{"Content-Type"=>"application/json"}}
|
206
|
+
|
207
|
+
queue = @client.queue(qname)
|
208
|
+
queue.update_queue(:subscribers => subscribers,
|
209
|
+
:push_type => "multicast")
|
210
|
+
|
211
|
+
LOG.debug queue.subscribers
|
212
|
+
assert_equal subscribers.size, queue.subscribers.size
|
213
|
+
queue.reload.subscribers.each do |s|
|
214
|
+
p s.headers
|
215
|
+
assert_not_nil s.headers['Content-Type']
|
216
|
+
end
|
217
|
+
|
218
|
+
msg = "{\"hello\": #{x}}"
|
219
|
+
m = queue.post(msg)
|
220
|
+
|
221
|
+
LOG.info "Checking results..."
|
222
|
+
@rest = Rest::Client.new
|
223
|
+
found = 0
|
224
|
+
tries = MAX_TRIES
|
225
|
+
while tries > 0
|
226
|
+
tries -= 1
|
227
|
+
sleep 1
|
228
|
+
begin
|
229
|
+
url = "http://rest-test.iron.io/stored/#{key}"
|
230
|
+
LOG.info "checking url #{url}"
|
231
|
+
response = @rest.get(url)
|
232
|
+
p response.body
|
233
|
+
parsed = JSON.parse(response.body)
|
234
|
+
LOG.debug parsed['body']
|
235
|
+
assert_equal msg, parsed['body']
|
236
|
+
assert_not_nil parsed['headers']['Content-Type']
|
237
|
+
assert_equal 'application/json', parsed['headers']['Content-Type']
|
238
|
+
break
|
239
|
+
rescue Rest::HttpError => ex
|
240
|
+
LOG.debug ex.code
|
241
|
+
assert_equal 404, ex.code
|
242
|
+
end
|
243
|
+
assert_not_equal tries, 0
|
244
|
+
end
|
245
|
+
|
246
|
+
# delete queue after all tests on it were completed
|
247
|
+
resp = queue.delete_queue
|
248
|
+
assert_equal 200, resp.code, "API must respond with HTTP 200 status, but returned HTTP #{resp.code}"
|
249
|
+
end
|
250
|
+
|
152
251
|
|
153
252
|
def test_failure
|
154
253
|
@rest = Rest::Client.new
|
@@ -176,7 +275,7 @@ class TestPushQueues < TestBase
|
|
176
275
|
msg = "hello #{x}"
|
177
276
|
m = queue.post(msg)
|
178
277
|
LOG.debug m
|
179
|
-
|
278
|
+
|
180
279
|
tries = MAX_TRIES
|
181
280
|
while tries > 0
|
182
281
|
sleep 0.5
|
@@ -333,7 +432,7 @@ class TestPushQueues < TestBase
|
|
333
432
|
subscribers = queue.messages.get(m.id).subscribers
|
334
433
|
LOG.debug subscribers
|
335
434
|
next unless num_subscribers == subscribers.size
|
336
|
-
|
435
|
+
|
337
436
|
do_retry = false
|
338
437
|
subscribers.each do |s|
|
339
438
|
LOG.debug s
|
@@ -385,7 +484,7 @@ class TestPushQueues < TestBase
|
|
385
484
|
end
|
386
485
|
|
387
486
|
|
388
|
-
|
487
|
+
# tests when converting a push queue back to a pull queue
|
389
488
|
def test_converting_types
|
390
489
|
queue = @client.queue('converting_queue')
|
391
490
|
subscribers = [{:url => "http://rest-test.iron.io/code/200"},
|
@@ -406,7 +505,7 @@ class TestPushQueues < TestBase
|
|
406
505
|
assert_nil queue.push_type
|
407
506
|
|
408
507
|
end
|
409
|
-
|
508
|
+
|
410
509
|
def test_error_queues
|
411
510
|
@rest = Rest::Client.new
|
412
511
|
qname = "badrobot"
|
@@ -435,7 +534,7 @@ class TestPushQueues < TestBase
|
|
435
534
|
orig_id = m.id
|
436
535
|
puts "Msg id on post: #{orig_id}"
|
437
536
|
LOG.debug m
|
438
|
-
|
537
|
+
|
439
538
|
tries = MAX_TRIES
|
440
539
|
while tries > 0
|
441
540
|
puts 'sleeping for 5 to wait for retry'
|
@@ -468,7 +567,7 @@ class TestPushQueues < TestBase
|
|
468
567
|
break
|
469
568
|
end
|
470
569
|
assert_not_equal tries, 0
|
471
|
-
|
570
|
+
|
472
571
|
# check that the failed messages is in the error queue
|
473
572
|
error_queue = @client.queue(error_queue_name)
|
474
573
|
em = error_queue.get
|
@@ -482,14 +581,14 @@ class TestPushQueues < TestBase
|
|
482
581
|
assert_equal orig_id, error_hash['source_msg_id']
|
483
582
|
assert_not_nil error_hash['msg']
|
484
583
|
em.delete
|
485
|
-
|
584
|
+
|
486
585
|
# now let's get the original message
|
487
586
|
orig_msg = queue.get_message(error_hash['source_msg_id'])
|
488
587
|
puts "orig_msg:"
|
489
588
|
p orig_msg
|
490
589
|
p orig_msg.body
|
491
590
|
assert msg, orig_msg.body
|
492
|
-
|
591
|
+
|
493
592
|
error_queue.delete_queue
|
494
593
|
# delete queue on test complete
|
495
594
|
resp = queue.delete_queue
|
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
|
4
|
+
version: 4.1.0
|
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:
|
12
|
+
date: 2014-01-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: iron_core
|
@@ -219,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
219
219
|
version: 1.3.6
|
220
220
|
requirements: []
|
221
221
|
rubyforge_project:
|
222
|
-
rubygems_version: 2.
|
222
|
+
rubygems_version: 2.0.3
|
223
223
|
signing_key:
|
224
224
|
specification_version: 4
|
225
225
|
summary: Ruby client for IronMQ by www.iron.io
|