bunny 0.7.13 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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