rabbitmq_http_api_client 1.6.0 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -1
- data/.rspec +1 -2
- data/.travis.yml +4 -12
- data/ChangeLog.md +8 -0
- data/Gemfile +1 -1
- data/README.md +15 -6
- data/bin/before_build.sh +13 -0
- data/lib/rabbitmq/http/client.rb +28 -2
- data/lib/rabbitmq/http/client/version.rb +1 -1
- data/spec/integration/client_spec.rb +281 -103
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f70ef3ff3ec25ec720de49aeacc8b8f6761deaa5
|
4
|
+
data.tar.gz: 540c588e21de5cd1a791cd88c263488c12a145c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e03485b55f0171a8e8af165f81d5ec6832d6b9e9f35875b649ba14965f21fea7b8e7e223c974923122b0566ae52c5817ac7d31ccfb1df1c389ac279cc78e625
|
7
|
+
data.tar.gz: df3022102e969d7e47460f63afa847ed2b57e4309dac55116b59731744c8c768d14ee4eed539b026d6a880c40feb08cff1fcb305482d2ab3ccc0a43efd3fc61a
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
--format documentation
|
1
|
+
-cfd
|
data/.travis.yml
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
bundler_args: --without development
|
2
|
-
|
2
|
+
before_script: ./bin/before_build.sh
|
3
|
+
script: "bundle exec rspec"
|
3
4
|
rvm:
|
4
|
-
- "2.
|
5
|
-
- "2.
|
6
|
-
- "1.9.3"
|
7
|
-
- "jruby-19mode"
|
8
|
-
- "1.9.2"
|
9
|
-
- "rbx-19mode"
|
10
|
-
- "1.8.7"
|
5
|
+
- "2.3.3"
|
6
|
+
- "2.2"
|
11
7
|
notifications:
|
12
8
|
email: michael@rabbitmq.com
|
13
9
|
services:
|
@@ -15,7 +11,3 @@ services:
|
|
15
11
|
branches:
|
16
12
|
only:
|
17
13
|
- master
|
18
|
-
matrix:
|
19
|
-
allow_failures:
|
20
|
-
- rvm: rbx-19mode
|
21
|
-
- rvm: 1.8.7
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## Changes Between 1.6.0 and 1.7.0
|
2
|
+
|
3
|
+
### Blank Tags by Default
|
4
|
+
|
5
|
+
The `:tags` attribute is no longer required by `Client#update_user`. If not provided,
|
6
|
+
a blank list of tags will be used.
|
7
|
+
|
8
|
+
|
1
9
|
## Changes Between 1.5.0 and 1.6.0
|
2
10
|
|
3
11
|
### Definition Upload Support
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -33,7 +33,7 @@ All versions require [RabbitMQ Management UI plugin](http://www.rabbitmq.com/man
|
|
33
33
|
|
34
34
|
Add this line to your application's Gemfile:
|
35
35
|
|
36
|
-
gem 'rabbitmq_http_api_client', '>= 1.
|
36
|
+
gem 'rabbitmq_http_api_client', '>= 1.6.0'
|
37
37
|
|
38
38
|
And then execute:
|
39
39
|
|
@@ -219,6 +219,9 @@ puts q.backing_queue_status
|
|
219
219
|
puts q.active_consumers
|
220
220
|
|
221
221
|
|
222
|
+
# Get information about a queue
|
223
|
+
client.queue_info("/", "collector1.megacorp.local")
|
224
|
+
|
222
225
|
# Declare a queue
|
223
226
|
client.declare_queue("/", "collector1.megacorp.local", :durable => false, :auto_delete => true)
|
224
227
|
|
@@ -342,21 +345,27 @@ ps = client.update_permissions_of("/", "guest", :write => ".*", :read => ".*", :
|
|
342
345
|
ps = client.clear_permissions_of("/", "guest")
|
343
346
|
```
|
344
347
|
|
348
|
+
## Running Tests
|
349
|
+
|
350
|
+
bundle install
|
351
|
+
bundle exec rspec -cfd spec
|
352
|
+
|
353
|
+
The test suite assumes that RabbitMQ is running locally with stock settings
|
354
|
+
and rabbitmq-management plugin enabled.
|
355
|
+
|
356
|
+
|
345
357
|
## Contributing
|
346
358
|
|
347
359
|
1. Fork it
|
348
360
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
349
361
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
350
362
|
4. Push to the branch (`git push origin my-new-feature`)
|
351
|
-
5. Create new
|
363
|
+
5. Create a new pull request
|
352
364
|
|
353
365
|
|
354
366
|
## License & Copyright
|
355
367
|
|
356
368
|
Double-licensed under the MIT and Mozilla Public License (same as RabbitMQ).
|
357
369
|
|
358
|
-
(c) Michael S. Klishin, 2012-
|
359
|
-
|
360
|
-
|
361
|
-
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/ruby-amqp/rabbitmq_http_api_client/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
370
|
+
(c) Michael S. Klishin, 2012-2016.
|
362
371
|
|
data/bin/before_build.sh
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
${RUBY_RABBITMQ_HTTP_API_CLIENT_RABBITMQCTL:="sudo rabbitmqctl"}
|
4
|
+
|
5
|
+
# guest:guest has full access to /
|
6
|
+
|
7
|
+
$RUBY_RABBITMQ_HTTP_API_CLIENT_RABBITMQCTL add_vhost /
|
8
|
+
$RUBY_RABBITMQ_HTTP_API_CLIENT_RABBITMQCTL add_user guest guest
|
9
|
+
$RUBY_RABBITMQ_HTTP_API_CLIENT_RABBITMQCTL set_permissions -p / guest ".*" ".*" ".*"
|
10
|
+
|
11
|
+
# Reduce retention policy for faster publishing of stats
|
12
|
+
$RUBY_RABBITMQ_HTTP_API_CLIENT_RABBITMQCTL eval 'supervisor2:terminate_child(rabbit_mgmt_sup_sup, rabbit_mgmt_sup), application:set_env(rabbitmq_management, sample_retention_policies, [{global, [{605, 1}]}, {basic, [{605, 1}]}, {detailed, [{10, 1}]}]), rabbit_mgmt_sup_sup:start_child().'
|
13
|
+
$RUBY_RABBITMQ_HTTP_API_CLIENT_RABBITMQCTL eval 'supervisor2:terminate_child(rabbit_mgmt_agent_sup_sup, rabbit_mgmt_agent_sup), application:set_env(rabbitmq_management_agent, sample_retention_policies, [{global, [{605, 1}]}, {basic, [{605, 1}]}, {detailed, [{10, 1}]}]), rabbit_mgmt_agent_sup_sup:start_child().'
|
data/lib/rabbitmq/http/client.rb
CHANGED
@@ -129,8 +129,11 @@ module RabbitMQ
|
|
129
129
|
decode_resource(response)
|
130
130
|
end
|
131
131
|
|
132
|
-
def delete_exchange(vhost, name)
|
133
|
-
|
132
|
+
def delete_exchange(vhost, name, if_unused = false)
|
133
|
+
response = @connection.delete("exchanges/#{uri_encode(vhost)}/#{uri_encode(name)}") do |req|
|
134
|
+
req.params["if-unused"] = true if if_unused
|
135
|
+
end
|
136
|
+
decode_resource(response)
|
134
137
|
end
|
135
138
|
|
136
139
|
def exchange_info(vhost, name)
|
@@ -219,6 +222,27 @@ module RabbitMQ
|
|
219
222
|
resp.success?
|
220
223
|
end
|
221
224
|
|
225
|
+
def list_bindings_between_exchanges(vhost, destination_exchange, source_exchange)
|
226
|
+
decode_resource_collection(@connection.get("bindings/#{uri_encode(vhost)}/e/#{uri_encode(source_exchange)}/e/#{uri_encode(destination_exchange)}"))
|
227
|
+
end
|
228
|
+
|
229
|
+
def exchange_binding_info(vhost, destination_exchange, source_exchange, properties_key)
|
230
|
+
decode_resource(@connection.get("bindings/#{uri_encode(vhost)}/e/#{uri_encode(source_exchange)}/e/#{uri_encode(destination_exchange)}/#{uri_encode(properties_key)}"))
|
231
|
+
end
|
232
|
+
|
233
|
+
|
234
|
+
def bind_exchange(vhost, destination_exchange, source_exchange, routing_key, arguments = [])
|
235
|
+
resp = @connection.post("bindings/#{uri_encode(vhost)}/e/#{uri_encode(source_exchange)}/e/#{uri_encode(destination_exchange)}") do |req|
|
236
|
+
req.headers['Content-Type'] = 'application/json'
|
237
|
+
req.body = MultiJson.dump({:routing_key => routing_key, :arguments => arguments})
|
238
|
+
end
|
239
|
+
resp.headers['location']
|
240
|
+
end
|
241
|
+
|
242
|
+
def delete_exchange_binding(vhost, destination_exchange, source_exchange, properties_key)
|
243
|
+
resp = @connection.delete("bindings/#{uri_encode(vhost)}/e/#{uri_encode(source_exchange)}/e/#{uri_encode(destination_exchange)}/#{uri_encode(properties_key)}")
|
244
|
+
resp.success?
|
245
|
+
end
|
222
246
|
|
223
247
|
|
224
248
|
def list_vhosts
|
@@ -279,6 +303,8 @@ module RabbitMQ
|
|
279
303
|
end
|
280
304
|
|
281
305
|
def update_user(name, attributes)
|
306
|
+
attributes[:tags] ||= ""
|
307
|
+
|
282
308
|
response = @connection.put("users/#{uri_encode(name)}") do |req|
|
283
309
|
req.headers['Content-Type'] = "application/json"
|
284
310
|
req.body = MultiJson.dump(attributes)
|
@@ -8,13 +8,25 @@ describe RabbitMQ::HTTP::Client do
|
|
8
8
|
described_class.connect(endpoint, :username => "guest", :password => "guest")
|
9
9
|
end
|
10
10
|
|
11
|
-
before :
|
12
|
-
@
|
13
|
-
@
|
11
|
+
before :each do
|
12
|
+
@conn = Bunny.new
|
13
|
+
@conn.start
|
14
14
|
end
|
15
15
|
|
16
|
-
after :
|
17
|
-
@
|
16
|
+
after :each do
|
17
|
+
@conn.close
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# Helpers
|
22
|
+
#
|
23
|
+
|
24
|
+
# Statistics tables in the server are updated asynchronously,
|
25
|
+
# in particular starting with rabbitmq/rabbitmq-management#236,
|
26
|
+
# so in some cases we need to wait before GET'ing e.g. a newly opened connection.
|
27
|
+
def await_event_propagation
|
28
|
+
# same number as used in rabbit-hole test suite. Works OK.
|
29
|
+
sleep 1
|
18
30
|
end
|
19
31
|
|
20
32
|
#
|
@@ -139,12 +151,14 @@ describe RabbitMQ::HTTP::Client do
|
|
139
151
|
end
|
140
152
|
|
141
153
|
describe "POST /api/definitions" do
|
154
|
+
let(:queue_name) { 'my-definition-queue' }
|
155
|
+
|
142
156
|
let(:definition) do
|
143
157
|
{
|
144
158
|
:queues => [{
|
145
|
-
:name =>
|
159
|
+
:name => queue_name,
|
146
160
|
:vhost => '/',
|
147
|
-
:
|
161
|
+
durable: true,
|
148
162
|
:auto_delete => false,
|
149
163
|
:arguments => {
|
150
164
|
"x-dead-letter-exchange" => 'dead'
|
@@ -156,13 +170,17 @@ describe RabbitMQ::HTTP::Client do
|
|
156
170
|
it "returns true when successful" do
|
157
171
|
r = subject.upload_definitions(definition)
|
158
172
|
expect(r).to eq(true)
|
173
|
+
|
174
|
+
subject.delete_queue("/", queue_name)
|
159
175
|
end
|
160
176
|
|
161
177
|
it "stores the uploaded definitions" do
|
162
178
|
subject.upload_definitions(definition)
|
163
179
|
xs = subject.list_definitions
|
164
|
-
uploaded_queue = xs.queues.detect { |q| q.name
|
180
|
+
uploaded_queue = xs.queues.detect { |q| q.name == queue_name }
|
165
181
|
expect(uploaded_queue).not_to eq(nil)
|
182
|
+
|
183
|
+
subject.delete_queue("/", queue_name)
|
166
184
|
end
|
167
185
|
end
|
168
186
|
|
@@ -171,12 +189,13 @@ describe RabbitMQ::HTTP::Client do
|
|
171
189
|
#
|
172
190
|
|
173
191
|
describe "GET /api/connections" do
|
174
|
-
before :
|
175
|
-
@
|
176
|
-
@
|
192
|
+
before :each do
|
193
|
+
@conn = Bunny.new
|
194
|
+
@conn.start
|
177
195
|
end
|
178
196
|
|
179
197
|
it "returns a list of all active connections" do
|
198
|
+
await_event_propagation
|
180
199
|
xs = subject.list_connections
|
181
200
|
f = xs.first
|
182
201
|
|
@@ -187,6 +206,7 @@ describe RabbitMQ::HTTP::Client do
|
|
187
206
|
|
188
207
|
describe "GET /api/connections/:name" do
|
189
208
|
it "returns information about the connection" do
|
209
|
+
await_event_propagation
|
190
210
|
xs = subject.list_connections
|
191
211
|
c = subject.connection_info(xs.first.name)
|
192
212
|
|
@@ -195,51 +215,41 @@ describe RabbitMQ::HTTP::Client do
|
|
195
215
|
end
|
196
216
|
end
|
197
217
|
|
198
|
-
unless ENV["CI"]
|
199
|
-
describe "DELETE /api/connections/:name" do
|
200
|
-
it "closes the connection" do
|
201
|
-
pending "Needs investigation, DELETE does not seem to close the connection"
|
202
|
-
xs = subject.list_connections
|
203
|
-
c = subject.close_connection(xs.first.name)
|
204
|
-
|
205
|
-
expect(c.name).to match(/127.0.0.1/)
|
206
|
-
expect(c.client_properties.product).to eq("Bunny")
|
207
|
-
|
208
|
-
expect(@connection).to_not be_open
|
209
|
-
end
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
218
|
|
214
219
|
#
|
215
220
|
# Channels
|
216
221
|
#
|
217
222
|
|
218
223
|
describe "GET /api/channels" do
|
219
|
-
before :all do
|
220
|
-
@channel = @connection.create_channel
|
221
|
-
end
|
222
|
-
|
223
224
|
it "returns a list of all active channels" do
|
224
|
-
|
225
|
-
|
225
|
+
conn = Bunny.new; conn.start
|
226
|
+
ch = conn.create_channel
|
227
|
+
await_event_propagation
|
228
|
+
xs = subject.list_channels
|
229
|
+
f = xs.first
|
226
230
|
|
227
231
|
expect(f.number).to be >= 1
|
228
232
|
expect(f.prefetch_count).to be >= 0
|
233
|
+
|
234
|
+
ch.close
|
235
|
+
conn.close
|
229
236
|
end
|
230
237
|
end
|
231
238
|
|
232
239
|
describe "GET /api/channels/:name" do
|
233
|
-
before :all do
|
234
|
-
@channel = @connection.create_channel
|
235
|
-
end
|
236
|
-
|
237
240
|
it "returns information about the channel" do
|
238
|
-
|
239
|
-
|
241
|
+
conn = Bunny.new; conn.start
|
242
|
+
ch = conn.create_channel
|
243
|
+
|
244
|
+
await_event_propagation
|
245
|
+
xs = subject.list_channels
|
246
|
+
c = subject.channel_info(xs.first.name)
|
240
247
|
|
241
248
|
expect(c.number).to be >= 1
|
242
249
|
expect(c.prefetch_count).to be >= 0
|
250
|
+
|
251
|
+
ch.close
|
252
|
+
conn.close
|
243
253
|
end
|
244
254
|
end
|
245
255
|
|
@@ -281,54 +291,63 @@ describe RabbitMQ::HTTP::Client do
|
|
281
291
|
end
|
282
292
|
|
283
293
|
describe "PUT /api/exchanges/:vhost/:name" do
|
284
|
-
before :
|
285
|
-
@channel = @
|
294
|
+
before :each do
|
295
|
+
@channel = @conn.create_channel
|
286
296
|
end
|
287
297
|
|
288
|
-
after :
|
298
|
+
after :each do
|
289
299
|
@channel.close
|
290
300
|
end
|
291
301
|
|
292
302
|
let(:exchange_name) { "httpdeclared" }
|
293
303
|
|
294
304
|
it "declares an exchange" do
|
295
|
-
subject.declare_exchange("/", exchange_name, :
|
305
|
+
subject.declare_exchange("/", exchange_name, durable: false, type: "fanout")
|
296
306
|
|
297
|
-
x = @channel.fanout(exchange_name, :
|
307
|
+
x = @channel.fanout(exchange_name, durable: false, auto_delete: false)
|
298
308
|
x.delete
|
299
309
|
end
|
300
310
|
end
|
301
311
|
|
302
312
|
describe "DELETE /api/exchanges/:vhost/:name" do
|
303
|
-
before :
|
304
|
-
@channel = @
|
313
|
+
before :each do
|
314
|
+
@channel = @conn.create_channel
|
305
315
|
end
|
306
316
|
|
307
|
-
after :
|
317
|
+
after :each do
|
308
318
|
@channel.close
|
309
319
|
end
|
310
320
|
|
311
321
|
let(:exchange_name) { "httpdeclared" }
|
312
322
|
|
313
323
|
it "deletes an exchange" do
|
314
|
-
x = @channel.fanout(exchange_name, :
|
324
|
+
x = @channel.fanout(exchange_name, durable: false)
|
315
325
|
subject.delete_exchange("/", exchange_name)
|
316
326
|
end
|
327
|
+
|
328
|
+
# HTTP client tries to uncompress an empty response :( MK
|
329
|
+
it "doesn't delete used exchange" do
|
330
|
+
q = @channel.queue("")
|
331
|
+
e = @channel.fanout(exchange_name, durable: false)
|
332
|
+
q.bind(e)
|
333
|
+
expect do
|
334
|
+
subject.delete_exchange("/", exchange_name, true)
|
335
|
+
end.to raise_error(Faraday::ClientError)
|
336
|
+
end
|
317
337
|
end
|
318
338
|
|
319
339
|
|
320
340
|
describe "GET /api/exchanges/:vhost/:name/bindings/source" do
|
321
|
-
before :
|
322
|
-
@channel = @
|
341
|
+
before :each do
|
342
|
+
@channel = @conn.create_channel
|
323
343
|
end
|
324
|
-
|
325
|
-
after :all do
|
344
|
+
after :each do
|
326
345
|
@channel.close
|
327
346
|
end
|
328
347
|
|
329
348
|
it "returns a list of all bindings in which the given exchange is the source" do
|
330
|
-
e = @channel.fanout("http.api.tests.fanout", :
|
331
|
-
q = @channel.queue("http.api.tests.queue1", :
|
349
|
+
e = @channel.fanout("http.api.tests.fanout", durable: true)
|
350
|
+
q = @channel.queue("http.api.tests.queue1", durable: true)
|
332
351
|
q.bind(e)
|
333
352
|
|
334
353
|
xs = subject.list_bindings_by_source("/", "http.api.tests.fanout")
|
@@ -347,13 +366,16 @@ describe RabbitMQ::HTTP::Client do
|
|
347
366
|
|
348
367
|
|
349
368
|
describe "GET /api/exchanges/:vhost/:name/bindings/destination" do
|
350
|
-
before :
|
351
|
-
@channel = @
|
369
|
+
before :each do
|
370
|
+
@channel = @conn.create_channel
|
371
|
+
end
|
372
|
+
after :each do
|
373
|
+
@channel.close
|
352
374
|
end
|
353
375
|
|
354
|
-
it "returns a list of all bindings in which the given exchange is the
|
355
|
-
e1 = @channel.fanout("http.api.tests.fanout1", :
|
356
|
-
e2 = @channel.fanout("http.api.tests.fanout2", :
|
376
|
+
it "returns a list of all bindings in which the given exchange is the destination" do
|
377
|
+
e1 = @channel.fanout("http.api.tests.fanout1", durable: true)
|
378
|
+
e2 = @channel.fanout("http.api.tests.fanout2", durable: true)
|
357
379
|
e1.bind(e2)
|
358
380
|
|
359
381
|
xs = subject.list_bindings_by_destination("/", "http.api.tests.fanout1")
|
@@ -382,39 +404,53 @@ describe RabbitMQ::HTTP::Client do
|
|
382
404
|
#
|
383
405
|
|
384
406
|
describe "GET /api/queues" do
|
385
|
-
before :
|
386
|
-
@channel = @
|
407
|
+
before :each do
|
408
|
+
@channel = @conn.create_channel
|
409
|
+
end
|
410
|
+
after :each do
|
411
|
+
@channel.close
|
387
412
|
end
|
388
413
|
|
389
414
|
it "returns a list of all queues" do
|
390
|
-
q = @channel.queue("", :
|
415
|
+
q = @channel.queue("", durable: false)
|
391
416
|
|
392
417
|
xs = subject.list_queues
|
393
418
|
expect(xs.detect { |x| x.name == q.name }).to_not be_empty
|
419
|
+
|
420
|
+
subject.delete_queue("/", q.name)
|
394
421
|
end
|
395
422
|
end
|
396
423
|
|
397
424
|
describe "GET /api/queues/:vhost" do
|
398
|
-
before :
|
399
|
-
@channel = @
|
425
|
+
before :each do
|
426
|
+
@channel = @conn.create_channel
|
427
|
+
end
|
428
|
+
after :each do
|
429
|
+
@channel.close
|
400
430
|
end
|
401
431
|
|
402
432
|
it "returns a list of all queues" do
|
403
|
-
q = @channel.queue("", :
|
433
|
+
q = @channel.queue("", durable: false)
|
404
434
|
|
405
435
|
xs = subject.list_queues("/")
|
406
436
|
expect(xs.detect { |x| x.name == q.name }).to_not be_empty
|
437
|
+
|
438
|
+
subject.delete_queue("/", q.name)
|
407
439
|
end
|
408
440
|
end
|
409
441
|
|
410
442
|
describe "GET /api/queues/:vhost/:name" do
|
411
443
|
context "when queue exists" do
|
412
|
-
before :
|
413
|
-
@channel = @
|
444
|
+
before :each do
|
445
|
+
@channel = @conn.create_channel
|
446
|
+
end
|
447
|
+
after :each do
|
448
|
+
@channel.close
|
414
449
|
end
|
415
450
|
|
416
451
|
it "returns information about a queue" do
|
417
|
-
q = @channel.queue("", :
|
452
|
+
q = @channel.queue("", durable: false)
|
453
|
+
await_event_propagation
|
418
454
|
i = subject.queue_info("/", q.name)
|
419
455
|
|
420
456
|
expect(i.durable).to eq(false)
|
@@ -424,6 +460,8 @@ describe RabbitMQ::HTTP::Client do
|
|
424
460
|
expect(i.auto_delete).to eq(q.auto_delete?)
|
425
461
|
expect(i.active_consumers).to be_nil
|
426
462
|
expect(i.backing_queue_status.avg_ack_egress_rate).to eq(0.0)
|
463
|
+
|
464
|
+
subject.delete_queue("/", q.name)
|
427
465
|
end
|
428
466
|
end
|
429
467
|
|
@@ -437,36 +475,36 @@ describe RabbitMQ::HTTP::Client do
|
|
437
475
|
end
|
438
476
|
|
439
477
|
describe "PUT /api/queues/:vhost/:name" do
|
440
|
-
before :
|
441
|
-
@channel = @
|
478
|
+
before :each do
|
479
|
+
@channel = @conn.create_channel
|
442
480
|
end
|
443
481
|
|
444
482
|
let(:queue_name) { "httpdeclared" }
|
445
483
|
|
446
484
|
it "declares a queue" do
|
447
|
-
subject.declare_queue("/", queue_name, :
|
485
|
+
subject.declare_queue("/", queue_name, durable: false, auto_delete: true)
|
448
486
|
|
449
|
-
q = @channel.queue(queue_name, :
|
487
|
+
q = @channel.queue(queue_name, durable: false, auto_delete: true)
|
450
488
|
q.delete
|
451
489
|
end
|
452
490
|
end
|
453
491
|
|
454
492
|
describe "DELETE /api/queues/:vhost/:name" do
|
455
|
-
before :
|
456
|
-
@channel = @
|
493
|
+
before :each do
|
494
|
+
@channel = @conn.create_channel
|
457
495
|
end
|
458
496
|
|
459
497
|
let(:queue_name) { "httpdeclared" }
|
460
498
|
|
461
499
|
it "deletes a queue" do
|
462
|
-
q = @channel.queue(queue_name, :
|
500
|
+
q = @channel.queue(queue_name, durable: false)
|
463
501
|
subject.delete_queue("/", queue_name)
|
464
502
|
end
|
465
503
|
end
|
466
504
|
|
467
505
|
describe "GET /api/queues/:vhost/:name/bindings" do
|
468
|
-
before :
|
469
|
-
@channel = @
|
506
|
+
before :each do
|
507
|
+
@channel = @conn.create_channel
|
470
508
|
end
|
471
509
|
|
472
510
|
it "returns a list of bindings for a queue" do
|
@@ -478,17 +516,22 @@ describe RabbitMQ::HTTP::Client do
|
|
478
516
|
|
479
517
|
expect(x.destination).to eq(q.name)
|
480
518
|
expect(x.destination_type).to eq("queue")
|
519
|
+
|
520
|
+
q.delete
|
481
521
|
end
|
482
522
|
end
|
483
523
|
|
484
524
|
describe "DELETE /api/queues/:vhost/:name/contents" do
|
485
|
-
before :
|
486
|
-
@channel = @
|
525
|
+
before :each do
|
526
|
+
@channel = @conn.create_channel
|
527
|
+
end
|
528
|
+
after :each do
|
529
|
+
@channel.close
|
487
530
|
end
|
488
531
|
|
489
532
|
it "purges a queue" do
|
490
533
|
q = @channel.queue("")
|
491
|
-
x = @channel.fanout("amq.fanout", :
|
534
|
+
x = @channel.fanout("amq.fanout", durable: true, auto_delete: false)
|
492
535
|
q.bind(x)
|
493
536
|
|
494
537
|
10.times do
|
@@ -506,13 +549,16 @@ describe RabbitMQ::HTTP::Client do
|
|
506
549
|
|
507
550
|
# yes, POST, because it potentially modifies the state (ordering) of the queue
|
508
551
|
describe "POST /api/queues/:vhost/:name/get" do
|
509
|
-
before :
|
510
|
-
@channel = @
|
552
|
+
before :each do
|
553
|
+
@channel = @conn.create_channel
|
554
|
+
end
|
555
|
+
after :each do
|
556
|
+
@channel.close
|
511
557
|
end
|
512
558
|
|
513
559
|
it "fetches a message from a queue, a la basic.get" do
|
514
560
|
q = @channel.queue("")
|
515
|
-
x = @channel.fanout("amq.fanout", :
|
561
|
+
x = @channel.fanout("amq.fanout", durable: true, auto_delete: false)
|
516
562
|
q.bind(x)
|
517
563
|
|
518
564
|
10.times do |i|
|
@@ -521,7 +567,10 @@ describe RabbitMQ::HTTP::Client do
|
|
521
567
|
sleep 0.7
|
522
568
|
|
523
569
|
expect(q.message_count).to eq(10)
|
524
|
-
|
570
|
+
# the requeueing arguments differ between RabbitMQ 3.7.0 and earlier versions,
|
571
|
+
# so pass both
|
572
|
+
xs = subject.get_messages("/", q.name, count: 10,
|
573
|
+
requeue: false, ackmode: "ack_requeue_false", encoding: "auto")
|
525
574
|
m = xs.first
|
526
575
|
|
527
576
|
expect(m.properties.content_type).to eq("application/xyz")
|
@@ -533,7 +582,18 @@ describe RabbitMQ::HTTP::Client do
|
|
533
582
|
end
|
534
583
|
|
535
584
|
describe "GET /api/bindings" do
|
585
|
+
before :each do
|
586
|
+
@channel = @conn.create_channel
|
587
|
+
end
|
588
|
+
after :each do
|
589
|
+
@channel.close
|
590
|
+
end
|
591
|
+
|
536
592
|
it "returns a list of all bindings" do
|
593
|
+
q = @channel.queue("")
|
594
|
+
x = @channel.fanout("amq.fanout", durable: true, auto_delete: false)
|
595
|
+
q.bind(x)
|
596
|
+
await_event_propagation
|
537
597
|
xs = subject.list_bindings
|
538
598
|
b = xs.first
|
539
599
|
|
@@ -542,11 +602,24 @@ describe RabbitMQ::HTTP::Client do
|
|
542
602
|
expect(b.source).to_not be_nil
|
543
603
|
expect(b.routing_key).to_not be_nil
|
544
604
|
expect(b.vhost).to_not be_nil
|
605
|
+
|
606
|
+
q.delete
|
545
607
|
end
|
546
608
|
end
|
547
609
|
|
548
610
|
describe "GET /api/bindings/:vhost" do
|
611
|
+
before :each do
|
612
|
+
@channel = @conn.create_channel
|
613
|
+
end
|
614
|
+
after :each do
|
615
|
+
@channel.close
|
616
|
+
end
|
617
|
+
|
549
618
|
it "returns a list of all bindings in a vhost" do
|
619
|
+
q = @channel.queue("")
|
620
|
+
x = @channel.fanout("amq.fanout", durable: true, auto_delete: false)
|
621
|
+
q.bind(x)
|
622
|
+
await_event_propagation
|
550
623
|
xs = subject.list_bindings("/")
|
551
624
|
b = xs.first
|
552
625
|
|
@@ -555,12 +628,17 @@ describe RabbitMQ::HTTP::Client do
|
|
555
628
|
expect(b.source).to_not be_nil
|
556
629
|
expect(b.routing_key).to_not be_nil
|
557
630
|
expect(b.vhost).to_not be_nil
|
631
|
+
|
632
|
+
q.delete
|
558
633
|
end
|
559
634
|
end
|
560
635
|
|
561
636
|
describe "GET /api/bindings/:vhost/e/:exchange/q/:queue" do
|
562
|
-
before :
|
563
|
-
@channel = @
|
637
|
+
before :each do
|
638
|
+
@channel = @conn.create_channel
|
639
|
+
end
|
640
|
+
after :each do
|
641
|
+
@channel.close
|
564
642
|
end
|
565
643
|
|
566
644
|
it "returns a list of all bindings between an exchange and a queue" do
|
@@ -568,6 +646,8 @@ describe RabbitMQ::HTTP::Client do
|
|
568
646
|
x = @channel.fanout("http.client.fanout")
|
569
647
|
q.bind(x)
|
570
648
|
|
649
|
+
await_event_propagation
|
650
|
+
|
571
651
|
xs = subject.list_bindings_between_queue_and_exchange("/", q.name, x.name)
|
572
652
|
b = xs.first
|
573
653
|
expect(b.destination).to eq(q.name)
|
@@ -583,8 +663,11 @@ describe RabbitMQ::HTTP::Client do
|
|
583
663
|
end
|
584
664
|
|
585
665
|
describe "POST /api/bindings/:vhost/e/:exchange/q/:queue" do
|
586
|
-
before :
|
587
|
-
@channel = @
|
666
|
+
before :each do
|
667
|
+
@channel = @conn.create_channel
|
668
|
+
end
|
669
|
+
after :each do
|
670
|
+
@channel.close
|
588
671
|
end
|
589
672
|
|
590
673
|
it "creates a binding between an exchange and a queue" do
|
@@ -603,8 +686,11 @@ describe RabbitMQ::HTTP::Client do
|
|
603
686
|
end
|
604
687
|
|
605
688
|
describe "GET /api/bindings/:vhost/e/:exchange/q/:queue/props" do
|
606
|
-
before :
|
607
|
-
@channel = @
|
689
|
+
before :each do
|
690
|
+
@channel = @conn.create_channel
|
691
|
+
end
|
692
|
+
after :each do
|
693
|
+
@channel.close
|
608
694
|
end
|
609
695
|
|
610
696
|
it "returns an individual binding between an exchange and a queue" do
|
@@ -619,13 +705,16 @@ describe RabbitMQ::HTTP::Client do
|
|
619
705
|
b2 = subject.queue_binding_info("/", q.name, x.name, b1.properties_key)
|
620
706
|
|
621
707
|
expect(b1).to eq(b2)
|
622
|
-
|
708
|
+
q.delete
|
623
709
|
end
|
624
710
|
end
|
625
711
|
|
626
712
|
describe "DELETE /api/bindings/:vhost/e/:exchange/q/:queue/props" do
|
627
|
-
before :
|
628
|
-
@channel = @
|
713
|
+
before :each do
|
714
|
+
@channel = @conn.create_channel
|
715
|
+
end
|
716
|
+
after :each do
|
717
|
+
@channel.close
|
629
718
|
end
|
630
719
|
|
631
720
|
it "deletes an individual binding between an exchange and a queue" do
|
@@ -648,6 +737,85 @@ describe RabbitMQ::HTTP::Client do
|
|
648
737
|
end
|
649
738
|
end
|
650
739
|
|
740
|
+
describe "POST /api/bindings/:vhost/e/:source_exchange/e/:destination_exchange" do
|
741
|
+
before :each do
|
742
|
+
@channel = @conn.create_channel
|
743
|
+
end
|
744
|
+
after :each do
|
745
|
+
@channel.close
|
746
|
+
end
|
747
|
+
|
748
|
+
it "creates a binding between two exchanges" do
|
749
|
+
routing_key = 'test.key'
|
750
|
+
sx = @channel.fanout("http.client.fanout_source")
|
751
|
+
dx = @channel.fanout("http.client.fanout_destination")
|
752
|
+
|
753
|
+
xs = subject.list_bindings_between_exchanges("/", dx.name, sx.name)
|
754
|
+
expect(xs).to be_empty
|
755
|
+
|
756
|
+
dx.bind(sx)
|
757
|
+
|
758
|
+
b = subject.bind_exchange("/", dx.name, sx.name, routing_key)
|
759
|
+
xs = subject.list_bindings_between_exchanges("/", dx.name, sx.name)
|
760
|
+
expect(xs).to_not be_empty
|
761
|
+
|
762
|
+
dx.delete
|
763
|
+
sx.delete
|
764
|
+
end
|
765
|
+
end
|
766
|
+
|
767
|
+
describe "GET /api/bindings/:vhost/e/:exchange/q/:queue/props" do
|
768
|
+
before :each do
|
769
|
+
@channel = @conn.create_channel
|
770
|
+
end
|
771
|
+
after :each do
|
772
|
+
@channel.close
|
773
|
+
end
|
774
|
+
|
775
|
+
it "returns an individual binding between two exchanges" do
|
776
|
+
routing_key = 'test.key'
|
777
|
+
sx = @channel.fanout("http.client.fanout_source")
|
778
|
+
dx = @channel.fanout("http.client.fanout_destination")
|
779
|
+
dx.bind(sx)
|
780
|
+
|
781
|
+
xs = subject.list_bindings_between_exchanges("/", dx.name, sx.name)
|
782
|
+
b1 = xs.first
|
783
|
+
|
784
|
+
b2 = subject.exchange_binding_info("/", dx.name, sx.name, b1.properties_key)
|
785
|
+
|
786
|
+
expect(b1).to eq(b2)
|
787
|
+
|
788
|
+
end
|
789
|
+
end
|
790
|
+
|
791
|
+
describe "DELETE /api/bindings/:vhost/e/:exchange/q/:queue/props" do
|
792
|
+
before :each do
|
793
|
+
@channel = @conn.create_channel
|
794
|
+
end
|
795
|
+
after :each do
|
796
|
+
@channel.close
|
797
|
+
end
|
798
|
+
|
799
|
+
it "deletes an individual binding between two exchanges" do
|
800
|
+
routing_key = 'test.key'
|
801
|
+
sx = @channel.fanout("http.client.fanout_source")
|
802
|
+
dx = @channel.fanout("http.client.fanout_destination")
|
803
|
+
dx.bind(sx)
|
804
|
+
|
805
|
+
xs = subject.list_bindings_between_exchanges("/", dx.name, sx.name)
|
806
|
+
b = xs.first
|
807
|
+
|
808
|
+
expect(subject.delete_exchange_binding("/", dx.name, sx.name, b.properties_key)).to eq(true)
|
809
|
+
|
810
|
+
xs = subject.list_bindings_between_exchanges("/", dx.name, sx.name)
|
811
|
+
|
812
|
+
expect(xs.size).to eq(0)
|
813
|
+
|
814
|
+
dx.delete
|
815
|
+
sx.delete
|
816
|
+
end
|
817
|
+
end
|
818
|
+
|
651
819
|
describe "GET /api/vhosts" do
|
652
820
|
it "returns a list of vhosts" do
|
653
821
|
xs = subject.list_vhosts
|
@@ -765,11 +933,22 @@ describe RabbitMQ::HTTP::Client do
|
|
765
933
|
end
|
766
934
|
|
767
935
|
describe "PUT /api/users/:name" do
|
768
|
-
|
769
|
-
|
936
|
+
context "with tags provided explicitly" do
|
937
|
+
it "updates information about a user" do
|
938
|
+
subject.update_user("alt", :tags => "http, policymaker, management", :password => "alt")
|
770
939
|
|
771
|
-
|
772
|
-
|
940
|
+
u = subject.user_info("alt")
|
941
|
+
expect(u.tags).to eq("http,policymaker,management")
|
942
|
+
end
|
943
|
+
end
|
944
|
+
|
945
|
+
context "without tags provided" do
|
946
|
+
it "uses blank tag list" do
|
947
|
+
subject.update_user("alt", :password => "alt")
|
948
|
+
|
949
|
+
u = subject.user_info("alt")
|
950
|
+
expect(u.tags).to eq("")
|
951
|
+
end
|
773
952
|
end
|
774
953
|
end
|
775
954
|
|
@@ -815,7 +994,7 @@ describe RabbitMQ::HTTP::Client do
|
|
815
994
|
|
816
995
|
describe "PUT /api/permissions/:vhost/:user" do
|
817
996
|
it "updates permissions of a user in a vhost" do
|
818
|
-
subject.update_permissions_of("/", "guest", :
|
997
|
+
subject.update_permissions_of("/", "guest", {write: ".*", read: ".*", configure: ".*"})
|
819
998
|
|
820
999
|
p = subject.list_permissions_of("/", "guest")
|
821
1000
|
|
@@ -827,14 +1006,13 @@ describe RabbitMQ::HTTP::Client do
|
|
827
1006
|
|
828
1007
|
describe "DELETE /api/permissions/:vhost/:user" do
|
829
1008
|
it "clears permissions of a user in a vhost" do
|
830
|
-
|
831
|
-
subject.
|
832
|
-
subject.update_permissions_of("/", "alt3", :write => ".*", :read => ".*", :configure => ".*")
|
1009
|
+
subject.create_user("alt3", {password: "s3cRE7"})
|
1010
|
+
subject.update_permissions_of("/", "alt3", {write: ".*", read: ".*", configure: ".*"}).inspect
|
833
1011
|
subject.clear_permissions_of("/", "alt3")
|
834
1012
|
|
835
|
-
|
836
|
-
|
837
|
-
|
1013
|
+
expect do
|
1014
|
+
subject.list_permissions_of("/", "alt3")
|
1015
|
+
end.to raise_error(Faraday::Error::ResourceNotFound)
|
838
1016
|
end
|
839
1017
|
end
|
840
1018
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabbitmq_http_api_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Klishin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -83,7 +83,8 @@ dependencies:
|
|
83
83
|
description: RabbitMQ HTTP API client for Ruby
|
84
84
|
email:
|
85
85
|
- michael@defprotocol.org
|
86
|
-
executables:
|
86
|
+
executables:
|
87
|
+
- before_build.sh
|
87
88
|
extensions: []
|
88
89
|
extra_rdoc_files: []
|
89
90
|
files:
|
@@ -95,6 +96,7 @@ files:
|
|
95
96
|
- LICENSE.txt
|
96
97
|
- README.md
|
97
98
|
- Rakefile
|
99
|
+
- bin/before_build.sh
|
98
100
|
- lib/rabbitmq/http/client.rb
|
99
101
|
- lib/rabbitmq/http/client/version.rb
|
100
102
|
- rabbitmq_http_api_client.gemspec
|
@@ -122,11 +124,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
124
|
version: '0'
|
123
125
|
requirements: []
|
124
126
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.
|
127
|
+
rubygems_version: 2.5.1
|
126
128
|
signing_key:
|
127
129
|
specification_version: 4
|
128
130
|
summary: RabbitMQ HTTP API client for Ruby
|
129
131
|
test_files:
|
130
132
|
- spec/integration/client_spec.rb
|
131
133
|
- spec/spec_helper.rb
|
132
|
-
has_rdoc:
|