bunny 0.7.13 → 0.8.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.
Files changed (61) hide show
  1. data/.gitignore +2 -2
  2. data/.travis.yml +7 -16
  3. data/CHANGELOG +3 -21
  4. data/Gemfile +2 -4
  5. data/README.textile +31 -9
  6. data/Rakefile +3 -3
  7. data/bunny.gemspec +6 -3
  8. data/examples/{simple_08.rb → simple.rb} +1 -1
  9. data/examples/{simple_ack_08.rb → simple_ack.rb} +1 -1
  10. data/examples/{simple_consumer_08.rb → simple_consumer.rb} +4 -4
  11. data/examples/{simple_fanout_08.rb → simple_fanout.rb} +1 -1
  12. data/examples/{simple_headers_08.rb → simple_headers.rb} +2 -2
  13. data/examples/{simple_publisher_09.rb → simple_publisher.rb} +1 -1
  14. data/examples/{simple_topic_09.rb → simple_topic.rb} +2 -2
  15. data/ext/amqp-0.9.1.json +1 -0
  16. data/ext/config.yml +3 -3
  17. data/ext/qparser.rb +9 -52
  18. data/lib/bunny/{client09.rb → client.rb} +34 -46
  19. data/lib/bunny/{exchange09.rb → exchange.rb} +16 -15
  20. data/lib/bunny/{queue09.rb → queue.rb} +26 -23
  21. data/lib/bunny/{subscription09.rb → subscription.rb} +11 -6
  22. data/lib/bunny/version.rb +1 -1
  23. data/lib/bunny.rb +15 -33
  24. data/lib/qrack/client.rb +31 -22
  25. data/lib/qrack/protocol/{protocol08.rb → protocol.rb} +2 -1
  26. data/lib/qrack/protocol/{spec09.rb → spec.rb} +8 -7
  27. data/lib/qrack/{qrack08.rb → qrack.rb} +4 -4
  28. data/lib/qrack/subscription.rb +58 -9
  29. data/lib/qrack/transport/{buffer08.rb → buffer.rb} +9 -1
  30. data/lib/qrack/transport/{frame08.rb → frame.rb} +7 -22
  31. data/spec/spec_09/amqp_url_spec.rb +1 -1
  32. data/spec/spec_09/bunny_spec.rb +11 -9
  33. data/spec/spec_09/connection_spec.rb +9 -4
  34. data/spec/spec_09/exchange_spec.rb +23 -25
  35. data/spec/spec_09/queue_spec.rb +33 -19
  36. metadata +71 -81
  37. checksums.yaml +0 -7
  38. data/examples/simple_09.rb +0 -32
  39. data/examples/simple_ack_09.rb +0 -35
  40. data/examples/simple_consumer_09.rb +0 -55
  41. data/examples/simple_fanout_09.rb +0 -41
  42. data/examples/simple_headers_09.rb +0 -42
  43. data/examples/simple_publisher_08.rb +0 -29
  44. data/examples/simple_topic_08.rb +0 -61
  45. data/ext/amqp-0.8.json +0 -616
  46. data/lib/bunny/channel09.rb +0 -39
  47. data/lib/bunny/client08.rb +0 -480
  48. data/lib/bunny/exchange08.rb +0 -177
  49. data/lib/bunny/queue08.rb +0 -403
  50. data/lib/bunny/subscription08.rb +0 -87
  51. data/lib/qrack/protocol/protocol09.rb +0 -135
  52. data/lib/qrack/protocol/spec08.rb +0 -828
  53. data/lib/qrack/qrack09.rb +0 -20
  54. data/lib/qrack/transport/buffer09.rb +0 -305
  55. data/lib/qrack/transport/frame09.rb +0 -97
  56. data/spec/spec_08/bunny_spec.rb +0 -75
  57. data/spec/spec_08/connection_spec.rb +0 -24
  58. data/spec/spec_08/exchange_spec.rb +0 -175
  59. data/spec/spec_08/queue_spec.rb +0 -239
  60. data/spec/spec_helper.rb +0 -8
  61. /data/lib/bunny/{channel08.rb → channel.rb} +0 -0
