rabbitmq_http_api_client 0.2.0.pre1 → 0.2.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.
- data/ChangeLog.md +7 -1
- data/README.md +2 -2
- data/lib/rabbitmq/http/client/version.rb +1 -1
- data/lib/rabbitmq/http/client.rb +150 -8
- data/spec/integration/client_spec.rb +200 -117
- metadata +6 -6
data/ChangeLog.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
## Changes Between 0.1.0 and 0.2.0
|
2
2
|
|
3
|
-
|
3
|
+
### Support for more HTTP API operations
|
4
|
+
|
5
|
+
* Operations on queues
|
6
|
+
* Operations on users
|
7
|
+
* Operations on permissions
|
8
|
+
* Operations on parameters
|
9
|
+
* Operations on policies
|
4
10
|
|
5
11
|
|
6
12
|
## Original Release: 0.1.0
|
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 '
|
36
|
+
gem 'rabbitmq_http_api_client'
|
37
37
|
|
38
38
|
And then execute:
|
39
39
|
|
@@ -41,7 +41,7 @@ And then execute:
|
|
41
41
|
|
42
42
|
Or install it yourself as:
|
43
43
|
|
44
|
-
$ gem install
|
44
|
+
$ gem install rabbitmq_http_api_client
|
45
45
|
|
46
46
|
## Usage
|
47
47
|
|
data/lib/rabbitmq/http/client.rb
CHANGED
@@ -42,7 +42,7 @@ module RabbitMQ
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def list_definitions
|
45
|
-
|
45
|
+
decode_resource(@connection.get("/api/definitions"))
|
46
46
|
end
|
47
47
|
|
48
48
|
def upload_definitions(defs)
|
@@ -106,15 +106,31 @@ module RabbitMQ
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def declare_queue(vhost, name, attributes)
|
109
|
-
|
109
|
+
response = @connection.put("/api/queues/#{uri_encode(vhost)}/#{uri_encode(name)}") do |req|
|
110
|
+
req.headers['Content-Type'] = "application/json"
|
111
|
+
req.body = MultiJson.dump(attributes)
|
112
|
+
end
|
113
|
+
decode_resource(response)
|
110
114
|
end
|
111
115
|
|
112
116
|
def delete_queue(vhost, name)
|
113
|
-
|
117
|
+
decode_resource(@connection.delete("/api/queues/#{uri_encode(vhost)}/#{uri_encode(name)}"))
|
118
|
+
end
|
119
|
+
|
120
|
+
def list_queue_bindings(vhost, queue)
|
121
|
+
decode_resource_collection(@connection.get("/api/queues/#{uri_encode(vhost)}/#{uri_encode(queue)}/bindings"))
|
114
122
|
end
|
115
123
|
|
116
124
|
def purge_queue(vhost, name)
|
117
|
-
|
125
|
+
decode_resource(@connection.delete("/api/queues/#{uri_encode(vhost)}/#{uri_encode(name)}/contents"))
|
126
|
+
end
|
127
|
+
|
128
|
+
def get_messages(vhost, name, options)
|
129
|
+
response = @connection.post("/api/queues/#{uri_encode(vhost)}/#{uri_encode(name)}/get") do |req|
|
130
|
+
req.headers['Content-Type'] = "application/json"
|
131
|
+
req.body = MultiJson.dump(options)
|
132
|
+
end
|
133
|
+
decode_resource_collection(response)
|
118
134
|
end
|
119
135
|
|
120
136
|
|
@@ -128,6 +144,13 @@ module RabbitMQ
|
|
128
144
|
decode_resource_collection(@connection.get(path))
|
129
145
|
end
|
130
146
|
|
147
|
+
def list_bindings_between_queue_and_exchange(vhost, queue, exchange)
|
148
|
+
decode_resource_collection(@connection.get("/api/bindings/#{uri_encode(vhost)}/e/#{uri_encode(exchange)}/q/#{uri_encode(queue)}"))
|
149
|
+
end
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
|
131
154
|
def list_vhosts
|
132
155
|
decode_resource_collection(@connection.get("/api/vhosts"))
|
133
156
|
end
|
@@ -136,21 +159,140 @@ module RabbitMQ
|
|
136
159
|
decode_resource(@connection.get("/api/vhosts/#{uri_encode(name)}"))
|
137
160
|
end
|
138
161
|
|
162
|
+
def create_vhost(name)
|
163
|
+
response = @connection.put("/api/vhosts/#{uri_encode(name)}") do |req|
|
164
|
+
req.headers['Content-Type'] = "application/json"
|
165
|
+
end
|
166
|
+
decode_resource(response)
|
167
|
+
end
|
168
|
+
|
169
|
+
def delete_vhost(name)
|
170
|
+
decode_resource(@connection.delete("/api/vhosts/#{uri_encode(name)}"))
|
171
|
+
end
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
def list_permissions(vhost = nil)
|
176
|
+
path = if vhost
|
177
|
+
"/api/vhosts/#{uri_encode(vhost)}/permissions"
|
178
|
+
else
|
179
|
+
"/api/permissions"
|
180
|
+
end
|
181
|
+
|
182
|
+
decode_resource_collection(@connection.get(path))
|
183
|
+
end
|
184
|
+
|
185
|
+
def list_permissions_of(vhost, user)
|
186
|
+
decode_resource(@connection.get("/api/permissions/#{uri_encode(vhost)}/#{uri_encode(user)}"))
|
187
|
+
end
|
188
|
+
|
189
|
+
def update_permissions_of(vhost, user, attributes)
|
190
|
+
response = @connection.put("/api/permissions/#{uri_encode(vhost)}/#{uri_encode(user)}") do |req|
|
191
|
+
req.headers['Content-Type'] = "application/json"
|
192
|
+
req.body = MultiJson.dump(attributes)
|
193
|
+
end
|
194
|
+
decode_resource(response)
|
195
|
+
end
|
196
|
+
|
197
|
+
def clear_permissions_of(vhost, user)
|
198
|
+
decode_resource(@connection.delete("/api/permissions/#{uri_encode(vhost)}/#{uri_encode(user)}"))
|
199
|
+
end
|
200
|
+
|
139
201
|
|
140
202
|
|
141
203
|
def list_users
|
142
204
|
decode_resource_collection(@connection.get("/api/users"))
|
143
205
|
end
|
144
206
|
|
207
|
+
def user_info(name)
|
208
|
+
decode_resource(@connection.get("/api/users/#{uri_encode(name)}"))
|
209
|
+
end
|
210
|
+
|
211
|
+
def update_user(name, attributes)
|
212
|
+
response = @connection.put("/api/users/#{uri_encode(name)}") do |req|
|
213
|
+
req.headers['Content-Type'] = "application/json"
|
214
|
+
req.body = MultiJson.dump(attributes)
|
215
|
+
end
|
216
|
+
decode_resource(response)
|
217
|
+
end
|
218
|
+
alias create_user update_user
|
219
|
+
|
220
|
+
def delete_user(name)
|
221
|
+
decode_resource(@connection.delete("/api/users/#{uri_encode(name)}"))
|
222
|
+
end
|
145
223
|
|
224
|
+
def user_permissions(name)
|
225
|
+
decode_resource_collection(@connection.get("/api/users/#{uri_encode(name)}/permissions"))
|
226
|
+
end
|
146
227
|
|
147
|
-
def
|
148
|
-
|
228
|
+
def whoami
|
229
|
+
decode_resource(@connection.get("/api/whoami"))
|
149
230
|
end
|
150
231
|
|
151
232
|
|
152
|
-
|
153
|
-
|
233
|
+
|
234
|
+
def list_policies(vhost = nil)
|
235
|
+
path = if vhost
|
236
|
+
"/api/policies/#{uri_encode(vhost)}"
|
237
|
+
else
|
238
|
+
"/api/policies"
|
239
|
+
end
|
240
|
+
|
241
|
+
decode_resource_collection(@connection.get(path))
|
242
|
+
end
|
243
|
+
|
244
|
+
def list_policies_of(vhost, name = nil)
|
245
|
+
path = if name
|
246
|
+
"/api/policies/#{uri_encode(vhost)}/#{uri_encode(name)}"
|
247
|
+
else
|
248
|
+
"/api/policies/#{uri_encode(vhost)}"
|
249
|
+
end
|
250
|
+
decode_resource_collection(@connection.get(path))
|
251
|
+
end
|
252
|
+
|
253
|
+
def update_policies_of(vhost, name, attributes)
|
254
|
+
response = @connection.put("/api/policies/#{uri_encode(vhost)}/#{uri_encode(name)}") do |req|
|
255
|
+
req.headers['Content-Type'] = "application/json"
|
256
|
+
req.body = MultiJson.dump(attributes)
|
257
|
+
end
|
258
|
+
decode_resource(response)
|
259
|
+
end
|
260
|
+
|
261
|
+
def clear_policies_of(vhost, name)
|
262
|
+
decode_resource(@connection.delete("/api/policies/#{uri_encode(vhost)}/#{uri_encode(name)}"))
|
263
|
+
end
|
264
|
+
|
265
|
+
|
266
|
+
|
267
|
+
|
268
|
+
def list_parameters(component = nil)
|
269
|
+
path = if component
|
270
|
+
"/api/parameters/#{uri_encode(component)}"
|
271
|
+
else
|
272
|
+
"/api/parameters"
|
273
|
+
end
|
274
|
+
decode_resource_collection(@connection.get(path))
|
275
|
+
end
|
276
|
+
|
277
|
+
def list_parameters_of(component, vhost, name = nil)
|
278
|
+
path = if name
|
279
|
+
"/api/parameters/#{uri_encode(component)}/#{uri_encode(vhost)}/#{uri_encode(name)}"
|
280
|
+
else
|
281
|
+
"/api/parameters/#{uri_encode(component)}/#{uri_encode(vhost)}"
|
282
|
+
end
|
283
|
+
decode_resource_collection(@connection.get(path))
|
284
|
+
end
|
285
|
+
|
286
|
+
def update_parameters_of(component, vhost, name, attributes)
|
287
|
+
response = @connection.put("/api/parameters/#{uri_encode(component)}/#{uri_encode(vhost)}/#{uri_encode(name)}") do |req|
|
288
|
+
req.headers['Content-Type'] = "application/json"
|
289
|
+
req.body = MultiJson.dump(attributes)
|
290
|
+
end
|
291
|
+
decode_resource(response)
|
292
|
+
end
|
293
|
+
|
294
|
+
def clear_parameters_of(component, vhost, name)
|
295
|
+
decode_resource(@connection.delete("/api/parameters/#{uri_encode(component)}/#{uri_encode(vhost)}/#{uri_encode(name)}"))
|
154
296
|
end
|
155
297
|
|
156
298
|
|
@@ -1,12 +1,21 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe RabbitMQ::HTTP::Client do
|
4
|
-
let(:endpoint) { "http://127.0.0.1:
|
4
|
+
let(:endpoint) { "http://127.0.0.1:15672" }
|
5
5
|
|
6
6
|
subject do
|
7
7
|
described_class.connect(endpoint, :username => "guest", :password => "guest")
|
8
8
|
end
|
9
9
|
|
10
|
+
before :all do
|
11
|
+
@connection = Bunny.new
|
12
|
+
@connection.start
|
13
|
+
end
|
14
|
+
|
15
|
+
after :all do
|
16
|
+
@connection.close
|
17
|
+
end
|
18
|
+
|
10
19
|
|
11
20
|
#
|
12
21
|
# Overview
|
@@ -94,11 +103,19 @@ describe RabbitMQ::HTTP::Client do
|
|
94
103
|
#
|
95
104
|
|
96
105
|
describe "GET /api/definitions" do
|
106
|
+
it "returns a list of all resources/definitions (vhosts, users, permissions, queues, exchanges, bindings, etc)" do
|
107
|
+
xs = subject.list_definitions
|
97
108
|
|
109
|
+
xs.bindings.should be_instance_of(Array)
|
110
|
+
xs.queues.should be_instance_of(Array)
|
111
|
+
xs.exchanges.should be_instance_of(Array)
|
112
|
+
xs.users.should be_instance_of(Array)
|
113
|
+
xs.vhosts.should be_instance_of(Array)
|
114
|
+
end
|
98
115
|
end
|
99
116
|
|
100
117
|
describe "POST /api/definitions" do
|
101
|
-
|
118
|
+
it "uploads definitions to RabbitMQ"
|
102
119
|
end
|
103
120
|
|
104
121
|
#
|
@@ -110,9 +127,6 @@ describe RabbitMQ::HTTP::Client do
|
|
110
127
|
@connection = Bunny.new
|
111
128
|
@connection.start
|
112
129
|
end
|
113
|
-
after :all do
|
114
|
-
@connection.close
|
115
|
-
end
|
116
130
|
|
117
131
|
it "returns a list of all active connections" do
|
118
132
|
xs = subject.list_connections
|
@@ -124,14 +138,6 @@ describe RabbitMQ::HTTP::Client do
|
|
124
138
|
end
|
125
139
|
|
126
140
|
describe "GET /api/connections/:name" do
|
127
|
-
before :all do
|
128
|
-
@connection = Bunny.new
|
129
|
-
@connection.start
|
130
|
-
end
|
131
|
-
after :all do
|
132
|
-
@connection.close
|
133
|
-
end
|
134
|
-
|
135
141
|
it "returns information about the connection" do
|
136
142
|
xs = subject.list_connections
|
137
143
|
c = subject.connection_info(xs.first.name)
|
@@ -142,15 +148,6 @@ describe RabbitMQ::HTTP::Client do
|
|
142
148
|
end
|
143
149
|
|
144
150
|
describe "DELETE /api/connections/:name" do
|
145
|
-
before :all do
|
146
|
-
@connection = Bunny.new
|
147
|
-
@connection.start
|
148
|
-
end
|
149
|
-
after :all do
|
150
|
-
@connection.close if @connection.open?
|
151
|
-
end
|
152
|
-
|
153
|
-
|
154
151
|
it "closes the connection" do
|
155
152
|
pending "Needs investigation, DELETE does not seem to close the connection"
|
156
153
|
xs = subject.list_connections
|
@@ -170,13 +167,8 @@ describe RabbitMQ::HTTP::Client do
|
|
170
167
|
|
171
168
|
describe "GET /api/channels" do
|
172
169
|
before :all do
|
173
|
-
@connection = Bunny.new
|
174
|
-
@connection.start
|
175
170
|
@channel = @connection.create_channel
|
176
171
|
end
|
177
|
-
after :all do
|
178
|
-
@connection.close
|
179
|
-
end
|
180
172
|
|
181
173
|
it "returns a list of all active channels" do
|
182
174
|
xs = subject.list_channels
|
@@ -189,13 +181,8 @@ describe RabbitMQ::HTTP::Client do
|
|
189
181
|
|
190
182
|
describe "GET /api/channels/:name" do
|
191
183
|
before :all do
|
192
|
-
@connection = Bunny.new
|
193
|
-
@connection.start
|
194
184
|
@channel = @connection.create_channel
|
195
185
|
end
|
196
|
-
after :all do
|
197
|
-
@connection.close
|
198
|
-
end
|
199
186
|
|
200
187
|
it "returns information about the channel" do
|
201
188
|
xs = subject.list_channels
|
@@ -247,13 +234,8 @@ describe RabbitMQ::HTTP::Client do
|
|
247
234
|
|
248
235
|
describe "GET /api/exchanges/:vhost/:name/bindings/source" do
|
249
236
|
before :all do
|
250
|
-
@connection = Bunny.new
|
251
|
-
@connection.start
|
252
237
|
@channel = @connection.create_channel
|
253
238
|
end
|
254
|
-
after :all do
|
255
|
-
@connection.close
|
256
|
-
end
|
257
239
|
|
258
240
|
it "returns a list of all bindings in which the given exchange is the source" do
|
259
241
|
e = @channel.fanout("http.api.tests.fanout", :durable => true)
|
@@ -277,13 +259,8 @@ describe RabbitMQ::HTTP::Client do
|
|
277
259
|
|
278
260
|
describe "GET /api/exchanges/:vhost/:name/bindings/destination" do
|
279
261
|
before :all do
|
280
|
-
@connection = Bunny.new
|
281
|
-
@connection.start
|
282
262
|
@channel = @connection.create_channel
|
283
263
|
end
|
284
|
-
after :all do
|
285
|
-
@connection.close
|
286
|
-
end
|
287
264
|
|
288
265
|
it "returns a list of all bindings in which the given exchange is the source" do
|
289
266
|
e1 = @channel.fanout("http.api.tests.fanout1", :durable => true)
|
@@ -312,13 +289,8 @@ describe RabbitMQ::HTTP::Client do
|
|
312
289
|
|
313
290
|
describe "GET /api/queues" do
|
314
291
|
before :all do
|
315
|
-
@connection = Bunny.new
|
316
|
-
@connection.start
|
317
292
|
@channel = @connection.create_channel
|
318
293
|
end
|
319
|
-
after :all do
|
320
|
-
@connection.close
|
321
|
-
end
|
322
294
|
|
323
295
|
it "returns a list of all queues" do
|
324
296
|
q = @channel.queue("", :exclusive => true)
|
@@ -330,13 +302,8 @@ describe RabbitMQ::HTTP::Client do
|
|
330
302
|
|
331
303
|
describe "GET /api/queues/:vhost" do
|
332
304
|
before :all do
|
333
|
-
@connection = Bunny.new
|
334
|
-
@connection.start
|
335
305
|
@channel = @connection.create_channel
|
336
306
|
end
|
337
|
-
after :all do
|
338
|
-
@connection.close
|
339
|
-
end
|
340
307
|
|
341
308
|
it "returns a list of all queues" do
|
342
309
|
q = @channel.queue("", :exclusive => true)
|
@@ -348,13 +315,8 @@ describe RabbitMQ::HTTP::Client do
|
|
348
315
|
|
349
316
|
describe "GET /api/queues/:vhost/:name" do
|
350
317
|
before :all do
|
351
|
-
@connection = Bunny.new
|
352
|
-
@connection.start
|
353
318
|
@channel = @connection.create_channel
|
354
319
|
end
|
355
|
-
after :all do
|
356
|
-
@connection.close
|
357
|
-
end
|
358
320
|
|
359
321
|
it "returns information about a queue" do
|
360
322
|
q = @channel.queue("", :exclusive => true, :durable => false)
|
@@ -372,31 +334,98 @@ describe RabbitMQ::HTTP::Client do
|
|
372
334
|
|
373
335
|
describe "PUT /api/queues/:vhost/:name" do
|
374
336
|
before :all do
|
375
|
-
@connection = Bunny.new
|
376
|
-
@connection.start
|
377
337
|
@channel = @connection.create_channel
|
378
338
|
end
|
379
|
-
after :all do
|
380
|
-
@connection.close
|
381
|
-
end
|
382
339
|
|
383
|
-
|
340
|
+
let(:queue_name) { "httpdeclared" }
|
341
|
+
|
342
|
+
it "declares a queue" do
|
343
|
+
subject.declare_queue("/", queue_name, :durable => false, :auto_delete => true)
|
344
|
+
|
345
|
+
q = @channel.queue(queue_name, :durable => false, :auto_delete => true)
|
346
|
+
q.delete
|
347
|
+
end
|
384
348
|
end
|
385
349
|
|
386
350
|
describe "DELETE /api/queues/:vhost/:name" do
|
387
|
-
|
351
|
+
before :all do
|
352
|
+
@channel = @connection.create_channel
|
353
|
+
end
|
354
|
+
|
355
|
+
let(:queue_name) { "httpdeclared" }
|
356
|
+
|
357
|
+
it "deletes a queue" do
|
358
|
+
q = @channel.queue(queue_name, :durable => false)
|
359
|
+
subject.delete_queue("/", queue_name)
|
360
|
+
end
|
388
361
|
end
|
389
362
|
|
390
363
|
describe "GET /api/queues/:vhost/:name/bindings" do
|
391
|
-
|
364
|
+
before :all do
|
365
|
+
@channel = @connection.create_channel
|
366
|
+
end
|
367
|
+
|
368
|
+
it "returns a list of bindings for a queue" do
|
369
|
+
q = @channel.queue("")
|
370
|
+
q.bind("amq.fanout")
|
371
|
+
|
372
|
+
xs = subject.list_queue_bindings("/", q.name)
|
373
|
+
x = xs.first
|
374
|
+
|
375
|
+
x.destination.should == q.name
|
376
|
+
x.destination_type.should == "queue"
|
377
|
+
end
|
392
378
|
end
|
393
379
|
|
394
380
|
describe "DELETE /api/queues/:vhost/:name/contents" do
|
395
|
-
|
381
|
+
before :all do
|
382
|
+
@channel = @connection.create_channel
|
383
|
+
end
|
384
|
+
|
385
|
+
it "purges a queue" do
|
386
|
+
q = @channel.queue("")
|
387
|
+
x = @channel.fanout("amq.fanout", :durable => true, :auto_delete => false)
|
388
|
+
q.bind(x)
|
389
|
+
|
390
|
+
10.times do
|
391
|
+
x.publish("", :routing_key => q.name)
|
392
|
+
end
|
393
|
+
sleep 0.7
|
394
|
+
|
395
|
+
q.message_count.should == 10
|
396
|
+
subject.purge_queue("/", q.name)
|
397
|
+
sleep 0.5
|
398
|
+
q.message_count.should == 0
|
399
|
+
q.delete
|
400
|
+
end
|
396
401
|
end
|
397
402
|
|
398
|
-
|
399
|
-
|
403
|
+
# yes, POST, because it potentially modifies the state (ordering) of the queue
|
404
|
+
describe "POST /api/queues/:vhost/:name/get" do
|
405
|
+
before :all do
|
406
|
+
@channel = @connection.create_channel
|
407
|
+
end
|
408
|
+
|
409
|
+
it "fetches a message from a queue, a la basic.get" do
|
410
|
+
q = @channel.queue("")
|
411
|
+
x = @channel.fanout("amq.fanout", :durable => true, :auto_delete => false)
|
412
|
+
q.bind(x)
|
413
|
+
|
414
|
+
10.times do |i|
|
415
|
+
x.publish("msg #{i}", :routing_key => q.name, :content_type => "application/xyz")
|
416
|
+
end
|
417
|
+
sleep 0.7
|
418
|
+
|
419
|
+
q.message_count.should == 10
|
420
|
+
xs = subject.get_messages("/", q.name, :count => 10, :requeue => false, :encoding => "auto")
|
421
|
+
m = xs.first
|
422
|
+
|
423
|
+
m.properties.content_type.should == "application/xyz"
|
424
|
+
m.payload.should == "msg 0"
|
425
|
+
m.payload_encoding.should == "string"
|
426
|
+
|
427
|
+
q.delete
|
428
|
+
end
|
400
429
|
end
|
401
430
|
|
402
431
|
describe "GET /api/bindings" do
|
@@ -426,7 +455,26 @@ describe RabbitMQ::HTTP::Client do
|
|
426
455
|
end
|
427
456
|
|
428
457
|
describe "GET /api/bindings/:vhost/e/:exchange/q/:queue" do
|
429
|
-
|
458
|
+
before :all do
|
459
|
+
@channel = @connection.create_channel
|
460
|
+
end
|
461
|
+
|
462
|
+
it "returns a list of all bindings between an exchange and a queue" do
|
463
|
+
q = @channel.queue("")
|
464
|
+
x = @channel.fanout("http.client.fanout")
|
465
|
+
q.bind(x)
|
466
|
+
|
467
|
+
xs = subject.list_bindings_between_queue_and_exchange("/", q.name, x.name)
|
468
|
+
b = xs.first
|
469
|
+
b.destination.should == q.name
|
470
|
+
b.destination_type.should == "queue"
|
471
|
+
b.source.should == x.name
|
472
|
+
b.routing_key.should_not be_nil
|
473
|
+
b.vhost.should == "/"
|
474
|
+
|
475
|
+
q.delete
|
476
|
+
x.delete
|
477
|
+
end
|
430
478
|
end
|
431
479
|
|
432
480
|
describe "POST /api/bindings/:vhost/e/:exchange/q/:queue" do
|
@@ -460,16 +508,34 @@ describe RabbitMQ::HTTP::Client do
|
|
460
508
|
end
|
461
509
|
end
|
462
510
|
|
463
|
-
describe "
|
464
|
-
|
511
|
+
describe "PUT /api/vhosts/:name" do
|
512
|
+
let(:vhost) { "http-created" }
|
513
|
+
|
514
|
+
it "creates a vhost" do
|
515
|
+
subject.create_vhost(vhost)
|
516
|
+
subject.create_vhost(vhost)
|
517
|
+
|
518
|
+
v = subject.vhost_info(vhost)
|
519
|
+
v.name.should == vhost
|
520
|
+
end
|
465
521
|
end
|
466
522
|
|
467
|
-
describe "
|
468
|
-
|
523
|
+
describe "DELETE /api/vhosts/:name" do
|
524
|
+
let(:vhost) { "http-created2" }
|
525
|
+
|
526
|
+
it "deletes a vhost" do
|
527
|
+
subject.create_vhost(vhost)
|
528
|
+
subject.delete_vhost(vhost)
|
529
|
+
end
|
469
530
|
end
|
470
531
|
|
471
532
|
describe "GET /api/vhosts/:name/permissions" do
|
472
|
-
it "returns a list of permissions in a vhost"
|
533
|
+
it "returns a list of permissions in a vhost" do
|
534
|
+
xs = subject.list_permissions("/")
|
535
|
+
p = xs.detect { |x| x.user == "guest" }
|
536
|
+
|
537
|
+
p.read.should == ".*"
|
538
|
+
end
|
473
539
|
end
|
474
540
|
|
475
541
|
describe "GET /api/users" do
|
@@ -484,39 +550,85 @@ describe RabbitMQ::HTTP::Client do
|
|
484
550
|
end
|
485
551
|
|
486
552
|
describe "GET /api/users/:name" do
|
487
|
-
it "returns information about a user"
|
553
|
+
it "returns information about a user" do
|
554
|
+
u = subject.user_info("guest")
|
555
|
+
u.name.should == "guest"
|
556
|
+
u.tags.should == "administrator"
|
557
|
+
end
|
488
558
|
end
|
489
559
|
|
490
560
|
describe "PUT /api/users/:name" do
|
491
|
-
it "updates information about a user"
|
561
|
+
it "updates information about a user" do
|
562
|
+
subject.update_user("alt", :tags => "http", :password => "alt")
|
563
|
+
|
564
|
+
u = subject.user_info("alt")
|
565
|
+
u.tags.should == "http"
|
566
|
+
end
|
492
567
|
end
|
493
568
|
|
494
|
-
describe "
|
495
|
-
it "
|
569
|
+
describe "DELETE /api/users/:name" do
|
570
|
+
it "deletes a user" do
|
571
|
+
subject.update_user("alt2", :tags => "http", :password => "alt")
|
572
|
+
subject.delete_user("alt2")
|
573
|
+
end
|
496
574
|
end
|
497
575
|
|
498
576
|
describe "GET /api/users/:name/permissions" do
|
499
|
-
it "returns a list of permissions for a user"
|
577
|
+
it "returns a list of permissions for a user" do
|
578
|
+
xs = subject.user_permissions("guest")
|
579
|
+
p = xs.first
|
580
|
+
|
581
|
+
p.read.should == ".*"
|
582
|
+
end
|
500
583
|
end
|
501
584
|
|
502
585
|
describe "GET /api/whoami" do
|
503
|
-
it "returns information about the current user"
|
586
|
+
it "returns information about the current user" do
|
587
|
+
u = subject.whoami
|
588
|
+
u.name.should == "guest"
|
589
|
+
end
|
504
590
|
end
|
505
591
|
|
506
592
|
describe "GET /api/permissions" do
|
507
|
-
it "lists all permissions"
|
593
|
+
it "lists all permissions" do
|
594
|
+
xs = subject.list_permissions
|
595
|
+
xs.first.read.should_not be_nil
|
596
|
+
end
|
508
597
|
end
|
509
598
|
|
510
599
|
describe "GET /api/permissions/:vhost/:user" do
|
511
|
-
it "returns a list of permissions of a user in a vhost"
|
600
|
+
it "returns a list of permissions of a user in a vhost" do
|
601
|
+
p = subject.list_permissions_of("/", "guest")
|
602
|
+
|
603
|
+
p.read.should == ".*"
|
604
|
+
p.write.should == ".*"
|
605
|
+
p.configure.should == ".*"
|
606
|
+
end
|
512
607
|
end
|
513
608
|
|
514
609
|
describe "PUT /api/permissions/:vhost/:user" do
|
515
|
-
it "updates permissions of a user in a vhost"
|
610
|
+
it "updates permissions of a user in a vhost" do
|
611
|
+
subject.update_permissions_of("/", "guest", :write => ".*", :read => ".*", :configure => ".*")
|
612
|
+
|
613
|
+
p = subject.list_permissions_of("/", "guest")
|
614
|
+
|
615
|
+
p.read.should == ".*"
|
616
|
+
p.write.should == ".*"
|
617
|
+
p.configure.should == ".*"
|
618
|
+
end
|
516
619
|
end
|
517
620
|
|
518
621
|
describe "DELETE /api/permissions/:vhost/:user" do
|
519
|
-
it "clears permissions of a user in a vhost"
|
622
|
+
it "clears permissions of a user in a vhost" do
|
623
|
+
pending
|
624
|
+
subject.create_user("/", "alt3")
|
625
|
+
subject.update_permissions_of("/", "alt3", :write => ".*", :read => ".*", :configure => ".*")
|
626
|
+
subject.clear_permissions_of("/", "alt3")
|
627
|
+
|
628
|
+
p = subject.list_permissions_of("/", "alt3")
|
629
|
+
|
630
|
+
puts p.inspect
|
631
|
+
end
|
520
632
|
end
|
521
633
|
|
522
634
|
#
|
@@ -530,26 +642,6 @@ describe RabbitMQ::HTTP::Client do
|
|
530
642
|
end
|
531
643
|
end
|
532
644
|
|
533
|
-
describe "GET /api/parameters/:component" do
|
534
|
-
it "returns a list of all parameters for a component"
|
535
|
-
end
|
536
|
-
|
537
|
-
describe "GET /api/parameters/:component/:vhost" do
|
538
|
-
it "returns a list of all parameters for a component in a vhost"
|
539
|
-
end
|
540
|
-
|
541
|
-
describe "GET /api/parameters/:component/:vhost/:name" do
|
542
|
-
it "returns information about a specific parameter"
|
543
|
-
end
|
544
|
-
|
545
|
-
describe "PUT /api/parameters/:component/:vhost/:name" do
|
546
|
-
it "updates information about a specific parameter"
|
547
|
-
end
|
548
|
-
|
549
|
-
describe "DELETE /api/parameters/:component/:vhost/:name" do
|
550
|
-
it "clears information about a specific parameter"
|
551
|
-
end
|
552
|
-
|
553
645
|
|
554
646
|
#
|
555
647
|
# Policies
|
@@ -563,19 +655,10 @@ describe RabbitMQ::HTTP::Client do
|
|
563
655
|
end
|
564
656
|
|
565
657
|
describe "GET /api/policies/:vhost" do
|
566
|
-
it "returns a list of all policies in a vhost"
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
it "returns information about a policy in a vhost"
|
571
|
-
end
|
572
|
-
|
573
|
-
describe "PUT /api/policies/:vhost/:name" do
|
574
|
-
it "updates information about a policy in a vhost"
|
575
|
-
end
|
576
|
-
|
577
|
-
describe "DELETE /api/policies/:vhost/:name" do
|
578
|
-
it "clears information about a policy in a vhost"
|
658
|
+
it "returns a list of all policies in a vhost" do
|
659
|
+
xs = subject.list_policies("/")
|
660
|
+
xs.should be_kind_of(Array)
|
661
|
+
end
|
579
662
|
end
|
580
663
|
|
581
664
|
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabbitmq_http_api_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Michael Klishin
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: hashie
|
@@ -126,10 +126,10 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
126
|
none: false
|
127
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - !
|
130
|
-
Pg==
|
129
|
+
- - ! '>='
|
131
130
|
- !ruby/object:Gem::Version
|
132
|
-
version:
|
131
|
+
version: !binary |-
|
132
|
+
MA==
|
133
133
|
none: false
|
134
134
|
requirements: []
|
135
135
|
rubyforge_project:
|