iron_mq 4.1.0 → 5.0.1
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 +9 -9
- data/LICENSE +22 -0
- data/README.md +2 -0
- data/iron_mq.gemspec +1 -0
- data/lib/iron_mq/alert.rb +14 -13
- data/lib/iron_mq/messages.rb +6 -6
- data/lib/iron_mq/queues.rb +18 -10
- data/lib/iron_mq/subscribers.rb +6 -6
- data/lib/iron_mq/version.rb +1 -1
- data/test/test_alerts.rb +208 -52
- data/test/test_iron_mq.rb +17 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de99bdc9d622017003d1e102420d9c0d28cfb18e
|
4
|
+
data.tar.gz: 5c83be6f01552a73dcd95d8be0410221a4dd500d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f382fa201f071244adf25be870e6f575a711140a15e2c4b44a284365e92a78045112800868bb0ef00a904fd59dadf2b4b9aedf5c54bb367c0c7aed0eb292476a
|
7
|
+
data.tar.gz: a061b8a98b4271f93d063d058a1edf5da79e2d39206edeeaca78e6ac7dbb5ebb24848c104b84f16d08022bc941879ea4d1bef9c758441095815d3f777efac77f
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
iron_mq (
|
4
|
+
iron_mq (5.0.0)
|
5
5
|
iron_core (>= 0.5.1)
|
6
6
|
|
7
7
|
GEM
|
@@ -17,26 +17,26 @@ GEM
|
|
17
17
|
concur
|
18
18
|
iron_core (1.0.3)
|
19
19
|
rest (>= 2.6.4)
|
20
|
-
iron_worker_ng (1.0
|
20
|
+
iron_worker_ng (1.2.0)
|
21
21
|
bundler
|
22
22
|
iron_core (>= 1.0.0)
|
23
|
-
rubyzip (
|
23
|
+
rubyzip (>= 1.0.0)
|
24
24
|
mime-types (1.25.1)
|
25
|
-
minitest (5.2.
|
26
|
-
net-http-persistent (2.9)
|
25
|
+
minitest (5.2.3)
|
26
|
+
net-http-persistent (2.9.4)
|
27
27
|
netrc (0.7.7)
|
28
28
|
quicky (0.4.0)
|
29
29
|
rake (10.1.1)
|
30
|
-
rest (2.7.
|
31
|
-
net-http-persistent
|
30
|
+
rest (2.7.1)
|
31
|
+
net-http-persistent (>= 2.9.1)
|
32
32
|
rest_client (>= 1.7.1)
|
33
33
|
rest_client (1.7.2)
|
34
34
|
netrc (~> 0.7.7)
|
35
|
-
rubyzip (
|
35
|
+
rubyzip (1.1.0)
|
36
36
|
test-unit (2.5.5)
|
37
37
|
typhoeus (0.6.7)
|
38
38
|
ethon (~> 0.6.2)
|
39
|
-
uber_config (1.1.
|
39
|
+
uber_config (1.1.1)
|
40
40
|
|
41
41
|
PLATFORMS
|
42
42
|
ruby
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014, Iron.io, Inc. All rights reserved.
|
2
|
+
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
4
|
+
modification, are permitted provided that the following conditions are met:
|
5
|
+
|
6
|
+
* Redistributions of source code must retain the above copyright notice,
|
7
|
+
this list of conditions and the following disclaimer.
|
8
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
9
|
+
this list of conditions and the following disclaimer in the documentation
|
10
|
+
and/or other materials provided with the distribution.
|
11
|
+
|
12
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
13
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
14
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
15
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
16
|
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
17
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
18
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
19
|
+
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
20
|
+
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
21
|
+
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
22
|
+
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
CHANGED
@@ -4,6 +4,8 @@ IronMQ Ruby Client
|
|
4
4
|
The [full API documentation is here](http://dev.iron.io/mq/reference/api/) and this client tries to stick to the API as
|
5
5
|
much as possible so if you see an option in the API docs, you can use it in the methods below.
|
6
6
|
|
7
|
+
**WARNING: Version 5+ has some small breaking changes. Version 4 ignored 404's on delete operations, Version
|
8
|
+
5 will now raise exceptions.
|
7
9
|
|
8
10
|
## Getting Started
|
9
11
|
|
data/iron_mq.gemspec
CHANGED
@@ -6,6 +6,7 @@ Gem::Specification.new do |gem|
|
|
6
6
|
gem.description = "Ruby client for IronMQ by www.iron.io"
|
7
7
|
gem.summary = "Ruby client for IronMQ by www.iron.io"
|
8
8
|
gem.homepage = "https://github.com/iron-io/iron_mq_ruby"
|
9
|
+
gem.license = "BSD-2-Clause"
|
9
10
|
|
10
11
|
gem.files = `git ls-files`.split($\)
|
11
12
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
data/lib/iron_mq/alert.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
module IronMQ
|
2
2
|
|
3
3
|
class Alert
|
4
|
-
|
5
|
-
attr_accessor :options
|
4
|
+
attr_reader :raw
|
6
5
|
|
7
|
-
def initialize(queue, alert_hash
|
6
|
+
def initialize(queue, alert_hash)
|
8
7
|
@queue = queue
|
9
8
|
@raw = alert_hash
|
10
|
-
@options = options
|
11
9
|
end
|
12
10
|
|
13
11
|
def id
|
@@ -32,17 +30,20 @@ module IronMQ
|
|
32
30
|
@raw['direction']
|
33
31
|
end
|
34
32
|
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
def snooze
|
34
|
+
@raw['snooze']
|
35
|
+
end
|
36
|
+
|
37
|
+
def delete
|
38
|
+
@queue.call_api_and_parse_response(:delete, path)
|
38
39
|
rescue Rest::HttpError => ex
|
39
|
-
if ex.code == 404
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
else
|
40
|
+
#if ex.code == 404
|
41
|
+
# IronCore::Logger.info('IronMQ', 'Delete got 404, safe to ignore.')
|
42
|
+
# # return ResponseBase as normal
|
43
|
+
# ResponseBase.new({'msg' => 'Deleted'}, 404)
|
44
|
+
#else
|
44
45
|
raise ex
|
45
|
-
end
|
46
|
+
#end
|
46
47
|
end
|
47
48
|
|
48
49
|
alias_method :acknowledge, :delete
|
data/lib/iron_mq/messages.rb
CHANGED
@@ -48,13 +48,13 @@ module IronMQ
|
|
48
48
|
def delete
|
49
49
|
call_api_and_parse_response(:delete)
|
50
50
|
rescue Rest::HttpError => ex
|
51
|
-
if ex.code == 404
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
else
|
51
|
+
#if ex.code == 404
|
52
|
+
# Rest.logger.info("Delete got 404, safe to ignore.")
|
53
|
+
# # return ResponseBase as normal
|
54
|
+
# ResponseBase.new({"msg" => "Deleted"}, 404)
|
55
|
+
#else
|
56
56
|
raise ex
|
57
|
-
end
|
57
|
+
#end
|
58
58
|
end
|
59
59
|
|
60
60
|
def call_api_and_parse_response(meth, ext_path = "", options = {}, instantiate = true)
|
data/lib/iron_mq/queues.rb
CHANGED
@@ -71,13 +71,13 @@ module IronMQ
|
|
71
71
|
@raw = nil
|
72
72
|
return r
|
73
73
|
rescue Rest::HttpError => ex
|
74
|
-
if ex.code == 404
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
else
|
74
|
+
#if ex.code == 404
|
75
|
+
# Rest.logger.info("Delete got 404, safe to ignore.")
|
76
|
+
# # return ResponseBase as normal
|
77
|
+
# ResponseBase.new({"msg" => "Deleted"}, 404)
|
78
|
+
#else
|
79
79
|
raise ex
|
80
|
-
end
|
80
|
+
#end
|
81
81
|
end
|
82
82
|
|
83
83
|
# Backward compatibility
|
@@ -122,18 +122,26 @@ module IronMQ
|
|
122
122
|
[]
|
123
123
|
end
|
124
124
|
|
125
|
-
def add_alert(alert
|
125
|
+
def add_alert(alert)
|
126
126
|
add_alerts([alert])
|
127
127
|
end
|
128
128
|
|
129
129
|
def add_alerts(alerts)
|
130
|
-
call_api_and_parse_response(:post,
|
130
|
+
call_api_and_parse_response(:post, '/alerts', :alerts => alerts)
|
131
|
+
end
|
132
|
+
|
133
|
+
def remove_alerts(alerts)
|
134
|
+
call_api_and_parse_response(:delete, '/alerts', :alerts => alerts)
|
135
|
+
end
|
136
|
+
|
137
|
+
def remove_alert(alert)
|
138
|
+
remove_alerts([alert])
|
131
139
|
end
|
132
140
|
|
133
141
|
def alerts
|
134
142
|
load
|
135
|
-
return nil unless @raw[
|
136
|
-
to_alerts(@raw[
|
143
|
+
return nil unless @raw['alerts']
|
144
|
+
to_alerts(@raw['alerts'])
|
137
145
|
end
|
138
146
|
|
139
147
|
def post_messages(payload, options = {})
|
data/lib/iron_mq/subscribers.rb
CHANGED
@@ -22,13 +22,13 @@ module IronMQ
|
|
22
22
|
def delete(options = {})
|
23
23
|
@message.call_api_and_parse_response(:delete, path)
|
24
24
|
rescue Rest::HttpError => ex
|
25
|
-
if ex.code == 404
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
else
|
25
|
+
#if ex.code == 404
|
26
|
+
# Rest.logger.info("Delete got 404, safe to ignore.")
|
27
|
+
# # return ResponseBase as normal
|
28
|
+
# ResponseBase.new({"msg" => "Deleted"}, 404)
|
29
|
+
#else
|
30
30
|
raise ex
|
31
|
-
end
|
31
|
+
#end
|
32
32
|
end
|
33
33
|
|
34
34
|
alias_method :acknowledge, :delete
|
data/lib/iron_mq/version.rb
CHANGED
data/test/test_alerts.rb
CHANGED
@@ -10,10 +10,89 @@ class TestAlerts < TestBase
|
|
10
10
|
return if @skip # bypass these tests if rackspace
|
11
11
|
end
|
12
12
|
|
13
|
+
def test_configuration
|
14
|
+
q_name = 'bad-alerts-params'
|
15
|
+
queue = @client.queue q_name
|
16
|
+
delete_queues queue
|
17
|
+
|
18
|
+
# no configuration
|
19
|
+
alert = {}
|
20
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
21
|
+
|
22
|
+
# only type is specified
|
23
|
+
alert[:type] = 'fixed'
|
24
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
25
|
+
|
26
|
+
# type and trigger value specified
|
27
|
+
alert[:trigger] = 30
|
28
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
29
|
+
|
30
|
+
# type, trigger, and direction
|
31
|
+
alert[:direction] = 'asc'
|
32
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
33
|
+
|
34
|
+
# type, trigger, direction, and alert queue name - alright
|
35
|
+
aq_name = 'bad-alerts-params-alerts'
|
36
|
+
alert[:queue] = aq_name
|
37
|
+
assert_nothing_raised(Rest::HttpError) { queue.add_alert(alert) }
|
38
|
+
|
39
|
+
# type, trigger, direction, queue name, and snooze - alright
|
40
|
+
alert[:snooze] = 8
|
41
|
+
assert_nothing_raised(Rest::HttpError) { queue.add_alert(alert) }
|
42
|
+
|
43
|
+
# wrong snooze
|
44
|
+
alert[:snooze] = -13
|
45
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
46
|
+
|
47
|
+
alert[:snooze] = '1234'
|
48
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
49
|
+
|
50
|
+
# wrong type
|
51
|
+
alert[:snooze] = 0
|
52
|
+
alert[:type] = 'wrong'
|
53
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
54
|
+
|
55
|
+
# wrong trigger
|
56
|
+
alert[:type] = 'progressive'
|
57
|
+
alert[:trigger] = 'c'
|
58
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
59
|
+
|
60
|
+
# wrong direction
|
61
|
+
alert[:trigger] = 30
|
62
|
+
alert[:direction] = 'both'
|
63
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
64
|
+
|
65
|
+
# delete queue to clear
|
66
|
+
delete_queues queue
|
67
|
+
|
68
|
+
# Test max alerts number
|
69
|
+
alert[:direction] = 'asc'
|
70
|
+
# insert 6 alerts
|
71
|
+
assert_raise(Rest::HttpError) { queue.add_alerts(Array.new(6, alert)) }
|
72
|
+
|
73
|
+
queue.add_alerts(Array.new(5, alert))
|
74
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
75
|
+
|
76
|
+
delete_queues queue
|
77
|
+
|
78
|
+
# Cyclic alerts tests
|
79
|
+
# Progressive alert posts to its queue (queue is the same as alert queue)
|
80
|
+
alert[:queue] = q_name
|
81
|
+
alert[:type] = 'progressive'
|
82
|
+
assert_raise(Rest::HttpError) { queue.add_alert(alert) }
|
83
|
+
|
84
|
+
# Q1 progressive alert posts to Q2, Q2 progressive alert posts to Q1
|
85
|
+
a_queue = @client.queue aq_name
|
86
|
+
queue.add_alert(alert.merge({:queue => aq_name}))
|
87
|
+
assert_raise(Rest::HttpError) do
|
88
|
+
a_queue.add_alert(alert.merge({:queue => q_name}))
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
13
92
|
def test_size_alerts
|
14
93
|
return if @skip
|
15
94
|
|
16
|
-
type = '
|
95
|
+
type = 'fixed'
|
17
96
|
trigger = 10
|
18
97
|
# Test size alets, direction is ascending
|
19
98
|
queue, alert_queue = clear_queue_add_alert(type, trigger, 'asc')
|
@@ -23,11 +102,11 @@ class TestAlerts < TestBase
|
|
23
102
|
|
24
103
|
# must not trigger alert, queue size will be trigger + 13
|
25
104
|
post_messages(queue, 10)
|
26
|
-
|
105
|
+
assert_queue_size 1, alert_queue
|
27
106
|
|
28
107
|
# must not trigger alert, queue size will be trigger - 3
|
29
108
|
delete_messages(queue, 16)
|
30
|
-
|
109
|
+
assert_queue_size 1, alert_queue
|
31
110
|
|
32
111
|
trigger_alert(queue, alert_queue, trigger)
|
33
112
|
|
@@ -38,38 +117,65 @@ class TestAlerts < TestBase
|
|
38
117
|
|
39
118
|
# must not trigger descending alert
|
40
119
|
post_messages(queue, 15)
|
41
|
-
|
120
|
+
assert_queue_size 0, alert_queue
|
42
121
|
|
43
122
|
# will remove 5 msgs, queue size will be 10
|
44
123
|
trigger_alert(queue, alert_queue, trigger)
|
45
124
|
|
46
125
|
# must not trigger alert
|
47
126
|
post_messages(queue, 12)
|
48
|
-
|
127
|
+
assert_queue_size 1, alert_queue
|
49
128
|
|
50
129
|
trigger_alert(queue, alert_queue, trigger)
|
51
130
|
|
52
131
|
# must not trigger alert
|
53
132
|
delete_messages(queue, 8)
|
54
|
-
|
133
|
+
assert_queue_size 2, alert_queue
|
55
134
|
|
56
135
|
delete_queues(queue, alert_queue)
|
57
136
|
|
58
|
-
#
|
59
|
-
|
137
|
+
# test ascending alert with snooze
|
138
|
+
snooze = 10
|
139
|
+
trigger = 10
|
140
|
+
queue, alert_queue = clear_queue_add_alert(type, trigger, 'asc', snooze)
|
60
141
|
|
61
|
-
#
|
62
|
-
|
142
|
+
# Trigger alert
|
143
|
+
post_messages(queue, trigger + 1)
|
144
|
+
to_time = Time.now + snooze - 4
|
145
|
+
assert_queue_size 1, alert_queue
|
63
146
|
|
64
|
-
|
65
|
-
|
66
|
-
|
147
|
+
while (lambda { Time.now }).call < to_time do
|
148
|
+
delete_messages(queue, 2) # queeu size is `trigger - 1`
|
149
|
+
post_messages(queue, 2) # size is `trigger + 1`
|
150
|
+
assert_queue_size 1, alert_queue
|
151
|
+
end
|
152
|
+
sleep 4
|
67
153
|
|
68
|
-
|
69
|
-
|
154
|
+
delete_messages(queue, 2) # queeu size is `trigger - 1`
|
155
|
+
post_messages(queue, 2) # size is `trigger - 1`
|
156
|
+
assert_queue_size 2, alert_queue
|
70
157
|
|
71
|
-
|
72
|
-
|
158
|
+
delete_queues(queue, alert_queue)
|
159
|
+
|
160
|
+
# test descending alert with snooze
|
161
|
+
queue, alert_queue = clear_queue_add_alert(type, trigger, 'desc', snooze)
|
162
|
+
|
163
|
+
# Trigger alert
|
164
|
+
post_messages(queue, trigger + 1)
|
165
|
+
delete_messages(queue, 2)
|
166
|
+
to_time = Time.now + snooze - 4
|
167
|
+
assert_queue_size 1, alert_queue
|
168
|
+
|
169
|
+
while (lambda { Time.now }).call < to_time do
|
170
|
+
post_messages(queue, 2) # queeu size is `trigger + 1`
|
171
|
+
delete_messages(queue, 2) # size is `trigger - 1`
|
172
|
+
assert_queue_size 1, alert_queue
|
173
|
+
end
|
174
|
+
sleep 4
|
175
|
+
|
176
|
+
post_messages(queue, 2) # size is `trigger + 1`
|
177
|
+
delete_messages(queue, 2) # queeu size is `trigger - 1`
|
178
|
+
assert_queue_size 2, alert_queue
|
73
179
|
|
74
180
|
delete_queues(queue, alert_queue)
|
75
181
|
end
|
@@ -87,7 +193,7 @@ class TestAlerts < TestBase
|
|
87
193
|
|
88
194
|
# Must not trigger alerts
|
89
195
|
delete_messages(queue, 15)
|
90
|
-
|
196
|
+
assert_queue_size 3, alert_queue
|
91
197
|
|
92
198
|
trig = (get_queue_size(queue) / trigger.to_f).ceil * trigger
|
93
199
|
trigger_alert(queue, alert_queue, trig)
|
@@ -102,61 +208,102 @@ class TestAlerts < TestBase
|
|
102
208
|
|
103
209
|
# must not trigger alert
|
104
210
|
post_messages(queue, 25)
|
105
|
-
|
211
|
+
assert_queue_size 0, alert_queue
|
106
212
|
|
107
213
|
# trigger descending alert twice
|
108
214
|
2.downto(1) { |n| trigger_alert(queue, alert_queue, n * trigger) }
|
109
215
|
|
110
216
|
# must not trigger alert at size of 0
|
111
217
|
delete_messages(queue, 5)
|
112
|
-
|
218
|
+
assert_queue_size 2, alert_queue
|
113
219
|
|
114
220
|
# must not trigger alert
|
115
221
|
post_messages(queue, 15)
|
116
|
-
|
222
|
+
assert_queue_size 2, alert_queue
|
117
223
|
|
118
224
|
delete_queues(queue, alert_queue)
|
119
225
|
|
120
|
-
#
|
121
|
-
|
226
|
+
# test ascending alert with snooze
|
227
|
+
snooze = 10
|
228
|
+
trigger = 3
|
229
|
+
queue, alert_queue = clear_queue_add_alert(type, trigger, 'asc', snooze)
|
230
|
+
|
231
|
+
# Trigger alert
|
232
|
+
post_messages(queue, trigger + 1)
|
233
|
+
# Get current time as snooze start time
|
234
|
+
to_time = Time.now + snooze - 4
|
235
|
+
# Check queue for alert
|
236
|
+
assert_queue_size 1, alert_queue
|
237
|
+
|
238
|
+
while (lambda { Time.now }).call < to_time do
|
239
|
+
# will trigger alert if snooze does not work
|
240
|
+
post_messages(queue, trigger + 1)
|
241
|
+
# but must not trigger
|
242
|
+
assert_queue_size 1, alert_queue
|
243
|
+
end
|
244
|
+
sleep 4
|
122
245
|
|
123
|
-
|
124
|
-
|
246
|
+
# Trigger alert again
|
247
|
+
post_messages(queue, trigger + 1)
|
248
|
+
assert_queue_size 2, alert_queue
|
125
249
|
|
126
|
-
|
127
|
-
delete_messages(queue, trigger / 2)
|
128
|
-
assert_equal 2, get_queue_size(alert_queue)
|
250
|
+
delete_queues(queue, alert_queue)
|
129
251
|
|
130
|
-
#
|
131
|
-
|
252
|
+
# test descending alert with snooze
|
253
|
+
queue, alert_queue = clear_queue_add_alert(type, 2, 'desc', snooze)
|
132
254
|
|
133
|
-
#
|
134
|
-
|
255
|
+
# Does not trigger alert
|
256
|
+
post_messages(queue, 20 * trigger)
|
257
|
+
to_time = Time.now + snooze - 4
|
135
258
|
|
136
|
-
|
137
|
-
|
138
|
-
|
259
|
+
while (lambda { Time.now }).call < to_time do
|
260
|
+
delete_messages(queue, trigger + 1)
|
261
|
+
assert_queue_size 1, alert_queue
|
262
|
+
break if get_queue_size(queue) <= trigger
|
263
|
+
end
|
264
|
+
sleep 4
|
139
265
|
|
140
|
-
|
141
|
-
delete_messages(queue, trigger
|
142
|
-
|
266
|
+
post_messages(queue, trigger + 1)
|
267
|
+
delete_messages(queue, trigger)
|
268
|
+
assert_queue_size 2, alert_queue
|
143
269
|
|
144
270
|
delete_queues(queue, alert_queue)
|
145
271
|
end
|
146
272
|
|
273
|
+
def test_snooze_concurrent
|
274
|
+
assert false, 'NOT IMPLEMENTED'
|
275
|
+
end
|
276
|
+
|
147
277
|
def post_messages(queue, n)
|
148
|
-
|
149
|
-
|
278
|
+
per_100, last_n = (n > 100) ? [n / 100, n % 100] : [0, n]
|
279
|
+
|
280
|
+
per_100.times { queue.post(Array.new(100, { :body => 'message' })) }
|
281
|
+
|
282
|
+
queue.post(Array.new(last_n, { :body => 'message' })) if last_n > 0
|
150
283
|
end
|
151
284
|
|
152
285
|
def delete_messages(queue, n)
|
153
|
-
|
154
|
-
|
155
|
-
|
286
|
+
per_100, last_n = (n > 100) ? [n / 100, n % 100] : [0, n]
|
287
|
+
|
288
|
+
per_100.times { [queue.get(:n => last_n)].flatten.each { |msg| msg.delete } }
|
289
|
+
|
290
|
+
[queue.get(:n => last_n)].flatten.each { |msg| msg.delete } if last_n > 0
|
156
291
|
end
|
157
292
|
|
158
293
|
def delete_queues(*queues)
|
159
|
-
queues.each
|
294
|
+
queues.each do |q|
|
295
|
+
begin
|
296
|
+
q.delete_queue
|
297
|
+
rescue Rest::HttpError => ex
|
298
|
+
if ex.code == 404
|
299
|
+
Rest.logger.info("Delete queue got 404, ignoring.")
|
300
|
+
# return ResponseBase as normal
|
301
|
+
return nil
|
302
|
+
else
|
303
|
+
raise ex
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
160
307
|
end
|
161
308
|
|
162
309
|
def trigger_alert(queue, alert_queue, trigger, overhead = 0)
|
@@ -176,22 +323,22 @@ class TestAlerts < TestBase
|
|
176
323
|
puts "Try to trigger descending alert... delete #{nmsgs} messages"
|
177
324
|
delete_messages(queue, nmsgs)
|
178
325
|
end
|
179
|
-
|
326
|
+
assert_queue_size aq_size, alert_queue, 'Alert is triggered, but must not be'
|
180
327
|
|
181
328
|
if qsize < trigger
|
182
|
-
puts "Post
|
329
|
+
puts "Post #{1 + overhead} more message(s)"
|
183
330
|
post_messages(queue, 1 + overhead)
|
184
331
|
else
|
185
|
-
puts "Delete
|
332
|
+
puts "Delete #{1 + overhead} more message(s)"
|
186
333
|
delete_messages(queue, 1 + overhead)
|
187
334
|
end
|
188
|
-
|
335
|
+
assert_queue_size aq_size + 1, alert_queue, 'Alert is not triggered, but must be'
|
189
336
|
end
|
190
337
|
|
191
|
-
def clear_queue_add_alert(type, trigger, direction)
|
338
|
+
def clear_queue_add_alert(type, trigger, direction, snooze = nil)
|
192
339
|
puts "clear_queue_add_alert(), called at #{caller[0]}"
|
193
340
|
|
194
|
-
qname = "#{type}-#{direction}-#{trigger}"
|
341
|
+
qname = "#{type}-#{direction}-#{trigger}-#{snooze || 'no_snooze'}"
|
195
342
|
alert_qname = "#{qname}-alerts"
|
196
343
|
|
197
344
|
queue = @client.queue(qname)
|
@@ -200,8 +347,11 @@ class TestAlerts < TestBase
|
|
200
347
|
delete_queues(queue, alert_queue)
|
201
348
|
# todo: should :queue be called something else,
|
202
349
|
# like alert_queue? or url and have to use ironmq:// url?
|
203
|
-
r = queue.add_alert({ :type => type,
|
204
|
-
:
|
350
|
+
r = queue.add_alert({ :type => type,
|
351
|
+
:trigger => trigger,
|
352
|
+
:queue => alert_qname,
|
353
|
+
:direction => direction,
|
354
|
+
:snooze => snooze.to_i })
|
205
355
|
#p r
|
206
356
|
|
207
357
|
alerts = queue.alerts
|
@@ -226,4 +376,10 @@ class TestAlerts < TestBase
|
|
226
376
|
end
|
227
377
|
end
|
228
378
|
|
379
|
+
def assert_queue_size(size, queue, msg = nil)
|
380
|
+
puts "assert_queue_size(), called at #{caller[0]}"
|
381
|
+
sleep 1
|
382
|
+
assert_equal size, get_queue_size(queue), msg.to_s
|
383
|
+
end
|
384
|
+
|
229
385
|
end
|
data/test/test_iron_mq.rb
CHANGED
@@ -674,5 +674,22 @@ class IronMQTests < TestBase
|
|
674
674
|
q.update_queue(:retries => 10)
|
675
675
|
assert_equal 'unicast', q.reload.push_type
|
676
676
|
end
|
677
|
+
|
678
|
+
def test_dequeue_delete
|
679
|
+
queue_name = "test_dequeue_delete_#{Time.now.to_i}"
|
680
|
+
clear_queue(queue_name)
|
681
|
+
queue = @client.queue(queue_name)
|
682
|
+
v = "hello thou shalt only see me once"
|
683
|
+
queue.post(v)
|
684
|
+
msg = queue.get(delete: 1, timeout: 30)
|
685
|
+
assert_equal msg.body, "hello thou shalt only see me once"
|
686
|
+
sleep 1
|
687
|
+
# get the queue again
|
688
|
+
queue = @client.queue(queue_name)
|
689
|
+
assert_equal 0, queue.size
|
690
|
+
sleep 31
|
691
|
+
msg = queue.get
|
692
|
+
assert_equal nil, msg
|
693
|
+
end
|
677
694
|
end
|
678
695
|
|
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
|
+
version: 5.0.1
|
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: 2014-
|
12
|
+
date: 2014-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: iron_core
|
@@ -176,6 +176,7 @@ files:
|
|
176
176
|
- .gitignore
|
177
177
|
- Gemfile
|
178
178
|
- Gemfile.lock
|
179
|
+
- LICENSE
|
179
180
|
- README.md
|
180
181
|
- Rakefile
|
181
182
|
- iron_mq.gemspec
|
@@ -201,7 +202,8 @@ files:
|
|
201
202
|
- test/test_push_queues.rb
|
202
203
|
- test/tmp.rb
|
203
204
|
homepage: https://github.com/iron-io/iron_mq_ruby
|
204
|
-
licenses:
|
205
|
+
licenses:
|
206
|
+
- BSD-2-Clause
|
205
207
|
metadata: {}
|
206
208
|
post_install_message:
|
207
209
|
rdoc_options: []
|
@@ -219,7 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
219
221
|
version: 1.3.6
|
220
222
|
requirements: []
|
221
223
|
rubyforge_project:
|
222
|
-
rubygems_version: 2.
|
224
|
+
rubygems_version: 2.1.11
|
223
225
|
signing_key:
|
224
226
|
specification_version: 4
|
225
227
|
summary: Ruby client for IronMQ by www.iron.io
|