spec/integration/bunny/amqp_integration_spec.rb in message-driver-0.4.0 vs spec/integration/bunny/amqp_integration_spec.rb in message-driver-0.5.0
- old
+ new
@@ -1,134 +1,73 @@
require 'spec_helper'
-describe 'AMQP Integration', :bunny, type: :integration do
+RSpec.describe 'AMQP Integration', :bunny, type: :integration do
let!(:broker) { MessageDriver::Broker.configure BrokerConfig.config }
context "when a queue can't be found" do
let(:queue_name) { 'my.lost.queue' }
it 'raises a MessageDriver::QueueNotFound error' do
- expect {
+ expect do
broker.dynamic_destination(queue_name, passive: true)
- }.to raise_error(MessageDriver::QueueNotFound) do |err|
- expect(err.queue_name).to eq(queue_name)
+ end.to raise_error(MessageDriver::QueueNotFound) do |err|
expect(err.nested).to be_a Bunny::NotFound
end
end
end
context 'when a channel level exception occurs' do
it 'raises a MessageDriver::WrappedError error' do
- expect {
+ expect do
broker.dynamic_destination('not.a.queue', passive: true)
- }.to raise_error(MessageDriver::WrappedError) { |err| err.nested.should be_a Bunny::ChannelLevelException }
+ end.to raise_error(MessageDriver::WrappedError) { |err| expect(err.nested).to be_a Bunny::ChannelLevelException }
end
it 'reestablishes the channel transparently' do
- expect {
+ expect do
broker.dynamic_destination('not.a.queue', passive: true)
- }.to raise_error(MessageDriver::WrappedError)
- expect {
+ end.to raise_error(MessageDriver::WrappedError)
+ expect do
broker.dynamic_destination('', exclusive: true)
- }.to_not raise_error
+ end.to_not raise_error
end
context 'when in a transaction' do
it 'sets the channel_context as rollback-only until the transaction is finished' do
MessageDriver::Client.with_message_transaction do
- expect {
+ expect do
broker.dynamic_destination('not.a.queue', passive: true)
- }.to raise_error(MessageDriver::WrappedError)
- expect {
+ end.to raise_error(MessageDriver::WrappedError)
+ expect do
broker.dynamic_destination('', exclusive: true)
- }.to raise_error(MessageDriver::TransactionRollbackOnly)
+ end.to raise_error(MessageDriver::TransactionRollbackOnly)
end
- expect {
+ expect do
broker.dynamic_destination('', exclusive: true)
- }.to_not raise_error
+ end.to_not raise_error
end
end
end
- context 'when the broker connection fails', pending: 'these spec are busted' do
- def disrupt_connection
- #yes, this is very implementation specific
- broker.adapter.connection.instance_variable_get(:@transport).close
- end
-
- def create_destination(queue_name)
- broker.dynamic_destination(queue_name, exclusive: true)
- end
-
- it 'raises a MessageDriver::ConnectionError' do
- dest = create_destination('test_queue')
- disrupt_connection
- expect {
- dest.publish('Reconnection Test')
- }.to raise_error(MessageDriver::ConnectionError) do |err|
- expect(err.nested).to be_a Bunny::NetworkErrorWrapper
- end
- end
-
- it 'seemlessly reconnects' do
- dest = create_destination('seemless.reconnect.queue')
- disrupt_connection
- expect {
- dest.publish('Reconnection Test 1')
- }.to raise_error(MessageDriver::ConnectionError)
- dest = create_destination('seemless.reconnect.queue')
- dest.publish('Reconnection Test 2')
- msg = dest.pop_message
- expect(msg).to_not be_nil
- expect(msg.body).to eq('Reconnection Test 2')
- end
-
- context 'when in a transaction' do
- it 'raises a MessageDriver::ConnectionError' do
- expect {
- MessageDriver::Client.with_message_transaction do
- disrupt_connection
- broker.dynamic_destination('', exclusive: true)
- end
- }.to raise_error(MessageDriver::ConnectionError)
- end
-
- it 'sets the channel_context as rollback-only until the transaction is finished' do
- MessageDriver::Client.with_message_transaction do
- disrupt_connection
- expect {
- broker.dynamic_destination('', exclusive: true)
- }.to raise_error(MessageDriver::ConnectionError)
- expect {
- broker.dynamic_destination('', exclusive: true)
- }.to raise_error(MessageDriver::TransactionRollbackOnly)
- end
- expect {
- broker.dynamic_destination('', exclusive: true)
- }.to_not raise_error
- end
- end
- end
-
context 'when an unhandled expection occurs in a transaction' do
let(:destination) { broker.dynamic_destination('', exclusive: true) }
it 'rolls back the transaction' do
- expect {
+ expect do
MessageDriver::Client.with_message_transaction do
destination.publish('Test Message')
- raise 'unhandled error'
+ fail 'unhandled error'
end
- }.to raise_error 'unhandled error'
+ end.to raise_error 'unhandled error'
expect(destination.pop_message).to be_nil
end
it 'allows the next transaction to continue' do
- expect {
+ expect do
MessageDriver::Client.with_message_transaction do
destination.publish('Test Message 1')
- raise 'unhandled error'
+ fail 'unhandled error'
end
- }.to raise_error 'unhandled error'
+ end.to raise_error 'unhandled error'
expect(destination.pop_message).to be_nil
MessageDriver::Client.with_message_transaction do
destination.publish('Test Message 2')
end