data/lib/qrack/qrack09.rb DELETED
@@ -1,20 +0,0 @@
1
- # encoding: utf-8
2
-
3
- $: << File.expand_path(File.dirname(__FILE__))
4
-
5
- require 'protocol/spec09'
6
- require 'protocol/protocol09'
7
-
8
- require 'transport/buffer09'
9
- require 'transport/frame09'
10
-
11
- require 'qrack/client'
12
- require 'qrack/channel'
13
- require 'qrack/queue'
14
- require 'bunny/consumer'
15
- require 'qrack/errors'
16
-
17
- module Qrack
18
- include Protocol09
19
- include Transport09
20
- end
@@ -1,305 +0,0 @@
1
- # encoding: utf-8
2
-
3
- if [].map.respond_to? :with_index
4
- class Array #:nodoc:
5
- def enum_with_index
6
- each.with_index
7
- end
8
- end
9
- else
10
- require 'enumerator'
11
- end
12
-
13
- module Qrack
14
- module Transport09 #:nodoc: all
15
- class Buffer
16
-
17
- def initialize data = ''
18
- @data = data
19
- @pos = 0
20
- end
21
-
22
- attr_reader :pos
23
-
24
- def data
25
- @data.clone
26
- end
27
- alias :contents :data
28
- alias :to_s :data
29
-
30
- def << data
31
- @data << data.to_s
32
- self
33
- end
34
-
35
- def length
36
- @data.bytesize
37
- end
38
-
39
- def empty?
40
- pos == length
41
- end
42
-
43
- def rewind
44
- @pos = 0
45
- end
46
-
47
- def read_properties *types
48
- types.shift if types.first == :properties
49
-
50
- i = 0
51
- values = []
52
-
53
- while props = read(:short)
54
- (0..14).each do |n|
55
- # no more property types
56
- break unless types[i]
57
-
58
- # if flag is set
59
- if props & (1<<(15-n)) != 0
60
- if types[i] == :bit
61
- # bit values exist in flags only
62
- values << true
63
- else
64
- # save type name for later reading
65
- values << types[i]
66
- end
67
- else
68
- # property not set or is false bit
69
- values << (types[i] == :bit ? false : nil)
70
- end
71
-
72
- i+=1
73
- end
74
-
75
- # bit(0) == 0 means no more property flags
76
- break unless props & 1 == 1
77
- end
78
-
79
- values.map do |value|
80
- value.is_a?(Symbol) ? read(value) : value
81
- end
82
- end
83
-
84
- def read *types
85
- if types.first == :properties
86
- return read_properties(*types)
87
- end
88
-
89
- values = types.map do |type|
90
- case type
91
- when :octet
92
- _read(1, 'C')
93
- when :short
94
- _read(2, 'n')
95
- when :long
96
- _read(4, 'N')
97
- when :longlong
98
- upper, lower = _read(8, 'NN')
99
- upper << 32 | lower
100
- when :shortstr
101
- _read read(:octet)
102
- when :longstr
103
- _read read(:long)
104
- when :timestamp
105
- Time.at read(:longlong)
106
- when :table
107
- t = Hash.new
108
-
109
- table = Buffer.new(read(:longstr))
110
- until table.empty?
111
- key, type = table.read(:shortstr, :octet)
112
- key = key.intern
113
- t[key] ||= case type
114
- when 83 # 'S'
115
- table.read(:longstr)
116
- when 73 # 'I'
117
- table.read(:long)
118
- when 68 # 'D'
119
- exp = table.read(:octet)
120
- num = table.read(:long)
121
- num / 10.0**exp
122
- when 84 # 'T'
123
- table.read(:timestamp)
124
- when 70 # 'F'
125
- table.read(:table)
126
- when 65 # 'A'
127
- table.read(:array)
128
- when 108 # 'l'
129
- table.read(:longlong)
130
- when 116 # 't'
131
- table.read(:octet) == 1
132
- end
133
- end
134
-
135
- t
136
- when :bit
137
- if (@bits ||= []).empty?
138
- val = read(:octet)
139
- @bits = (0..7).map{|i| (val & (1 << i)) != 0 }
140
- end
141
-
142
- @bits.shift
143
- when :array
144
- a = Array.new
145
-
146
- array = Buffer.new(read(:longstr))
147
- until array.empty?
148
- type = array.read(:octet)
149
- a << case type
150
- when 70 # 'F'
151
- array.read(:table)
152
- end
153
- end
154
-
155
- a
156
- else
157
- raise Qrack::InvalidTypeError, "Cannot read data of type #{type}"
158
- end
159
- end
160
-
161
- types.size == 1 ? values.first : values
162
- end
163
-
164
- def write type, data
165
- case type
166
- when :octet
167
- _write(data, 'C')
168
- when :short
169
- _write(data, 'n')
170
- when :long
171
- _write(data, 'N')
172
- when :longlong
173
- lower = data & 0xffffffff
174
- upper = (data & ~0xffffffff) >> 32
175
- _write([upper, lower], 'NN')
176
- when :shortstr
177
- data = (data || '').to_s
178
- _write([data.bytesize, data], 'Ca*')
179
- when :longstr
180
- if data.is_a? Hash
181
- write(:table, data)
182
- else
183
- data = (data || '').to_s
184
- _write([data.bytesize, data], 'Na*')
185
- end
186
- when :timestamp
187
- write(:longlong, data.to_i)
188
- when :table
189
- data ||= {}
190
- write :longstr, (data.inject(Buffer.new) do |table, (key, value)|
191
- table.write(:shortstr, key.to_s)
192
-
193
- case value
194
- when String
195
- table.write(:octet, 83) # 'S'
196
- table.write(:longstr, value.to_s)
197
- when Integer
198
- table.write(:octet, 73) # 'I'
199
- table.write(:long, value)
200
- when Float
201
- table.write(:octet, 68) # 'D'
202
- # XXX there's gotta be a better way to do this..
203
- exp = value.to_s.split('.').last.bytesize
204
- num = value * 10**exp
205
- table.write(:octet, exp)
206
- table.write(:long, num)
207
- when Time
208
- table.write(:octet, 84) # 'T'
209
- table.write(:timestamp, value)
210
- when Hash
211
- table.write(:octet, 70) # 'F'
212
- table.write(:table, value)
213
- when TrueClass
214
- table.write(:octet, 116) # 't'
215
- table.write(:octet, 1)
216
- when FalseClass
217
- table.write(:octet, 116) # 't'
218
- table.write(:octet, 0)
219
- else
220
- raise Qrack::InvalidTypeError, "Cannot write table field for the type of #{value}"
221
- end
222
-
223
- table
224
- end)
225
- when :bit
226
- [*data].to_enum(:each_slice, 8).each{|bits|
227
- write(:octet, bits.enum_with_index.inject(0){ |byte, (bit, i)|
228
- byte |= (1 << i) if bit
229
- byte
230
- })
231
- }
232
- when :properties
233
- values = []
234
- data.enum_with_index.inject(0) do |short, ((type, value), i)|
235
- n = i % 15
236
- last = i+1 == data.size
237
-
238
- if (n == 0 and i != 0) or last
239
- if data.size > i+1
240
- short |= (1 << 0)
241
- elsif last and value
242
- values << [type,value]
243
- short |= 1<<(15-n)
244
- end
245
-
246
- write(:short, short)
247
- short = 0
248
- end
249
-
250
- if value and !last
251
- values << [type,value]
252
- short |= 1<<(15-n)
253
- end
254
-
255
- short
256
- end
257
-
258
- values.each do |type, value|
259
- write(type, value) unless type == :bit
260
- end
261
- else
262
- raise Qrack::InvalidTypeError, "Cannot write data of type #{type}"
263
- end
264
-
265
- self
266
- end
267
-
268
- def extract
269
- begin
270
- cur_data, cur_pos = @data.clone, @pos
271
- yield self
272
- rescue Qrack::BufferOverflowError
273
- @data, @pos = cur_data, cur_pos
274
- nil
275
- end
276
- end
277
-
278
- def _read(size, pack = nil)
279
- if @data.is_a?(Qrack::Client)
280
- raw = @data.read(size)
281
- return raw if raw.nil? or pack.nil?
282
- return raw.unpack(pack).first
283
- end
284
-
285
- if @pos + size > length
286
- raise Qrack::BufferOverflowError
287
- else
288
- data = @data[@pos,size]
289
- @data[@pos,size] = ''
290
- if pack
291
- data = data.unpack(pack)
292
- data = data.pop if data.size == 1
293
- end
294
- data
295
- end
296
- end
297
-
298
- def _write data, pack = nil
299
- data = [*data].pack(pack) if pack
300
- @data[@pos,0] = data
301
- @pos += data.bytesize
302
- end
303
- end
304
- end
305
- end
@@ -1,97 +0,0 @@
1
-
2
- # encoding: utf-8
3
-
4
-
5
- #:stopdoc:
6
- # this file was autogenerated on 2011-07-21 07:07:06 +0100
7
- #
8
- # DO NOT EDIT! (edit ext/qparser.rb and config.yml instead, and run 'ruby qparser.rb')
9
-
10
- module Qrack
11
- module Transport09
12
- class Frame
13
-
14
- FOOTER = 206
15
- ID = 0
16
-
17
- @types = {
18
- 1 => 'Method',
19
- 2 => 'Header',
20
- 3 => 'Body',
21
- 8 => 'Heartbeat',
22
- }
23
-
24
- attr_accessor :channel, :payload
25
-
26
- def initialize payload = nil, channel = 0
27
- @channel, @payload = channel, payload
28
- end
29
-
30
- def id
31
- self.class::ID
32
- end
33
-
34
- def to_binary
35
- buf = Transport09::Buffer.new
36
- buf.write :octet, id
37
- buf.write :short, channel
38
- buf.write :longstr, payload
39
- buf.write :octet, FOOTER
40
- buf.rewind
41
- buf
42
- end
43
-
44
- def to_s
45
- to_binary.to_s
46
- end
47
-
48
- def == frame
49
- [ :id, :channel, :payload ].inject(true) do |eql, field|
50
- eql and __send__(field) == frame.__send__(field)
51
- end
52
- end
53
-
54
- def self.parse buf
55
- buf = Transport09::Buffer.new(buf) unless buf.is_a? Transport09::Buffer
56
- buf.extract do
57
- id, channel, payload, footer = buf.read(:octet, :short, :longstr, :octet)
58
- Qrack::Transport09.const_get(@types[id]).new(payload, channel) if footer == FOOTER
59
- end
60
- end
61
-
62
- end
63
-
64
- class Method < Frame
65
-
66
- ID = 1
67
-
68
- def initialize payload = nil, channel = 0
69
- super
70
- unless @payload.is_a? Protocol09::Class::Method or @payload.nil?
71
- @payload = Protocol09.parse(@payload)
72
- end
73
- end
74
- end
75
-
76
- class Header < Frame
77
-
78
- ID = 2
79
-
80
- def initialize payload = nil, channel = 0
81
- super
82
- unless @payload.is_a? Protocol09::Header or @payload.nil?
83
- @payload = Protocol09::Header.new(@payload)
84
- end
85
- end
86
- end
87
-
88
- class Body < Frame
89
- ID = 3
90
- end
91
-
92
- class Heartbeat < Frame
93
- ID = 8
94
- end
95
-
96
- end
97
- end
@@ -1,75 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # bunny_spec.rb
4
-
5
- # Assumes that target message broker/server has a user called 'guest' with a password 'guest'
6
- # and that it is running on 'localhost'.
7
-
8
- # If this is not the case, please change the 'Bunny.new' call below to include
9
- # the relevant arguments e.g. @b = Bunny.new(:user => 'john', :pass => 'doe', :host => 'foobar')
10
-
11
- require_relative "../spec_helper"
12
-
13
- describe Bunny do
14
-
15
- before(:each) do
16
- @b = Bunny.new
17
- @b.start
18
- end
19
-
20
- after(:each) do
21
- begin
22
- @b.stop
23
- rescue Exception
24
- ensure
25
- @b = nil
26
- end
27
- end
28
-
29
- it "should connect to an AMQP server" do
30
- @b.status.should == :connected
31
- end
32
-
33
- it "should be able to create and open a new channel" do
34
- c = @b.create_channel
35
- c.number.should == 2
36
- c.should be_an_instance_of(Bunny::Channel)
37
- @b.channels.size.should == 3
38
- c.open.should == :open_ok
39
- @b.channel.number.should == 2
40
- end
41
-
42
- it "should be able to switch between channels" do
43
- @b.channel.number.should == 1
44
- @b.switch_channel(0)
45
- @b.channel.number.should == 0
46
- end
47
-
48
- it "should raise an error if trying to switch to a non-existent channel" do
49
- lambda { @b.switch_channel(5)}.should raise_error(RuntimeError)
50
- end
51
-
52
- it "should be able to create an exchange" do
53
- exch = @b.exchange('test_exchange')
54
- exch.should be_an_instance_of(Bunny::Exchange)
55
- exch.name.should == 'test_exchange'
56
- @b.exchanges.has_key?('test_exchange').should be(true)
57
- end
58
-
59
- it "should be able to create a queue" do
60
- q = @b.queue('test1')
61
- q.should be_an_instance_of(Bunny::Queue)
62
- q.name.should == 'test1'
63
- @b.queues.has_key?('test1').should be(true)
64
- end
65
-
66
- it "should be able to set QoS" do
67
- @b.qos.should == :qos_ok
68
- end
69
-
70
- it "should be able to set QoS (with global:true)" do
71
- @b.qos(:global => true).should == :qos_ok
72
- end
73
-
74
- end
75
-
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # connection_spec.rb
4
-
5
- require_relative "../spec_helper"
6
-
7
- describe Bunny do
8
-
9
- it "should raise an error if the wrong user name or password is used" do
10
- b = Bunny.new(:spec => "0.8", :user => 'wrong')
11
- lambda { b.start}.should raise_error(Bunny::ProtocolError)
12
- end
13
-
14
- it "should be able to open a TCPSocket with a timeout" do
15
- b = Bunny.new(:spec => "0.8")
16
- connect_timeout = 5
17
- lambda {
18
- Bunny::Timer::timeout(connect_timeout, Qrack::ConnectionTimeout) do
19
- TCPSocket.new(b.host, b.port)
20
- end
21
- }.should_not raise_error(Exception)
22
- end
23
-
24
- end
@@ -1,175 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # exchange_spec.rb
4
-
5
- # Assumes that target message broker/server has a user called 'guest' with a password 'guest'
6
- # and that it is running on 'localhost'.
7
-
8
- # If this is not the case, please change the 'Bunny.new' call below to include
9
- # the relevant arguments e.g. @b = Bunny.new(:user => 'john', :pass => 'doe', :host => 'foobar')
10
-
11
- require_relative "../spec_helper"
12
-
13
- describe 'Exchange' do
14
-
15
- before(:each) do
16
- @b = Bunny.new
17
- @b.start
18
- end
19
-
20
- after(:each) do
21
- begin
22
- @b.stop
23
- rescue Exception
24
- ensure
25
- @b = nil
26
- end
27
- end
28
-
29
- it "should raise an error if instantiated as non-existent type" do
30
- lambda { @b.exchange('bogus_ex', :type => :bogus) }.should raise_error(Bunny::ForcedConnectionCloseError)
31
- @b.status.should == :not_connected
32
- end
33
-
34
- it "should allow a default direct exchange to be instantiated by specifying :type" do
35
- exch = @b.exchange('amq.direct', :type => :direct)
36
- exch.should be_an_instance_of(Bunny::Exchange)
37
- exch.name.should == 'amq.direct'
38
- exch.type.should == :direct
39
- @b.exchanges.has_key?('amq.direct').should be(true)
40
- end
41
-
42
- it "should allow a default direct exchange to be instantiated without specifying :type" do
43
- exch = @b.exchange('amq.direct')
44
- exch.should be_an_instance_of(Bunny::Exchange)
45
- exch.name.should == 'amq.direct'
46
- exch.type.should == :direct
47
- @b.exchanges.has_key?('amq.direct').should be(true)
48
- end
49
-
50
- it "should allow a default fanout exchange to be instantiated without specifying :type" do
51
- exch = @b.exchange('amq.fanout')
52
- exch.should be_an_instance_of(Bunny::Exchange)
53
- exch.name.should == 'amq.fanout'
54
- exch.type.should == :fanout
55
- @b.exchanges.has_key?('amq.fanout').should be(true)
56
- end
57
-
58
- it "should allow a default topic exchange to be instantiated without specifying :type" do
59
- exch = @b.exchange('amq.topic')
60
- exch.should be_an_instance_of(Bunny::Exchange)
61
- exch.name.should == 'amq.topic'
62
- exch.type.should == :topic
63
- @b.exchanges.has_key?('amq.topic').should be(true)
64
- end
65
-
66
- it "should allow a default headers (amq.match) exchange to be instantiated without specifying :type" do
67
- exch = @b.exchange('amq.match')
68
- exch.should be_an_instance_of(Bunny::Exchange)
69
- exch.name.should == 'amq.match'
70
- exch.type.should == :headers
71
- @b.exchanges.has_key?('amq.match').should be(true)
72
- end
73
-
74
- it "should allow a default headers (amq.headers) exchange to be instantiated without specifying :type" do
75
- exch = @b.exchange('amq.headers')
76
- exch.should be_an_instance_of(Bunny::Exchange)
77
- exch.name.should == 'amq.headers'
78
- exch.type.should == :headers
79
- @b.exchanges.has_key?('amq.headers').should be(true)
80
- end
81
-
82
- it "should create an exchange as direct by default" do
83
- exch = @b.exchange('direct_defaultex')
84
- exch.should be_an_instance_of(Bunny::Exchange)
85
- exch.name.should == 'direct_defaultex'
86
- exch.type.should == :direct
87
- @b.exchanges.has_key?('direct_defaultex').should be(true)
88
- end
89
-
90
- it "should be able to be instantiated as a direct exchange" do
91
- exch = @b.exchange('direct_exchange', :type => :direct)
92
- exch.should be_an_instance_of(Bunny::Exchange)
93
- exch.name.should == 'direct_exchange'
94
- exch.type.should == :direct
95
- @b.exchanges.has_key?('direct_exchange').should be(true)
96
- end
97
-
98
- it "should be able to be instantiated as a topic exchange" do
99
- exch = @b.exchange('topic_exchange', :type => :topic)
100
- exch.should be_an_instance_of(Bunny::Exchange)
101
- exch.name.should == 'topic_exchange'
102
- exch.type.should == :topic
103
- @b.exchanges.has_key?('topic_exchange').should be(true)
104
- end
105
-
106
- it "should be able to be instantiated as a fanout exchange" do
107
- exch = @b.exchange('fanout_exchange', :type => :fanout)
108
- exch.should be_an_instance_of(Bunny::Exchange)
109
- exch.name.should == 'fanout_exchange'
110
- exch.type.should == :fanout
111
- @b.exchanges.has_key?('fanout_exchange').should be(true)
112
- end
113
-
114
- it "should be able to be instantiated as a headers exchange" do
115
- exch = @b.exchange('headers_exchange', :type => :headers)
116
- exch.should be_an_instance_of(Bunny::Exchange)
117
- exch.name.should == 'headers_exchange'
118
- exch.type.should == :headers
119
- @b.exchanges.has_key?('headers_exchange').should be(true)
120
- end
121
-
122
- it "should ignore the :nowait option when instantiated" do
123
- exch = @b.exchange('direct2_exchange', :nowait => true)
124
- end
125
-
126
- it "should be able to publish a message" do
127
- exch = @b.exchange('direct_exchange')
128
- exch.publish('This is a published message')
129
- end
130
-
131
- it "should not modify the passed options hash when publishing a message" do
132
- exch = @b.exchange('direct_exchange')
133
- opts = {:key => 'a', :persistent => true}
134
- exch.publish('', opts)
135
- opts.should == {:key => 'a', :persistent => true}
136
- end
137
-
138
- it "should be able to publish a message with headers containing integer values" do
139
- exch = @b.exchange('direct_exchange')
140
- exch.publish('This is a published message', :headers => {:a => 1})
141
- end
142
-
143
- it "should be able to return an undeliverable message" do
144
- exch = @b.exchange('return_exch')
145
- exch.publish('This message should be undeliverable', :mandatory => true)
146
- ret_msg = @b.returned_message
147
- ret_msg.should be_an_instance_of(Hash)
148
- ret_msg[:payload].should == 'This message should be undeliverable'
149
- end
150
-
151
- it "should be able to handle connection close on trying to publish with immediate=true" do
152
- exch = @b.exchange('return_exch')
153
- exch.publish('This message should force a connection close', :immediate => true)
154
- lambda { @b.returned_message }.should raise_error(Bunny::ForcedConnectionCloseError)
155
- end
156
-
157
- it "should not close the connection when trying to delete a non existent exchange" do
158
- exch = @b.exchange('direct_exchange')
159
- exch.delete(:exchange => 'bogus_ex').should == :delete_ok
160
- @b.channel.active.should == true
161
- end
162
-
163
- it "should be able to be deleted" do
164
- exch = @b.exchange('direct_exchange')
165
- res = exch.delete
166
- res.should == :delete_ok
167
- @b.exchanges.has_key?('direct_exchange').should be(false)
168
- end
169
-
170
- it "should ignore the :nowait option when deleted" do
171
- exch = @b.exchange('direct2_exchange')
172
- exch.delete(:nowait => true)
173
- end
174
-
175
- end