spec/mongo/retryable_spec.rb in mongo-2.11.0.rc0 vs spec/mongo/retryable_spec.rb in mongo-2.11.0

- old
+ new

@@ -173,86 +173,65 @@ end end context 'when an operation failure occurs' do - context 'when the cluster is not a mongos' do + context 'when the operation failure is not retryable' do + let(:error) do + Mongo::Error::OperationFailure.new('not authorized') + end + before do - expect(operation).to receive(:execute).and_raise(Mongo::Error::OperationFailure).ordered - expect(cluster).to receive(:sharded?).and_return(false) + expect(operation).to receive(:execute).and_raise(error).ordered end - it 'raises an exception' do + it 'raises the exception' do expect { read_operation }.to raise_error(Mongo::Error::OperationFailure) end end - context 'when the cluster is a mongos' do + context 'when the operation failure is retryable' do - context 'when the operation failure is not retryable' do + let(:error) do + Mongo::Error::OperationFailure.new('not master') + end - let(:error) do - Mongo::Error::OperationFailure.new('not authorized') - end + context 'when the retry succeeds' do before do + expect(retryable).to receive(:select_server).ordered expect(operation).to receive(:execute).and_raise(error).ordered - expect(cluster).to receive(:sharded?).and_return(true) + expect(client).to receive(:read_retry_interval).and_return(0.1).ordered + expect(retryable).to receive(:select_server).ordered + expect(operation).to receive(:execute).and_return(true).ordered end - it 'raises the exception' do - expect { - read_operation - }.to raise_error(Mongo::Error::OperationFailure) + it 'returns the result' do + expect(read_operation).to be true end end - context 'when the operation failure is retryable' do + context 'when the retry fails once and then succeeds' do + let(:max_read_retries) { 2 } - let(:error) do - Mongo::Error::OperationFailure.new('not master') - end + before do + expect(retryable).to receive(:select_server).ordered + expect(operation).to receive(:execute).and_raise(error).ordered - context 'when the retry succeeds' do + expect(client).to receive(:read_retry_interval).and_return(0.1).ordered + expect(retryable).to receive(:select_server).ordered + expect(operation).to receive(:execute).and_raise(error).ordered - before do - expect(retryable).to receive(:select_server).ordered - expect(operation).to receive(:execute).and_raise(error).ordered - expect(cluster).to receive(:sharded?).and_return(true) - expect(client).to receive(:read_retry_interval).and_return(0.1).ordered - expect(retryable).to receive(:select_server).ordered - expect(operation).to receive(:execute).and_return(true).ordered - end - - it 'returns the result' do - expect(read_operation).to be true - end + expect(client).to receive(:read_retry_interval).and_return(0.1).ordered + expect(retryable).to receive(:select_server).ordered + expect(operation).to receive(:execute).and_return(true).ordered end - context 'when the retry fails once and then succeeds' do - let(:max_read_retries) { 2 } - - before do - expect(retryable).to receive(:select_server).ordered - expect(operation).to receive(:execute).and_raise(error).ordered - - expect(cluster).to receive(:sharded?).and_return(true) - expect(client).to receive(:read_retry_interval).and_return(0.1).ordered - expect(retryable).to receive(:select_server).ordered - expect(operation).to receive(:execute).and_raise(error).ordered - - expect(cluster).to receive(:sharded?).and_return(true) - expect(client).to receive(:read_retry_interval).and_return(0.1).ordered - expect(retryable).to receive(:select_server).ordered - expect(operation).to receive(:execute).and_return(true).ordered - end - - it 'returns the result' do - expect(read_operation).to be true - end + it 'returns the result' do + expect(read_operation).to be true end end end end end