rabbitmq_http_api_client 1.9.0 → 1.9.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/ChangeLog.md +1 -1
- data/README.md +1 -1
- data/lib/rabbitmq/http/client/version.rb +1 -1
- metadata +13 -26
- data/.gitignore +0 -22
- data/.rspec +0 -1
- data/.travis.yml +0 -14
- data/Gemfile +0 -12
- data/Rakefile +0 -1
- data/bin/before_build.sh +0 -13
- data/rabbitmq_http_api_client.gemspec +0 -26
- data/repl +0 -3
- data/spec/integration/client_spec.rb +0 -1079
- data/spec/spec_helper.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a4aaf38eb884212e4479dacfac1a76c51c572ef
|
4
|
+
data.tar.gz: 494214b32974d9daacb4428b0a0392a9b3dad3be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b5f54d4e59747460bacef94d8b9aee186a52265a183b3977f10df7f1d900119ba3ad1530db7d0309db1b92fc8d7623bdd327a8914272ec582fd3115a9a3ac4e
|
7
|
+
data.tar.gz: a7db77b3296d3ac2490baa512669874eb968829477f5c0f14e170fe4b1633c045c1960dc0a7a559893494b9212532df4a3360a2ab677ea09e1864631ab22a1fe
|
data/ChangeLog.md
CHANGED
data/README.md
CHANGED
@@ -32,7 +32,7 @@ All versions require [RabbitMQ Management UI plugin](http://www.rabbitmq.com/man
|
|
32
32
|
Add this line to your application's Gemfile:
|
33
33
|
|
34
34
|
``` ruby
|
35
|
-
gem 'rabbitmq_http_api_client', '>= 1.
|
35
|
+
gem 'rabbitmq_http_api_client', '>= 1.9.0'
|
36
36
|
```
|
37
37
|
|
38
38
|
And then execute:
|
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.9.
|
4
|
+
version: 1.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Klishin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -16,56 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '3.
|
19
|
+
version: '3.5'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '3.
|
26
|
+
version: '3.5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: multi_json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.12'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.12'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: faraday
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.13.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.13.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: faraday_middleware
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.12.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.12.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: effin_utf8
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,27 +82,16 @@ dependencies:
|
|
82
82
|
version: 1.0.0
|
83
83
|
description: RabbitMQ HTTP API client for Ruby
|
84
84
|
email:
|
85
|
-
- michael@
|
86
|
-
executables:
|
87
|
-
- before_build.sh
|
85
|
+
- michael@clojurewerkz.org
|
86
|
+
executables: []
|
88
87
|
extensions: []
|
89
88
|
extra_rdoc_files: []
|
90
89
|
files:
|
91
|
-
- ".gitignore"
|
92
|
-
- ".rspec"
|
93
|
-
- ".travis.yml"
|
94
90
|
- ChangeLog.md
|
95
|
-
- Gemfile
|
96
91
|
- LICENSE.txt
|
97
92
|
- README.md
|
98
|
-
- Rakefile
|
99
|
-
- bin/before_build.sh
|
100
93
|
- lib/rabbitmq/http/client.rb
|
101
94
|
- lib/rabbitmq/http/client/version.rb
|
102
|
-
- rabbitmq_http_api_client.gemspec
|
103
|
-
- repl
|
104
|
-
- spec/integration/client_spec.rb
|
105
|
-
- spec/spec_helper.rb
|
106
95
|
homepage: http://github.com/ruby-amqp/rabbitmq_http_api_client
|
107
96
|
licenses:
|
108
97
|
- MIT
|
@@ -128,6 +117,4 @@ rubygems_version: 2.6.11
|
|
128
117
|
signing_key:
|
129
118
|
specification_version: 4
|
130
119
|
summary: RabbitMQ HTTP API client for Ruby
|
131
|
-
test_files:
|
132
|
-
- spec/integration/client_spec.rb
|
133
|
-
- spec/spec_helper.rb
|
120
|
+
test_files: []
|
data/.gitignore
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
*.gem
|
2
|
-
*.rbc
|
3
|
-
.bundle
|
4
|
-
.config
|
5
|
-
.yardoc
|
6
|
-
Gemfile.lock
|
7
|
-
InstalledFiles
|
8
|
-
_yardoc
|
9
|
-
coverage
|
10
|
-
doc/
|
11
|
-
lib/bundler/man
|
12
|
-
pkg
|
13
|
-
rdoc
|
14
|
-
spec/reports
|
15
|
-
test/tmp
|
16
|
-
test/version_tmp
|
17
|
-
tmp
|
18
|
-
bin/autospec
|
19
|
-
bin/bundler
|
20
|
-
bin/rspec
|
21
|
-
bin/ldiff
|
22
|
-
bin/htmldiff
|
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
-cfd
|
data/.travis.yml
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
bundler_args: --without development
|
2
|
-
before_script: ./bin/before_build.sh
|
3
|
-
script: "bundle exec rspec"
|
4
|
-
rvm:
|
5
|
-
- "2.4.0"
|
6
|
-
- "2.3.3"
|
7
|
-
- "2.2"
|
8
|
-
notifications:
|
9
|
-
email: michael@rabbitmq.com
|
10
|
-
services:
|
11
|
-
- rabbitmq
|
12
|
-
branches:
|
13
|
-
only:
|
14
|
-
- master
|
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
data/bin/before_build.sh
DELETED
@@ -1,13 +0,0 @@
|
|
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().' | true
|
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().' | true
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'rabbitmq/http/client/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |gem|
|
7
|
-
gem.name = "rabbitmq_http_api_client"
|
8
|
-
gem.version = RabbitMQ::HTTP::Client::VERSION
|
9
|
-
gem.authors = ["Michael Klishin"]
|
10
|
-
gem.email = ["michael@defprotocol.org"]
|
11
|
-
gem.description = %q{RabbitMQ HTTP API client for Ruby}
|
12
|
-
gem.summary = %q{RabbitMQ HTTP API client for Ruby}
|
13
|
-
gem.homepage = "http://github.com/ruby-amqp/rabbitmq_http_api_client"
|
14
|
-
gem.licenses = ["MIT", "Mozilla Public License"]
|
15
|
-
|
16
|
-
gem.files = `git ls-files`.split($/)
|
17
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
|
-
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
-
gem.require_paths = ["lib"]
|
20
|
-
|
21
|
-
gem.add_dependency "hashie", "~> 3.2"
|
22
|
-
gem.add_dependency "multi_json", "~> 1.9"
|
23
|
-
gem.add_dependency "faraday", "~> 0.9.0"
|
24
|
-
gem.add_dependency "faraday_middleware", "~> 0.9.0"
|
25
|
-
gem.add_dependency "effin_utf8", "~> 1.0.0"
|
26
|
-
end
|
data/repl
DELETED
@@ -1,1079 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require "spec_helper"
|
3
|
-
|
4
|
-
describe RabbitMQ::HTTP::Client do
|
5
|
-
let(:endpoint) { "http://127.0.0.1:15672" }
|
6
|
-
|
7
|
-
subject do
|
8
|
-
described_class.connect(endpoint, :username => "guest", :password => "guest")
|
9
|
-
end
|
10
|
-
|
11
|
-
before :each do
|
12
|
-
@conn = Bunny.new
|
13
|
-
@conn.start
|
14
|
-
end
|
15
|
-
|
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
|
30
|
-
end
|
31
|
-
|
32
|
-
#
|
33
|
-
# Default endpoint path
|
34
|
-
#
|
35
|
-
describe "default endpoint path" do
|
36
|
-
it "does NOT append '/api' if the endpoint provides a path" do
|
37
|
-
c = described_class.connect("http://guest:guest@127.0.0.1:15672/api")
|
38
|
-
|
39
|
-
r = c.overview
|
40
|
-
expect(r.rabbitmq_version).to_not be_nil
|
41
|
-
expect(r.erlang_version).to_not be_nil
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
#
|
47
|
-
# URI-only access
|
48
|
-
#
|
49
|
-
|
50
|
-
describe "URI-only access" do
|
51
|
-
it "authenticates successfully" do
|
52
|
-
c = described_class.connect("http://guest:guest@127.0.0.1:15672")
|
53
|
-
|
54
|
-
r = c.overview
|
55
|
-
expect(r.rabbitmq_version).to_not be_nil
|
56
|
-
expect(r.erlang_version).to_not be_nil
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
|
61
|
-
#
|
62
|
-
# Overview
|
63
|
-
#
|
64
|
-
|
65
|
-
describe "GET /api/overview" do
|
66
|
-
it "returns an overview" do
|
67
|
-
r = subject.overview
|
68
|
-
|
69
|
-
ts = r.exchange_types.map { |h| h.name }.
|
70
|
-
sort
|
71
|
-
["direct", "fanout", "headers", "topic"].each do |t|
|
72
|
-
expect(ts).to include(t)
|
73
|
-
end
|
74
|
-
|
75
|
-
expect(r.rabbitmq_version).to_not be_nil
|
76
|
-
expect(r.erlang_version).to_not be_nil
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe "#enabled_protocols" do
|
81
|
-
it "returns a list of enabled protocols" do
|
82
|
-
xs = subject.enabled_protocols
|
83
|
-
|
84
|
-
expect(xs).to include("amqp")
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe "#enabled_protocols" do
|
89
|
-
it "returns a list of enabled protocols" do
|
90
|
-
xs = subject.protocol_ports
|
91
|
-
|
92
|
-
# hash of protocol => port
|
93
|
-
expect(xs["amqp"]).to eq(5672)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
#
|
98
|
-
# Nodes
|
99
|
-
#
|
100
|
-
|
101
|
-
describe "GET /api/nodes" do
|
102
|
-
it "lists cluster nodes with detailed status information for each one of them" do
|
103
|
-
await_event_propagation
|
104
|
-
nodes = subject.list_nodes
|
105
|
-
n = nodes.first
|
106
|
-
|
107
|
-
expect(n.name).to match(/^rabbit/)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
describe "GET /api/node/:name" do
|
112
|
-
it "returns status information for a single cluster node" do
|
113
|
-
await_event_propagation
|
114
|
-
ns = subject.list_nodes
|
115
|
-
n = subject.node_info(ns.first.name)
|
116
|
-
|
117
|
-
expect(n.name).to match(/^rabbit/)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
#
|
122
|
-
# Extensions
|
123
|
-
#
|
124
|
-
|
125
|
-
describe "GET /api/extensions" do
|
126
|
-
it "returns a list of enabled management plugin extensions" do
|
127
|
-
await_event_propagation
|
128
|
-
xs = subject.list_extensions
|
129
|
-
|
130
|
-
expect(xs).to be_kind_of(Array)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
#
|
135
|
-
# Definitions
|
136
|
-
#
|
137
|
-
|
138
|
-
describe "GET /api/definitions" do
|
139
|
-
it "returns a list of all resources/definitions (vhosts, users, permissions, queues, exchanges, bindings, etc)" do
|
140
|
-
await_event_propagation
|
141
|
-
xs = subject.list_definitions
|
142
|
-
|
143
|
-
expect(xs.bindings).not_to be_nil
|
144
|
-
expect(xs.queues).not_to be_nil
|
145
|
-
expect(xs.exchanges).not_to be_nil
|
146
|
-
expect(xs.users).not_to be_nil
|
147
|
-
expect(xs.vhosts).not_to be_nil
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
describe "POST /api/definitions" do
|
152
|
-
let(:queue_name) { 'my-definition-queue' }
|
153
|
-
|
154
|
-
let(:definition) do
|
155
|
-
{
|
156
|
-
:queues => [{
|
157
|
-
:name => queue_name,
|
158
|
-
:vhost => '/',
|
159
|
-
durable: true,
|
160
|
-
:auto_delete => false,
|
161
|
-
:arguments => {
|
162
|
-
"x-dead-letter-exchange" => 'dead'
|
163
|
-
}
|
164
|
-
}]
|
165
|
-
}.to_json
|
166
|
-
end
|
167
|
-
|
168
|
-
it "returns true when successful" do
|
169
|
-
r = subject.upload_definitions(definition)
|
170
|
-
expect(r).to eq(true)
|
171
|
-
|
172
|
-
subject.delete_queue("/", queue_name)
|
173
|
-
end
|
174
|
-
|
175
|
-
it "stores the uploaded definitions" do
|
176
|
-
subject.upload_definitions(definition)
|
177
|
-
xs = subject.list_definitions
|
178
|
-
uploaded_queue = xs.queues.detect { |q| q.name == queue_name }
|
179
|
-
expect(uploaded_queue).not_to eq(nil)
|
180
|
-
|
181
|
-
subject.delete_queue("/", queue_name)
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
#
|
186
|
-
# Connections
|
187
|
-
#
|
188
|
-
|
189
|
-
describe "GET /api/connections" do
|
190
|
-
before :each do
|
191
|
-
@conn = Bunny.new
|
192
|
-
@conn.start
|
193
|
-
end
|
194
|
-
|
195
|
-
it "returns a list of all active connections" do
|
196
|
-
await_event_propagation
|
197
|
-
xs = subject.list_connections
|
198
|
-
f = xs.first
|
199
|
-
|
200
|
-
expect(f.name).to match(/127.0.0.1/)
|
201
|
-
expect(f.client_properties.product).to eq("Bunny")
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
describe "GET /api/connections/:name" do
|
206
|
-
it "returns information about the connection" do
|
207
|
-
await_event_propagation
|
208
|
-
xs = subject.list_connections
|
209
|
-
c = subject.connection_info(xs.first.name)
|
210
|
-
|
211
|
-
expect(c.name).to match(/127.0.0.1/)
|
212
|
-
expect(c.client_properties.product).to eq("Bunny")
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
|
217
|
-
#
|
218
|
-
# Channels
|
219
|
-
#
|
220
|
-
|
221
|
-
describe "GET /api/channels" do
|
222
|
-
it "returns a list of all active channels" do
|
223
|
-
conn = Bunny.new; conn.start
|
224
|
-
ch = conn.create_channel
|
225
|
-
await_event_propagation
|
226
|
-
xs = subject.list_channels
|
227
|
-
f = xs.first
|
228
|
-
|
229
|
-
expect(f.number).to be >= 1
|
230
|
-
expect(f.prefetch_count).to be >= 0
|
231
|
-
|
232
|
-
ch.close
|
233
|
-
conn.close
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
describe "GET /api/channels/:name" do
|
238
|
-
it "returns information about the channel" do
|
239
|
-
conn = Bunny.new; conn.start
|
240
|
-
ch = conn.create_channel
|
241
|
-
|
242
|
-
await_event_propagation
|
243
|
-
xs = subject.list_channels
|
244
|
-
c = subject.channel_info(xs.first.name)
|
245
|
-
|
246
|
-
expect(c.number).to be >= 1
|
247
|
-
expect(c.prefetch_count).to be >= 0
|
248
|
-
|
249
|
-
ch.close
|
250
|
-
conn.close
|
251
|
-
end
|
252
|
-
end
|
253
|
-
|
254
|
-
#
|
255
|
-
# Exchanges
|
256
|
-
#
|
257
|
-
|
258
|
-
describe "GET /api/exchanges" do
|
259
|
-
it "returns a list of all exchanges in the cluster" do
|
260
|
-
xs = subject.list_exchanges
|
261
|
-
f = xs.first
|
262
|
-
|
263
|
-
expect(f.type).to_not be_nil
|
264
|
-
expect(f.name).to_not be_nil
|
265
|
-
expect(f.vhost).to_not be_nil
|
266
|
-
expect(f.durable).to_not be_nil
|
267
|
-
expect(f.auto_delete).to_not be_nil
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
describe "GET /api/exchanges/:vhost" do
|
272
|
-
it "returns a list of all exchanges in a vhost" do
|
273
|
-
xs = subject.list_exchanges("/")
|
274
|
-
f = xs.first
|
275
|
-
|
276
|
-
expect(f.vhost).to eq("/")
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
describe "GET /api/exchanges/:vhost/:name" do
|
281
|
-
it "returns information about the exchange" do
|
282
|
-
e = subject.exchange_info("/", "amq.fanout")
|
283
|
-
|
284
|
-
expect(e.type).to eq("fanout")
|
285
|
-
expect(e.name).to eq("amq.fanout")
|
286
|
-
expect(e.durable).to eq(true)
|
287
|
-
expect(e.vhost).to eq("/")
|
288
|
-
end
|
289
|
-
end
|
290
|
-
|
291
|
-
describe "PUT /api/exchanges/:vhost/:name" do
|
292
|
-
before :each do
|
293
|
-
@channel = @conn.create_channel
|
294
|
-
end
|
295
|
-
|
296
|
-
after :each do
|
297
|
-
@channel.close
|
298
|
-
end
|
299
|
-
|
300
|
-
let(:exchange_name) { "httpdeclared" }
|
301
|
-
|
302
|
-
it "declares an exchange" do
|
303
|
-
subject.declare_exchange("/", exchange_name, durable: false, type: "fanout")
|
304
|
-
|
305
|
-
x = @channel.fanout(exchange_name, durable: false, auto_delete: false)
|
306
|
-
x.delete
|
307
|
-
end
|
308
|
-
end
|
309
|
-
|
310
|
-
describe "DELETE /api/exchanges/:vhost/:name" do
|
311
|
-
before :each do
|
312
|
-
@channel = @conn.create_channel
|
313
|
-
end
|
314
|
-
|
315
|
-
after :each do
|
316
|
-
@channel.close
|
317
|
-
end
|
318
|
-
|
319
|
-
let(:exchange_name) { "httpdeclared" }
|
320
|
-
|
321
|
-
it "deletes an exchange" do
|
322
|
-
x = @channel.fanout(exchange_name, durable: false)
|
323
|
-
subject.delete_exchange("/", exchange_name)
|
324
|
-
end
|
325
|
-
end
|
326
|
-
|
327
|
-
|
328
|
-
describe "GET /api/exchanges/:vhost/:name/bindings/source" do
|
329
|
-
before :each do
|
330
|
-
@channel = @conn.create_channel
|
331
|
-
end
|
332
|
-
after :each do
|
333
|
-
@channel.close
|
334
|
-
end
|
335
|
-
|
336
|
-
it "returns a list of all bindings in which the given exchange is the source" do
|
337
|
-
e = @channel.fanout("http.api.tests.fanout", durable: true)
|
338
|
-
q = @channel.queue("http.api.tests.queue1", durable: true)
|
339
|
-
q.bind(e)
|
340
|
-
|
341
|
-
xs = subject.list_bindings_by_source("/", "http.api.tests.fanout")
|
342
|
-
f = xs.first
|
343
|
-
|
344
|
-
expect(f.destination).to eq(q.name)
|
345
|
-
expect(f.destination_type).to eq("queue")
|
346
|
-
expect(f.routing_key).to eq("")
|
347
|
-
expect(f.source).to eq(e.name)
|
348
|
-
expect(f.vhost).to eq("/")
|
349
|
-
|
350
|
-
e.delete
|
351
|
-
q.delete
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
|
356
|
-
describe "GET /api/exchanges/:vhost/:name/bindings/destination" do
|
357
|
-
before :each do
|
358
|
-
@channel = @conn.create_channel
|
359
|
-
end
|
360
|
-
after :each do
|
361
|
-
@channel.close
|
362
|
-
end
|
363
|
-
|
364
|
-
it "returns a list of all bindings in which the given exchange is the destination" do
|
365
|
-
e1 = @channel.fanout("http.api.tests.fanout1", durable: true)
|
366
|
-
e2 = @channel.fanout("http.api.tests.fanout2", durable: true)
|
367
|
-
e1.bind(e2)
|
368
|
-
|
369
|
-
xs = subject.list_bindings_by_destination("/", "http.api.tests.fanout1")
|
370
|
-
f = xs.first
|
371
|
-
|
372
|
-
expect(f.destination).to eq(e1.name)
|
373
|
-
expect(f.destination_type).to eq("exchange")
|
374
|
-
expect(f.routing_key).to eq("")
|
375
|
-
expect(f.source).to eq(e2.name)
|
376
|
-
expect(f.vhost).to eq("/")
|
377
|
-
|
378
|
-
e1.delete
|
379
|
-
e2.delete
|
380
|
-
end
|
381
|
-
end
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
describe "POST /api/exchanges/:vhost/:name/publish" do
|
386
|
-
it "publishes a messages to the exchange"
|
387
|
-
end
|
388
|
-
|
389
|
-
|
390
|
-
#
|
391
|
-
# Queues
|
392
|
-
#
|
393
|
-
|
394
|
-
describe "GET /api/queues" do
|
395
|
-
before :each do
|
396
|
-
@channel = @conn.create_channel
|
397
|
-
end
|
398
|
-
after :each do
|
399
|
-
@channel.close
|
400
|
-
end
|
401
|
-
|
402
|
-
it "returns a list of all queues" do
|
403
|
-
q = @channel.queue("", durable: false)
|
404
|
-
|
405
|
-
xs = subject.list_queues
|
406
|
-
expect(xs.detect { |x| x.name == q.name }).to_not be_empty
|
407
|
-
|
408
|
-
subject.delete_queue("/", q.name)
|
409
|
-
end
|
410
|
-
end
|
411
|
-
|
412
|
-
describe "GET /api/queues/:vhost" do
|
413
|
-
before :each do
|
414
|
-
@channel = @conn.create_channel
|
415
|
-
end
|
416
|
-
after :each do
|
417
|
-
@channel.close
|
418
|
-
end
|
419
|
-
|
420
|
-
it "returns a list of all queues" do
|
421
|
-
q = @channel.queue("", durable: false)
|
422
|
-
|
423
|
-
xs = subject.list_queues("/")
|
424
|
-
expect(xs.detect { |x| x.name == q.name }).to_not be_empty
|
425
|
-
|
426
|
-
subject.delete_queue("/", q.name)
|
427
|
-
end
|
428
|
-
end
|
429
|
-
|
430
|
-
describe "GET /api/queues/:vhost/:name" do
|
431
|
-
context "when queue exists" do
|
432
|
-
before :each do
|
433
|
-
@channel = @conn.create_channel
|
434
|
-
end
|
435
|
-
after :each do
|
436
|
-
@channel.close
|
437
|
-
end
|
438
|
-
|
439
|
-
it "returns information about a queue" do
|
440
|
-
q = @channel.queue("", durable: false)
|
441
|
-
await_event_propagation
|
442
|
-
i = subject.queue_info("/", q.name)
|
443
|
-
|
444
|
-
expect(i.durable).to eq(false)
|
445
|
-
expect(i.durable).to eq(q.durable?)
|
446
|
-
|
447
|
-
expect(i.name).to eq(q.name)
|
448
|
-
expect(i.auto_delete).to eq(q.auto_delete?)
|
449
|
-
expect(i.active_consumers).to be_nil
|
450
|
-
expect(i.backing_queue_status.avg_ack_egress_rate).to eq(0.0)
|
451
|
-
|
452
|
-
subject.delete_queue("/", q.name)
|
453
|
-
end
|
454
|
-
end
|
455
|
-
|
456
|
-
context "when queue DOES NOT exist" do
|
457
|
-
it "raises NotFound" do
|
458
|
-
expect do
|
459
|
-
subject.queue_info("/", Time.now.to_i.to_s)
|
460
|
-
end.to raise_error(Faraday::Error::ResourceNotFound)
|
461
|
-
end
|
462
|
-
end
|
463
|
-
end
|
464
|
-
|
465
|
-
describe "PUT /api/queues/:vhost/:name" do
|
466
|
-
before :each do
|
467
|
-
@channel = @conn.create_channel
|
468
|
-
end
|
469
|
-
|
470
|
-
let(:queue_name) { "httpdeclared" }
|
471
|
-
|
472
|
-
it "declares a queue" do
|
473
|
-
subject.declare_queue("/", queue_name, durable: false, auto_delete: true)
|
474
|
-
|
475
|
-
q = @channel.queue(queue_name, durable: false, auto_delete: true)
|
476
|
-
q.delete
|
477
|
-
end
|
478
|
-
end
|
479
|
-
|
480
|
-
describe "DELETE /api/queues/:vhost/:name" do
|
481
|
-
before :each do
|
482
|
-
@channel = @conn.create_channel
|
483
|
-
end
|
484
|
-
|
485
|
-
let(:queue_name) { "httpdeclared" }
|
486
|
-
|
487
|
-
it "deletes a queue" do
|
488
|
-
q = @channel.queue(queue_name, durable: false)
|
489
|
-
subject.delete_queue("/", queue_name)
|
490
|
-
end
|
491
|
-
end
|
492
|
-
|
493
|
-
describe "GET /api/queues/:vhost/:name/bindings" do
|
494
|
-
before :each do
|
495
|
-
@channel = @conn.create_channel
|
496
|
-
end
|
497
|
-
|
498
|
-
it "returns a list of bindings for a queue" do
|
499
|
-
q = @channel.queue("")
|
500
|
-
q.bind("amq.fanout")
|
501
|
-
|
502
|
-
xs = subject.list_queue_bindings("/", q.name)
|
503
|
-
x = xs.first
|
504
|
-
|
505
|
-
expect(x.destination).to eq(q.name)
|
506
|
-
expect(x.destination_type).to eq("queue")
|
507
|
-
|
508
|
-
q.delete
|
509
|
-
end
|
510
|
-
end
|
511
|
-
|
512
|
-
describe "DELETE /api/queues/:vhost/:name/contents" do
|
513
|
-
before :each do
|
514
|
-
@channel = @conn.create_channel
|
515
|
-
end
|
516
|
-
after :each do
|
517
|
-
@channel.close
|
518
|
-
end
|
519
|
-
|
520
|
-
it "purges a queue" do
|
521
|
-
q = @channel.queue("")
|
522
|
-
x = @channel.fanout("amq.fanout", durable: true, auto_delete: false)
|
523
|
-
q.bind(x)
|
524
|
-
|
525
|
-
10.times do
|
526
|
-
x.publish("", :routing_key => q.name)
|
527
|
-
end
|
528
|
-
sleep 0.7
|
529
|
-
|
530
|
-
expect(q.message_count).to eq(10)
|
531
|
-
subject.purge_queue("/", q.name)
|
532
|
-
sleep 0.5
|
533
|
-
expect(q.message_count).to eq(0)
|
534
|
-
q.delete
|
535
|
-
end
|
536
|
-
end
|
537
|
-
|
538
|
-
# yes, POST, because it potentially modifies the state (ordering) of the queue
|
539
|
-
describe "POST /api/queues/:vhost/:name/get" do
|
540
|
-
before :each do
|
541
|
-
@channel = @conn.create_channel
|
542
|
-
end
|
543
|
-
after :each do
|
544
|
-
@channel.close
|
545
|
-
end
|
546
|
-
|
547
|
-
it "fetches a message from a queue, a la basic.get" do
|
548
|
-
q = @channel.queue("")
|
549
|
-
x = @channel.fanout("amq.fanout", durable: true, auto_delete: false)
|
550
|
-
q.bind(x)
|
551
|
-
|
552
|
-
10.times do |i|
|
553
|
-
x.publish("msg #{i}", :routing_key => q.name, :content_type => "application/xyz")
|
554
|
-
end
|
555
|
-
sleep 0.7
|
556
|
-
|
557
|
-
expect(q.message_count).to eq(10)
|
558
|
-
# the requeueing arguments differ between RabbitMQ 3.7.0 and earlier versions,
|
559
|
-
# so pass both
|
560
|
-
xs = subject.get_messages("/", q.name, count: 10,
|
561
|
-
requeue: false, ackmode: "ack_requeue_false", encoding: "auto")
|
562
|
-
m = xs.first
|
563
|
-
|
564
|
-
expect(m.properties.content_type).to eq("application/xyz")
|
565
|
-
expect(m.payload).to eq("msg 0")
|
566
|
-
expect(m.payload_encoding).to eq("string")
|
567
|
-
|
568
|
-
q.delete
|
569
|
-
end
|
570
|
-
end
|
571
|
-
|
572
|
-
describe "GET /api/bindings" do
|
573
|
-
before :each do
|
574
|
-
@channel = @conn.create_channel
|
575
|
-
end
|
576
|
-
after :each do
|
577
|
-
@channel.close
|
578
|
-
end
|
579
|
-
|
580
|
-
it "returns a list of all bindings" do
|
581
|
-
q = @channel.queue("")
|
582
|
-
x = @channel.fanout("amq.fanout", durable: true, auto_delete: false)
|
583
|
-
q.bind(x)
|
584
|
-
await_event_propagation
|
585
|
-
xs = subject.list_bindings
|
586
|
-
b = xs.first
|
587
|
-
|
588
|
-
expect(b.destination).to_not be_nil
|
589
|
-
expect(b.destination_type).to_not be_nil
|
590
|
-
expect(b.source).to_not be_nil
|
591
|
-
expect(b.routing_key).to_not be_nil
|
592
|
-
expect(b.vhost).to_not be_nil
|
593
|
-
|
594
|
-
q.delete
|
595
|
-
end
|
596
|
-
end
|
597
|
-
|
598
|
-
describe "GET /api/bindings/:vhost" do
|
599
|
-
before :each do
|
600
|
-
@channel = @conn.create_channel
|
601
|
-
end
|
602
|
-
after :each do
|
603
|
-
@channel.close
|
604
|
-
end
|
605
|
-
|
606
|
-
it "returns a list of all bindings in a vhost" do
|
607
|
-
q = @channel.queue("")
|
608
|
-
x = @channel.fanout("amq.fanout", durable: true, auto_delete: false)
|
609
|
-
q.bind(x)
|
610
|
-
await_event_propagation
|
611
|
-
xs = subject.list_bindings("/")
|
612
|
-
b = xs.first
|
613
|
-
|
614
|
-
expect(b.destination).to_not be_nil
|
615
|
-
expect(b.destination_type).to_not be_nil
|
616
|
-
expect(b.source).to_not be_nil
|
617
|
-
expect(b.routing_key).to_not be_nil
|
618
|
-
expect(b.vhost).to_not be_nil
|
619
|
-
|
620
|
-
q.delete
|
621
|
-
end
|
622
|
-
end
|
623
|
-
|
624
|
-
describe "GET /api/bindings/:vhost/e/:exchange/q/:queue" do
|
625
|
-
before :each do
|
626
|
-
@channel = @conn.create_channel
|
627
|
-
end
|
628
|
-
after :each do
|
629
|
-
@channel.close
|
630
|
-
end
|
631
|
-
|
632
|
-
it "returns a list of all bindings between an exchange and a queue" do
|
633
|
-
q = @channel.queue("")
|
634
|
-
x = @channel.fanout("http.client.fanout")
|
635
|
-
q.bind(x)
|
636
|
-
|
637
|
-
await_event_propagation
|
638
|
-
|
639
|
-
xs = subject.list_bindings_between_queue_and_exchange("/", q.name, x.name)
|
640
|
-
b = xs.first
|
641
|
-
expect(b.destination).to eq(q.name)
|
642
|
-
expect(b.destination_type).to eq("queue")
|
643
|
-
expect(b.source).to eq(x.name)
|
644
|
-
expect(b.routing_key).to_not be_nil
|
645
|
-
expect(b.properties_key).to_not be_nil
|
646
|
-
expect(b.vhost).to eq("/")
|
647
|
-
|
648
|
-
q.delete
|
649
|
-
x.delete
|
650
|
-
end
|
651
|
-
end
|
652
|
-
|
653
|
-
describe "POST /api/bindings/:vhost/e/:exchange/q/:queue" do
|
654
|
-
before :each do
|
655
|
-
@channel = @conn.create_channel
|
656
|
-
end
|
657
|
-
after :each do
|
658
|
-
@channel.close
|
659
|
-
end
|
660
|
-
|
661
|
-
it "creates a binding between an exchange and a queue" do
|
662
|
-
routing_key = 'test.key'
|
663
|
-
q = @channel.queue("")
|
664
|
-
x = @channel.fanout("http.client.fanout")
|
665
|
-
q.bind(x)
|
666
|
-
|
667
|
-
b = subject.bind_queue("/", q.name, x.name, routing_key)
|
668
|
-
|
669
|
-
expect(b).to eq(q.name + "/" + routing_key)
|
670
|
-
|
671
|
-
q.delete
|
672
|
-
x.delete
|
673
|
-
end
|
674
|
-
end
|
675
|
-
|
676
|
-
describe "GET /api/bindings/:vhost/e/:exchange/q/:queue/props" do
|
677
|
-
before :each do
|
678
|
-
@channel = @conn.create_channel
|
679
|
-
end
|
680
|
-
after :each do
|
681
|
-
@channel.close
|
682
|
-
end
|
683
|
-
|
684
|
-
it "returns an individual binding between an exchange and a queue" do
|
685
|
-
routing_key = 'test.key'
|
686
|
-
q = @channel.queue("")
|
687
|
-
x = @channel.fanout("http.client.fanout")
|
688
|
-
q.bind(x)
|
689
|
-
|
690
|
-
xs = subject.list_bindings_between_queue_and_exchange("/", q.name, x.name)
|
691
|
-
b1 = xs.first
|
692
|
-
|
693
|
-
b2 = subject.queue_binding_info("/", q.name, x.name, b1.properties_key)
|
694
|
-
|
695
|
-
expect(b1).to eq(b2)
|
696
|
-
q.delete
|
697
|
-
end
|
698
|
-
end
|
699
|
-
|
700
|
-
describe "DELETE /api/bindings/:vhost/e/:exchange/q/:queue/props" do
|
701
|
-
before :each do
|
702
|
-
@channel = @conn.create_channel
|
703
|
-
end
|
704
|
-
after :each do
|
705
|
-
@channel.close
|
706
|
-
end
|
707
|
-
|
708
|
-
it "deletes an individual binding between an exchange and a queue" do
|
709
|
-
routing_key = 'test.key'
|
710
|
-
q = @channel.queue("")
|
711
|
-
x = @channel.fanout("http.client.fanout")
|
712
|
-
q.bind(x)
|
713
|
-
|
714
|
-
xs = subject.list_bindings_between_queue_and_exchange("/", q.name, x.name)
|
715
|
-
b = xs.first
|
716
|
-
|
717
|
-
expect(subject.delete_queue_binding("/", q.name, x.name, b.properties_key)).to eq(true)
|
718
|
-
|
719
|
-
xs = subject.list_bindings_between_queue_and_exchange("/", q.name, x.name)
|
720
|
-
|
721
|
-
expect(xs.size).to eq(0)
|
722
|
-
|
723
|
-
q.delete
|
724
|
-
x.delete
|
725
|
-
end
|
726
|
-
end
|
727
|
-
|
728
|
-
describe "POST /api/bindings/:vhost/e/:source_exchange/e/:destination_exchange" do
|
729
|
-
before :each do
|
730
|
-
@channel = @conn.create_channel
|
731
|
-
end
|
732
|
-
after :each do
|
733
|
-
@channel.close
|
734
|
-
end
|
735
|
-
|
736
|
-
it "creates a binding between two exchanges" do
|
737
|
-
routing_key = 'test.key'
|
738
|
-
sx = @channel.fanout("http.client.fanout_source")
|
739
|
-
dx = @channel.fanout("http.client.fanout_destination")
|
740
|
-
|
741
|
-
xs = subject.list_bindings_between_exchanges("/", dx.name, sx.name)
|
742
|
-
expect(xs).to be_empty
|
743
|
-
|
744
|
-
dx.bind(sx)
|
745
|
-
|
746
|
-
b = subject.bind_exchange("/", dx.name, sx.name, routing_key)
|
747
|
-
xs = subject.list_bindings_between_exchanges("/", dx.name, sx.name)
|
748
|
-
expect(xs).to_not be_empty
|
749
|
-
|
750
|
-
dx.delete
|
751
|
-
sx.delete
|
752
|
-
end
|
753
|
-
end
|
754
|
-
|
755
|
-
describe "GET /api/bindings/:vhost/e/:exchange/q/:queue/props" do
|
756
|
-
before :each do
|
757
|
-
@channel = @conn.create_channel
|
758
|
-
end
|
759
|
-
after :each do
|
760
|
-
@channel.close
|
761
|
-
end
|
762
|
-
|
763
|
-
it "returns an individual binding between two exchanges" do
|
764
|
-
routing_key = 'test.key'
|
765
|
-
sx = @channel.fanout("http.client.fanout_source")
|
766
|
-
dx = @channel.fanout("http.client.fanout_destination")
|
767
|
-
dx.bind(sx)
|
768
|
-
|
769
|
-
xs = subject.list_bindings_between_exchanges("/", dx.name, sx.name)
|
770
|
-
b1 = xs.first
|
771
|
-
|
772
|
-
b2 = subject.exchange_binding_info("/", dx.name, sx.name, b1.properties_key)
|
773
|
-
|
774
|
-
expect(b1).to eq(b2)
|
775
|
-
|
776
|
-
end
|
777
|
-
end
|
778
|
-
|
779
|
-
describe "DELETE /api/bindings/:vhost/e/:exchange/q/:queue/props" do
|
780
|
-
before :each do
|
781
|
-
@channel = @conn.create_channel
|
782
|
-
end
|
783
|
-
after :each do
|
784
|
-
@channel.close
|
785
|
-
end
|
786
|
-
|
787
|
-
it "deletes an individual binding between two exchanges" do
|
788
|
-
routing_key = 'test.key'
|
789
|
-
sx = @channel.fanout("http.client.fanout_source")
|
790
|
-
dx = @channel.fanout("http.client.fanout_destination")
|
791
|
-
dx.bind(sx)
|
792
|
-
|
793
|
-
xs = subject.list_bindings_between_exchanges("/", dx.name, sx.name)
|
794
|
-
b = xs.first
|
795
|
-
|
796
|
-
expect(subject.delete_exchange_binding("/", dx.name, sx.name, b.properties_key)).to eq(true)
|
797
|
-
|
798
|
-
xs = subject.list_bindings_between_exchanges("/", dx.name, sx.name)
|
799
|
-
|
800
|
-
expect(xs.size).to eq(0)
|
801
|
-
|
802
|
-
dx.delete
|
803
|
-
sx.delete
|
804
|
-
end
|
805
|
-
end
|
806
|
-
|
807
|
-
describe "GET /api/vhosts" do
|
808
|
-
it "returns a list of vhosts" do
|
809
|
-
xs = subject.list_vhosts
|
810
|
-
v = xs.first
|
811
|
-
|
812
|
-
expect(v.name).to_not be_nil
|
813
|
-
expect(v.tracing).to eq(false)
|
814
|
-
end
|
815
|
-
end
|
816
|
-
|
817
|
-
describe "GET /api/vhosts/:name" do
|
818
|
-
context "when vhost exists" do
|
819
|
-
it "returns infomation about a vhost" do
|
820
|
-
v = subject.vhost_info("/")
|
821
|
-
|
822
|
-
expect(v.name).to_not be_nil
|
823
|
-
expect(v.tracing).to eq(false)
|
824
|
-
end
|
825
|
-
end
|
826
|
-
|
827
|
-
context "when vhost DOES NOT exist" do
|
828
|
-
it "raises NotFound" do
|
829
|
-
expect do
|
830
|
-
subject.vhost_info(Time.now.to_i.to_s)
|
831
|
-
end.to raise_error(Faraday::Error::ResourceNotFound)
|
832
|
-
end
|
833
|
-
end
|
834
|
-
|
835
|
-
end
|
836
|
-
|
837
|
-
describe "PUT /api/vhosts/:name" do
|
838
|
-
gen = Rantly.new
|
839
|
-
|
840
|
-
[
|
841
|
-
"http-created",
|
842
|
-
"http_created",
|
843
|
-
"http created",
|
844
|
-
"создан по хатэтэпэ",
|
845
|
-
"creado a través de HTTP",
|
846
|
-
"通过http",
|
847
|
-
"HTTP를 통해 생성",
|
848
|
-
"HTTPを介して作成",
|
849
|
-
"created over http?",
|
850
|
-
"created @ http API",
|
851
|
-
"erstellt über http",
|
852
|
-
"http पर बनाया",
|
853
|
-
"ถูกสร้างขึ้นผ่าน HTTP",
|
854
|
-
"±!@^&#*"
|
855
|
-
].each do |vhost|
|
856
|
-
context "when vhost name is #{vhost}" do
|
857
|
-
it "creates a vhost" do
|
858
|
-
subject.create_vhost(vhost)
|
859
|
-
subject.create_vhost(vhost)
|
860
|
-
|
861
|
-
v = subject.vhost_info(vhost)
|
862
|
-
expect(v.name).to eq(vhost)
|
863
|
-
|
864
|
-
subject.delete_vhost(v.name)
|
865
|
-
end
|
866
|
-
end
|
867
|
-
end
|
868
|
-
|
869
|
-
200.times do
|
870
|
-
vhost = gen.string
|
871
|
-
|
872
|
-
context "when vhost name is #{vhost}" do
|
873
|
-
it "creates a vhost" do
|
874
|
-
subject.create_vhost(vhost)
|
875
|
-
subject.create_vhost(vhost)
|
876
|
-
|
877
|
-
v = subject.vhost_info(vhost)
|
878
|
-
expect(v.name).to eq(vhost)
|
879
|
-
|
880
|
-
subject.delete_vhost(v.name)
|
881
|
-
end
|
882
|
-
end
|
883
|
-
end
|
884
|
-
end
|
885
|
-
|
886
|
-
describe "DELETE /api/vhosts/:name" do
|
887
|
-
let(:vhost) { "http-created2" }
|
888
|
-
|
889
|
-
it "deletes a vhost" do
|
890
|
-
subject.create_vhost(vhost)
|
891
|
-
subject.delete_vhost(vhost)
|
892
|
-
end
|
893
|
-
|
894
|
-
gen = Rantly.new
|
895
|
-
200.times do
|
896
|
-
vhost = gen.string
|
897
|
-
|
898
|
-
context "when vhost #{vhost} is deleted immediately after being created" do
|
899
|
-
it "creates a vhost" do
|
900
|
-
subject.create_vhost(vhost)
|
901
|
-
subject.create_vhost(vhost)
|
902
|
-
|
903
|
-
v = subject.vhost_info(vhost)
|
904
|
-
expect(v.name).to eq(vhost)
|
905
|
-
|
906
|
-
subject.delete_vhost(v.name)
|
907
|
-
end
|
908
|
-
end
|
909
|
-
end
|
910
|
-
end
|
911
|
-
|
912
|
-
describe "GET /api/vhosts/:name/permissions" do
|
913
|
-
it "returns a list of permissions in a vhost" do
|
914
|
-
xs = subject.list_permissions("/")
|
915
|
-
p = xs.detect { |x| x.user == "guest" }
|
916
|
-
|
917
|
-
expect(p.read).to eq(".*")
|
918
|
-
end
|
919
|
-
end
|
920
|
-
|
921
|
-
describe "GET /api/users" do
|
922
|
-
it "returns a list of all users" do
|
923
|
-
xs = subject.list_users
|
924
|
-
u = xs.first
|
925
|
-
|
926
|
-
expect(u.name).to_not be_nil
|
927
|
-
expect(u.password_hash).to_not be_nil
|
928
|
-
expect(u.tags).to_not be_nil
|
929
|
-
end
|
930
|
-
end
|
931
|
-
|
932
|
-
describe "GET /api/users/:name" do
|
933
|
-
it "returns information about a user" do
|
934
|
-
u = subject.user_info("guest")
|
935
|
-
expect(u.name).to eq("guest")
|
936
|
-
expect(u.tags).to eq("administrator")
|
937
|
-
end
|
938
|
-
end
|
939
|
-
|
940
|
-
describe "PUT /api/users/:name" do
|
941
|
-
context "with tags provided explicitly" do
|
942
|
-
it "updates information about a user" do
|
943
|
-
subject.update_user("alt-user", tags: "http, policymaker, management", password: "alt-user")
|
944
|
-
|
945
|
-
u = subject.user_info("alt-user")
|
946
|
-
expect(u.tags).to eq("http,policymaker,management")
|
947
|
-
end
|
948
|
-
end
|
949
|
-
|
950
|
-
context "without tags provided" do
|
951
|
-
it "uses blank tag list" do
|
952
|
-
subject.update_user("alt-user", password: "alt-user")
|
953
|
-
|
954
|
-
u = subject.user_info("alt-user")
|
955
|
-
expect(u.tags).to eq("")
|
956
|
-
end
|
957
|
-
end
|
958
|
-
end
|
959
|
-
|
960
|
-
describe "DELETE /api/users/:name" do
|
961
|
-
it "deletes a user" do
|
962
|
-
subject.update_user("alt2-user", tags: "http", password: "alt2-user")
|
963
|
-
subject.delete_user("alt2-user")
|
964
|
-
end
|
965
|
-
end
|
966
|
-
|
967
|
-
describe "GET /api/users/:name/permissions" do
|
968
|
-
it "returns a list of permissions for a user" do
|
969
|
-
xs = subject.user_permissions("guest")
|
970
|
-
p = xs.first
|
971
|
-
|
972
|
-
expect(p.read).to eq(".*")
|
973
|
-
end
|
974
|
-
end
|
975
|
-
|
976
|
-
describe "GET /api/whoami" do
|
977
|
-
it "returns information about the current user" do
|
978
|
-
u = subject.whoami
|
979
|
-
expect(u.name).to eq("guest")
|
980
|
-
end
|
981
|
-
end
|
982
|
-
|
983
|
-
describe "GET /api/permissions" do
|
984
|
-
it "lists all permissions" do
|
985
|
-
xs = subject.list_permissions
|
986
|
-
expect(xs.first.read).to_not be_nil
|
987
|
-
end
|
988
|
-
end
|
989
|
-
|
990
|
-
describe "GET /api/permissions/:vhost/:user" do
|
991
|
-
it "returns a list of permissions of a user in a vhost" do
|
992
|
-
p = subject.list_permissions_of("/", "guest")
|
993
|
-
|
994
|
-
expect(p.read).to eq(".*")
|
995
|
-
expect(p.write).to eq(".*")
|
996
|
-
expect(p.configure).to eq(".*")
|
997
|
-
end
|
998
|
-
end
|
999
|
-
|
1000
|
-
describe "PUT /api/permissions/:vhost/:user" do
|
1001
|
-
it "updates permissions of a user in a vhost" do
|
1002
|
-
subject.update_permissions_of("/", "guest", {write: ".*", read: ".*", configure: ".*"})
|
1003
|
-
|
1004
|
-
p = subject.list_permissions_of("/", "guest")
|
1005
|
-
|
1006
|
-
expect(p.read).to eq(".*")
|
1007
|
-
expect(p.write).to eq(".*")
|
1008
|
-
expect(p.configure).to eq(".*")
|
1009
|
-
end
|
1010
|
-
end
|
1011
|
-
|
1012
|
-
describe "DELETE /api/permissions/:vhost/:user" do
|
1013
|
-
it "clears permissions of a user in a vhost" do
|
1014
|
-
subject.create_user("alt3", {password: "s3cRE7"})
|
1015
|
-
subject.update_permissions_of("/", "alt3", {write: ".*", read: ".*", configure: ".*"}).inspect
|
1016
|
-
subject.clear_permissions_of("/", "alt3")
|
1017
|
-
|
1018
|
-
expect do
|
1019
|
-
subject.list_permissions_of("/", "alt3")
|
1020
|
-
end.to raise_error(Faraday::Error::ResourceNotFound)
|
1021
|
-
end
|
1022
|
-
end
|
1023
|
-
|
1024
|
-
#
|
1025
|
-
# Parameters
|
1026
|
-
#
|
1027
|
-
|
1028
|
-
describe "GET /api/parameters" do
|
1029
|
-
it "returns a list of all parameters" do
|
1030
|
-
xs = subject.list_parameters
|
1031
|
-
expect(xs).to be_kind_of(Array)
|
1032
|
-
end
|
1033
|
-
end
|
1034
|
-
|
1035
|
-
|
1036
|
-
#
|
1037
|
-
# Policies
|
1038
|
-
#
|
1039
|
-
|
1040
|
-
describe "GET /api/policies" do
|
1041
|
-
it "returns a list of all policies" do
|
1042
|
-
xs = subject.list_policies
|
1043
|
-
expect(xs).to be_kind_of(Array)
|
1044
|
-
end
|
1045
|
-
end
|
1046
|
-
|
1047
|
-
describe "GET /api/policies/:vhost" do
|
1048
|
-
it "returns a list of all policies in a vhost" do
|
1049
|
-
xs = subject.list_policies("/")
|
1050
|
-
expect(xs).to be_kind_of(Array)
|
1051
|
-
end
|
1052
|
-
end
|
1053
|
-
|
1054
|
-
|
1055
|
-
#
|
1056
|
-
# Aliveness Test
|
1057
|
-
#
|
1058
|
-
|
1059
|
-
describe "GET /api/aliveness-test/:vhost" do
|
1060
|
-
it "performs aliveness check" do
|
1061
|
-
r = subject.aliveness_test("/")
|
1062
|
-
|
1063
|
-
expect(r).to eq(true)
|
1064
|
-
end
|
1065
|
-
end
|
1066
|
-
|
1067
|
-
#
|
1068
|
-
# Accept Faraday adapter options
|
1069
|
-
#
|
1070
|
-
describe "connection accepts different faraday adapters" do
|
1071
|
-
it "accepts explicit adapter" do
|
1072
|
-
c = described_class.connect("http://guest:guest@127.0.0.1:15672/api",
|
1073
|
-
adapter: :net_http)
|
1074
|
-
r = c.overview
|
1075
|
-
expect(r.rabbitmq_version).to_not be_nil
|
1076
|
-
expect(r.erlang_version).to_not be_nil
|
1077
|
-
end
|
1078
|
-
end
|
1079
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8; mode: ruby -*-
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
4
|
-
|
5
|
-
require 'bundler'
|
6
|
-
Bundler.setup(:default, :test)
|
7
|
-
|
8
|
-
|
9
|
-
require "effin_utf8"
|
10
|
-
require "rspec"
|
11
|
-
require "json"
|
12
|
-
require "rabbitmq/http/client"
|
13
|
-
require "bunny"
|
14
|
-
require "rantly"
|