bunny-mock 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/.rubocop_todo.yml +0 -19
- data/CHANGELOG.md +5 -0
- data/README.md +8 -3
- data/lib/bunny-mock.rb +0 -3
- data/lib/bunny_mock/channel.rb +35 -23
- data/lib/bunny_mock/exchange.rb +0 -14
- data/lib/bunny_mock/exchanges/direct.rb +0 -2
- data/lib/bunny_mock/exchanges/fanout.rb +0 -2
- data/lib/bunny_mock/exchanges/headers.rb +0 -2
- data/lib/bunny_mock/exchanges/topic.rb +0 -2
- data/lib/bunny_mock/queue.rb +0 -11
- data/lib/bunny_mock/session.rb +0 -6
- data/lib/bunny_mock/version.rb +1 -2
- data/spec/unit/bunny_mock/channel_spec.rb +43 -0
- data/spec/unit/bunny_mock_spec.rb +10 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ce7333898b5b71042b88715549e3aff6b578548
|
4
|
+
data.tar.gz: 576392f37adb5c7baf5c85eb3074b096bf75894d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9aa0f6f2ad6557edbf70a984c0277396c69a820b2f8ed43f18e8e4be6ccdd654b1cc5993cff421a510713461a5755c599b6773ab28adfb1efb3ebcf76033953d
|
7
|
+
data.tar.gz: 94ea8ce5094702d17692bb653a9761313a6f6b9c0d02e9eabca040c9ca33e47bf447b8fd5cb97d02f04e1760f46cb5efd5ff8cb22395e322b90fc86b9d02bb0a
|
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -24,22 +24,3 @@ Style/Documentation:
|
|
24
24
|
- 'lib/bunny_mock/exchanges/headers.rb'
|
25
25
|
- 'lib/bunny_mock/exchanges/topic.rb'
|
26
26
|
- 'lib/bunny_mock/queue.rb'
|
27
|
-
|
28
|
-
# Offense count: 9
|
29
|
-
# Cop supports --auto-correct.
|
30
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
31
|
-
# SupportedStyles: empty_lines, no_empty_lines
|
32
|
-
Style/EmptyLinesAroundClassBody:
|
33
|
-
Enabled: false
|
34
|
-
|
35
|
-
# Offense count: 36
|
36
|
-
# Cop supports --auto-correct.
|
37
|
-
Style/EmptyLinesAroundMethodBody:
|
38
|
-
Enabled: false
|
39
|
-
|
40
|
-
# Offense count: 2
|
41
|
-
# Cop supports --auto-correct.
|
42
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
43
|
-
# SupportedStyles: empty_lines, no_empty_lines
|
44
|
-
Style/EmptyLinesAroundModuleBody:
|
45
|
-
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## v1.3.0
|
2
|
+
|
3
|
+
* [#12](https://github.com/arempe93/bunny-mock/pull/12): Adds `basic_publish` functionality to `Channel` - [@podung](https://github.com/podung)
|
4
|
+
* [#13](https://github.com/arempe93/bunny-mock/pull/13): Add `confirm_select` method stub - [@baelter](https://github.com/baelter)
|
5
|
+
|
1
6
|
## v1.2.2
|
2
7
|
|
3
8
|
* [#6](https://github.com/arempe93/bunny-mock/pull/6): Adds more status methods to `Session` - [@syndbg](https://github.com/syndbg)
|
data/README.md
CHANGED
@@ -8,6 +8,10 @@ Bunny Mock
|
|
8
8
|
|
9
9
|
A mock client for RabbitMQ, modeled after the popular [Bunny client](https://github.com/ruby-amqp/bunny). It currently supports basic usage of Bunny for managing exchanges and queues, with the goal of being able to handle and test all Bunny use cases.
|
10
10
|
|
11
|
+
##### Upgrading
|
12
|
+
|
13
|
+
This project does its best to follow [semantic versioning practices](http://semver.org/). Check the [CHANGELOG](CHANGELOG.md) to see detailed versioning notes, and [UPGRADING](UPGRADING.md) for notes about major changes or deprecations.
|
14
|
+
|
11
15
|
## Usage
|
12
16
|
|
13
17
|
BunnyMock can be injected into your RabbitMQ application in place of Bunny for testing. For example, if you have a helper module named `AMQFactory`, some code similar to the following placed in `spec_helper` or `test_helper` or what have you is all you need to start using BunnyMock to test your RabbitMQ application
|
@@ -43,10 +47,10 @@ it 'should create queues and exchanges' do
|
|
43
47
|
expect(session.queue_exists?('queue.test')).to be_falsey
|
44
48
|
|
45
49
|
xchg = channel.exchange 'xchg.test'
|
46
|
-
expect(session.exchange_exists?('
|
50
|
+
expect(session.exchange_exists?('xchg.test')).to be_truthy
|
47
51
|
|
48
52
|
xchg.delete
|
49
|
-
expect(session.exchange_exists?('
|
53
|
+
expect(session.exchange_exists?('xchg.test')).to be_falsey
|
50
54
|
end
|
51
55
|
```
|
52
56
|
|
@@ -76,6 +80,7 @@ it 'should route messages from exchanges' do
|
|
76
80
|
xchg = channel.topic 'xchg.topic'
|
77
81
|
queue = channel.queue 'queue.test'
|
78
82
|
|
83
|
+
queue.bind xchg
|
79
84
|
xchg.publish 'Routed message', routing_key: '*.test'
|
80
85
|
|
81
86
|
expect(queue.message_count).to eq(1)
|
@@ -119,7 +124,7 @@ it 'should bind exchanges to exchanges' do
|
|
119
124
|
|
120
125
|
receiver.unbind source
|
121
126
|
expect(receiver.bound_to?(source)).to be_falsey
|
122
|
-
expect(
|
127
|
+
expect(source.routes_to?(receiver)).to be_falsey
|
123
128
|
|
124
129
|
receiver.bind 'xchg.source'
|
125
130
|
expect(receiver.bound_to?(source)).to be_truthy
|
data/lib/bunny-mock.rb
CHANGED
@@ -20,12 +20,10 @@ require 'bunny_mock/exchanges/headers'
|
|
20
20
|
# @see https://github.com/ruby-amq/bunny
|
21
21
|
#
|
22
22
|
module BunnyMock
|
23
|
-
|
24
23
|
# AMQP protocol version
|
25
24
|
PROTOCOL_VERSION = AMQ::Protocol::PROTOCOL_VERSION
|
26
25
|
|
27
26
|
class << self
|
28
|
-
|
29
27
|
#
|
30
28
|
# API
|
31
29
|
#
|
@@ -36,7 +34,6 @@ module BunnyMock
|
|
36
34
|
# @return [BunnyMock::Session] Session instance
|
37
35
|
# @api public
|
38
36
|
def new(*)
|
39
|
-
|
40
37
|
# return new mock session
|
41
38
|
BunnyMock::Session.new
|
42
39
|
end
|
data/lib/bunny_mock/channel.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module BunnyMock
|
3
3
|
class Channel
|
4
|
-
|
5
4
|
#
|
6
5
|
# API
|
7
6
|
#
|
@@ -24,7 +23,6 @@ module BunnyMock
|
|
24
23
|
# @api public
|
25
24
|
#
|
26
25
|
def initialize(connection = nil, id = nil)
|
27
|
-
|
28
26
|
# store channel id
|
29
27
|
@id = id
|
30
28
|
|
@@ -58,7 +56,6 @@ module BunnyMock
|
|
58
56
|
# @api public
|
59
57
|
#
|
60
58
|
def open
|
61
|
-
|
62
59
|
@status = :open
|
63
60
|
|
64
61
|
self
|
@@ -71,7 +68,6 @@ module BunnyMock
|
|
71
68
|
# @api public
|
72
69
|
#
|
73
70
|
def close
|
74
|
-
|
75
71
|
@status = :closed
|
76
72
|
|
77
73
|
self
|
@@ -100,10 +96,7 @@ module BunnyMock
|
|
100
96
|
# @api public
|
101
97
|
#
|
102
98
|
def exchange(name, opts = {})
|
103
|
-
|
104
|
-
xchg = @connection.find_exchange(name) || Exchange.declare(self, name, opts)
|
105
|
-
|
106
|
-
@connection.register_exchange xchg
|
99
|
+
@connection.register_exchange xchg_find_or_create(name, opts)
|
107
100
|
end
|
108
101
|
|
109
102
|
##
|
@@ -184,6 +177,23 @@ module BunnyMock
|
|
184
177
|
direct '', no_declare: true
|
185
178
|
end
|
186
179
|
|
180
|
+
##
|
181
|
+
# Mocks Bunny::Channel#basic_publish
|
182
|
+
#
|
183
|
+
# @param [String] payload Message payload. It will never be modified by Bunny or RabbitMQ in any way.
|
184
|
+
# @param [String] exchange Exchange to publish to
|
185
|
+
# @param [String] routing_key Routing key
|
186
|
+
# @param [Hash] opts Publishing options
|
187
|
+
|
188
|
+
# @return [BunnyMock::Channel] Self
|
189
|
+
def basic_publish(payload, xchg, routing_key, opts = {})
|
190
|
+
xchg = xchg_find_or_create(xchg) unless xchg.respond_to? :name
|
191
|
+
|
192
|
+
xchg.publish payload, opts.merge(routing_key: routing_key)
|
193
|
+
|
194
|
+
self
|
195
|
+
end
|
196
|
+
|
187
197
|
# @endgroup
|
188
198
|
|
189
199
|
# @group Queue API
|
@@ -198,9 +208,7 @@ module BunnyMock
|
|
198
208
|
# @api public
|
199
209
|
#
|
200
210
|
def queue(name = '', opts = {})
|
201
|
-
|
202
211
|
queue = @connection.find_queue(name) || Queue.new(self, name, opts)
|
203
|
-
|
204
212
|
@connection.register_queue queue
|
205
213
|
end
|
206
214
|
|
@@ -214,10 +222,19 @@ module BunnyMock
|
|
214
222
|
# @api public
|
215
223
|
#
|
216
224
|
def temporary_queue(opts = {})
|
217
|
-
|
218
225
|
queue '', opts.merge(exclusive: true)
|
219
226
|
end
|
220
227
|
|
228
|
+
##
|
229
|
+
# Does nothing atm.
|
230
|
+
#
|
231
|
+
# @return nil
|
232
|
+
# @api public
|
233
|
+
#
|
234
|
+
def confirm_select(callback = nil)
|
235
|
+
# noop
|
236
|
+
end
|
237
|
+
|
221
238
|
# @endgroup
|
222
239
|
|
223
240
|
#
|
@@ -236,9 +253,7 @@ module BunnyMock
|
|
236
253
|
|
237
254
|
# @private
|
238
255
|
def queue_bind(queue, key, xchg)
|
239
|
-
|
240
256
|
exchange = @connection.find_exchange xchg
|
241
|
-
|
242
257
|
raise Bunny::NotFound.new("Exchange '#{xchg}' was not found", self, false) unless exchange
|
243
258
|
|
244
259
|
exchange.add_route key, queue
|
@@ -246,9 +261,7 @@ module BunnyMock
|
|
246
261
|
|
247
262
|
# @private
|
248
263
|
def queue_unbind(key, xchg)
|
249
|
-
|
250
264
|
exchange = @connection.find_exchange xchg
|
251
|
-
|
252
265
|
raise Bunny::NotFound.new("Exchange '#{xchg}' was not found", self, false) unless exchange
|
253
266
|
|
254
267
|
exchange.remove_route key
|
@@ -256,9 +269,7 @@ module BunnyMock
|
|
256
269
|
|
257
270
|
# @private
|
258
271
|
def xchg_bound_to?(receiver, key, name)
|
259
|
-
|
260
272
|
source = @connection.find_exchange name
|
261
|
-
|
262
273
|
raise Bunny::NotFound.new("Exchange '#{name}' was not found", self, false) unless source
|
263
274
|
|
264
275
|
source.routes_to? receiver, routing_key: key
|
@@ -266,9 +277,7 @@ module BunnyMock
|
|
266
277
|
|
267
278
|
# @private
|
268
279
|
def xchg_routes_to?(key, xchg)
|
269
|
-
|
270
280
|
exchange = @connection.find_exchange xchg
|
271
|
-
|
272
281
|
raise Bunny::NotFound.new("Exchange '#{xchg}' was not found", self, false) unless exchange
|
273
282
|
|
274
283
|
exchange.routes_to? key
|
@@ -276,9 +285,7 @@ module BunnyMock
|
|
276
285
|
|
277
286
|
# @private
|
278
287
|
def xchg_bind(receiver, routing_key, name)
|
279
|
-
|
280
288
|
source = @connection.find_exchange name
|
281
|
-
|
282
289
|
raise Bunny::NotFound.new("Exchange '#{name}' was not found", self, false) unless source
|
283
290
|
|
284
291
|
source.add_route routing_key, receiver
|
@@ -286,12 +293,17 @@ module BunnyMock
|
|
286
293
|
|
287
294
|
# @private
|
288
295
|
def xchg_unbind(routing_key, name)
|
289
|
-
|
290
296
|
source = @connection.find_exchange name
|
291
|
-
|
292
297
|
raise Bunny::NotFound.new("Exchange '#{name}' was not found", self, false) unless source
|
293
298
|
|
294
299
|
source.remove_route routing_key
|
295
300
|
end
|
301
|
+
|
302
|
+
private
|
303
|
+
|
304
|
+
# @private
|
305
|
+
def xchg_find_or_create(name, opts = {})
|
306
|
+
@connection.find_exchange(name) || Exchange.declare(self, name, opts)
|
307
|
+
end
|
296
308
|
end
|
297
309
|
end
|
data/lib/bunny_mock/exchange.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module BunnyMock
|
3
3
|
class Exchange
|
4
|
-
|
5
4
|
class << self
|
6
|
-
|
7
5
|
##
|
8
6
|
# Create a new {BunnyMock::Exchange} instance
|
9
7
|
#
|
@@ -20,7 +18,6 @@ module BunnyMock
|
|
20
18
|
# @api public
|
21
19
|
#
|
22
20
|
def declare(channel, name = '', opts = {})
|
23
|
-
|
24
21
|
# get requested type
|
25
22
|
type = opts.fetch :type, :direct
|
26
23
|
|
@@ -69,7 +66,6 @@ module BunnyMock
|
|
69
66
|
|
70
67
|
# @private
|
71
68
|
def initialize(channel, name, type, opts)
|
72
|
-
|
73
69
|
# store creation information
|
74
70
|
@channel = channel
|
75
71
|
@name = name
|
@@ -117,7 +113,6 @@ module BunnyMock
|
|
117
113
|
# @api public
|
118
114
|
#
|
119
115
|
def publish(payload, opts = {})
|
120
|
-
|
121
116
|
# handle message sending, varies by type
|
122
117
|
deliver payload, opts, opts.fetch(:routing_key, '')
|
123
118
|
|
@@ -130,7 +125,6 @@ module BunnyMock
|
|
130
125
|
# @api public
|
131
126
|
#
|
132
127
|
def delete(*)
|
133
|
-
|
134
128
|
@channel.deregister_exchange self
|
135
129
|
|
136
130
|
@deleted = true
|
@@ -148,12 +142,10 @@ module BunnyMock
|
|
148
142
|
# @api public
|
149
143
|
#
|
150
144
|
def bind(exchange, opts = {})
|
151
|
-
|
152
145
|
if exchange.respond_to?(:add_route)
|
153
146
|
|
154
147
|
# we can do the binding ourselves
|
155
148
|
exchange.add_route opts.fetch(:routing_key, @name), self
|
156
|
-
|
157
149
|
else
|
158
150
|
|
159
151
|
# we need the channel to look up the exchange
|
@@ -175,12 +167,10 @@ module BunnyMock
|
|
175
167
|
# @api public
|
176
168
|
#
|
177
169
|
def unbind(exchange, opts = {})
|
178
|
-
|
179
170
|
if exchange.respond_to?(:remove_route)
|
180
171
|
|
181
172
|
# we can do the unbinding ourselves
|
182
173
|
exchange.remove_route opts.fetch(:routing_key, @name)
|
183
|
-
|
184
174
|
else
|
185
175
|
|
186
176
|
# we need the channel to look up the exchange
|
@@ -204,12 +194,10 @@ module BunnyMock
|
|
204
194
|
# @api public
|
205
195
|
#
|
206
196
|
def bound_to?(exchange, opts = {})
|
207
|
-
|
208
197
|
if exchange.respond_to?(:routes_to?)
|
209
198
|
|
210
199
|
# we can find out on the exchange object
|
211
200
|
exchange.routes_to? self, opts
|
212
|
-
|
213
201
|
else
|
214
202
|
|
215
203
|
# we need the channel to look up the exchange
|
@@ -229,9 +217,7 @@ module BunnyMock
|
|
229
217
|
# @api public
|
230
218
|
#
|
231
219
|
def routes_to?(exchange_or_queue, opts = {})
|
232
|
-
|
233
220
|
route = exchange_or_queue.respond_to?(:name) ? exchange_or_queue.name : exchange_or_queue
|
234
|
-
|
235
221
|
@routes.key? opts.fetch(:routing_key, route)
|
236
222
|
end
|
237
223
|
|
@@ -2,7 +2,6 @@
|
|
2
2
|
module BunnyMock
|
3
3
|
module Exchanges
|
4
4
|
class Direct < BunnyMock::Exchange
|
5
|
-
|
6
5
|
#
|
7
6
|
# API
|
8
7
|
#
|
@@ -17,7 +16,6 @@ module BunnyMock
|
|
17
16
|
# @api public
|
18
17
|
#
|
19
18
|
def deliver(payload, opts, key)
|
20
|
-
|
21
19
|
@routes[key].publish payload, opts if @routes[key]
|
22
20
|
end
|
23
21
|
end
|
@@ -2,7 +2,6 @@
|
|
2
2
|
module BunnyMock
|
3
3
|
module Exchanges
|
4
4
|
class Fanout < BunnyMock::Exchange
|
5
|
-
|
6
5
|
#
|
7
6
|
# API
|
8
7
|
#
|
@@ -17,7 +16,6 @@ module BunnyMock
|
|
17
16
|
# @api public
|
18
17
|
#
|
19
18
|
def deliver(payload, opts, _key)
|
20
|
-
|
21
19
|
@routes.each_value { |destination| destination.publish(payload, opts) }
|
22
20
|
end
|
23
21
|
end
|
@@ -2,7 +2,6 @@
|
|
2
2
|
module BunnyMock
|
3
3
|
module Exchanges
|
4
4
|
class Header < BunnyMock::Exchange
|
5
|
-
|
6
5
|
# @private
|
7
6
|
# @return [Regexp] Any match
|
8
7
|
ANY = /^any$/i
|
@@ -25,7 +24,6 @@ module BunnyMock
|
|
25
24
|
# @api public
|
26
25
|
#
|
27
26
|
def deliver(payload, opts, key)
|
28
|
-
|
29
27
|
# ~: proper headers exchange implementation
|
30
28
|
@routes[key].publish payload, opts if @routes[key]
|
31
29
|
end
|
@@ -2,7 +2,6 @@
|
|
2
2
|
module BunnyMock
|
3
3
|
module Exchanges
|
4
4
|
class Topic < BunnyMock::Exchange
|
5
|
-
|
6
5
|
# @private
|
7
6
|
# @return [String] Multiple subdomain wildcard
|
8
7
|
MULTI_WILDCARD = '#'
|
@@ -25,7 +24,6 @@ module BunnyMock
|
|
25
24
|
# @api public
|
26
25
|
#
|
27
26
|
def deliver(payload, opts, key)
|
28
|
-
|
29
27
|
# escape periods with backslash for regex
|
30
28
|
key = key.gsub('.', '\.')
|
31
29
|
|
data/lib/bunny_mock/queue.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module BunnyMock
|
3
3
|
class Queue
|
4
|
-
|
5
4
|
#
|
6
5
|
# API
|
7
6
|
#
|
@@ -25,7 +24,6 @@ module BunnyMock
|
|
25
24
|
# @see BunnyMock::Channel#queue
|
26
25
|
#
|
27
26
|
def initialize(channel, name = '', opts = {})
|
28
|
-
|
29
27
|
# Store creation information
|
30
28
|
@channel = channel
|
31
29
|
@name = name
|
@@ -63,7 +61,6 @@ module BunnyMock
|
|
63
61
|
# @api public
|
64
62
|
#
|
65
63
|
def publish(payload, opts = {})
|
66
|
-
|
67
64
|
check_queue_deleted!
|
68
65
|
|
69
66
|
# add to messages
|
@@ -83,14 +80,12 @@ module BunnyMock
|
|
83
80
|
# @api public
|
84
81
|
#
|
85
82
|
def bind(exchange, opts = {})
|
86
|
-
|
87
83
|
check_queue_deleted!
|
88
84
|
|
89
85
|
if exchange.respond_to?(:add_route)
|
90
86
|
|
91
87
|
# we can do the binding ourselves
|
92
88
|
exchange.add_route opts.fetch(:routing_key, @name), self
|
93
|
-
|
94
89
|
else
|
95
90
|
|
96
91
|
# we need the channel to lookup the exchange
|
@@ -109,14 +104,12 @@ module BunnyMock
|
|
109
104
|
# @api public
|
110
105
|
#
|
111
106
|
def unbind(exchange, opts = {})
|
112
|
-
|
113
107
|
check_queue_deleted!
|
114
108
|
|
115
109
|
if exchange.respond_to?(:remove_route)
|
116
110
|
|
117
111
|
# we can do the unbinding ourselves
|
118
112
|
exchange.remove_route opts.fetch(:routing_key, @name)
|
119
|
-
|
120
113
|
else
|
121
114
|
|
122
115
|
# we need the channel to lookup the exchange
|
@@ -138,14 +131,12 @@ module BunnyMock
|
|
138
131
|
# @api public
|
139
132
|
#
|
140
133
|
def bound_to?(exchange, opts = {})
|
141
|
-
|
142
134
|
check_queue_deleted!
|
143
135
|
|
144
136
|
if exchange.respond_to?(:routes_to?)
|
145
137
|
|
146
138
|
# we can do the check ourselves
|
147
139
|
exchange.routes_to? opts.fetch(:routing_key, @name)
|
148
|
-
|
149
140
|
else
|
150
141
|
|
151
142
|
# we need the channel to lookup the exchange
|
@@ -198,9 +189,7 @@ module BunnyMock
|
|
198
189
|
# @api public
|
199
190
|
#
|
200
191
|
def delete
|
201
|
-
|
202
192
|
@channel.deregister_queue self
|
203
|
-
|
204
193
|
@deleted = true
|
205
194
|
end
|
206
195
|
|
data/lib/bunny_mock/session.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
module BunnyMock
|
3
3
|
# Mocks Bunny::Session
|
4
4
|
class Session
|
5
|
-
|
6
5
|
#
|
7
6
|
# API
|
8
7
|
#
|
@@ -21,7 +20,6 @@ module BunnyMock
|
|
21
20
|
#
|
22
21
|
# @api public
|
23
22
|
def initialize(*)
|
24
|
-
|
25
23
|
# not connected until {BunnyMock::Session#start} is called
|
26
24
|
@status = :not_connected
|
27
25
|
|
@@ -39,9 +37,7 @@ module BunnyMock
|
|
39
37
|
# @return [BunnyMock::Session] self
|
40
38
|
# @api public
|
41
39
|
def start
|
42
|
-
|
43
40
|
@status = :connected
|
44
|
-
|
45
41
|
self
|
46
42
|
end
|
47
43
|
|
@@ -52,7 +48,6 @@ module BunnyMock
|
|
52
48
|
# @api public
|
53
49
|
def stop
|
54
50
|
@status = :closed
|
55
|
-
|
56
51
|
self
|
57
52
|
end
|
58
53
|
alias close stop
|
@@ -94,7 +89,6 @@ module BunnyMock
|
|
94
89
|
# @return [BunnyMock::Channel] Channel instance
|
95
90
|
# @api public
|
96
91
|
def create_channel(n = nil, _pool_size = 1)
|
97
|
-
|
98
92
|
# raise same error as {Bunny::Session#create_channel}
|
99
93
|
raise ArgumentError, 'channel number 0 is reserved in the protocol and cannot be used' if n == 0
|
100
94
|
|
data/lib/bunny_mock/version.rb
CHANGED
@@ -114,6 +114,49 @@ describe BunnyMock::Channel do
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
+
context '#basic_publish' do
|
118
|
+
let(:xchg_name) { 'testing.xchg' }
|
119
|
+
let(:key) { 'routing.key' }
|
120
|
+
let(:data) { { some: 'data' } }
|
121
|
+
|
122
|
+
let(:xchg) { @channel.direct xchg_name }
|
123
|
+
let(:queue) { @channel.queue 'testing.queue' }
|
124
|
+
|
125
|
+
before do
|
126
|
+
queue.bind(xchg, routing_key: key)
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'returns BunnyMock::Channel#self' do
|
130
|
+
result = @channel.basic_publish(data, xchg_name, key)
|
131
|
+
|
132
|
+
expect(result).to eq @channel
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'should publish to the exchange' do
|
136
|
+
@channel.basic_publish(data, xchg_name, key)
|
137
|
+
|
138
|
+
expect(queue.pop[:message]).to eq data
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'accepts exchange object for exchange param' do
|
142
|
+
@channel.basic_publish(data, xchg, key)
|
143
|
+
|
144
|
+
expect(queue.pop[:message]).to eq data
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'passes opts down to exchange' do
|
148
|
+
@channel.basic_publish(data, xchg, key, extra: 'opts')
|
149
|
+
|
150
|
+
expect(queue.pop[:options]).to include(extra: 'opts')
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'creates exchange if it does not exist' do
|
154
|
+
@channel.basic_publish(data, 'some.other.xchg', key)
|
155
|
+
|
156
|
+
expect(@channel.exchange('some.other.xchg')).to be_kind_of BunnyMock::Exchange
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
117
160
|
context '#queue' do
|
118
161
|
|
119
162
|
it 'should declare a new queue' do
|
@@ -22,4 +22,14 @@ describe BunnyMock do
|
|
22
22
|
expect(BunnyMock.protocol_version).to eq('0.9.1')
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
it 'should route messages from exchanges' do
|
27
|
+
channel = BunnyMock.new.start.channel
|
28
|
+
|
29
|
+
xchg = channel.topic 'xchg.topic'
|
30
|
+
queue = channel.queue 'queue.test'
|
31
|
+
|
32
|
+
queue.bind xchg
|
33
|
+
xchg.publish('Routed message', routing_key: '*.test')
|
34
|
+
end
|
25
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bunny-mock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Rempe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bunny
|