iron_mq 4.0.5 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|