spec/elasticsearch/transport/base_spec.rb in elasticsearch-transport-7.3.0 vs spec/elasticsearch/transport/base_spec.rb in elasticsearch-transport-7.4.0

- old
+ new

@@ -63,6 +63,186 @@ end it_behaves_like 'a redacted string' end end + + context 'when reload_on_failure is true and and hosts are unreachable' do + + let(:client) do + Elasticsearch::Transport::Client.new(arguments) + end + + let(:arguments) do + { + hosts: ['http://unavailable:9200', 'http://unavailable:9201'], + reload_on_failure: true, + sniffer_timeout: 5 + } + end + + it 'raises an exception' do + expect { + client.info + }.to raise_exception(Faraday::ConnectionFailed) + end + end + + context 'when the client has `retry_on_failure` set to an integer' do + + let(:client) do + Elasticsearch::Transport::Client.new(arguments) + end + + let(:arguments) do + { + hosts: ['http://unavailable:9200', 'http://unavailable:9201'], + retry_on_failure: 2 + } + end + + context 'when `perform_request` is called without a `retry_on_failure` option value' do + + before do + expect(client.transport).to receive(:get_connection).exactly(3).times.and_call_original + end + + it 'uses the client `retry_on_failure` value' do + expect { + client.transport.perform_request('GET', '/info') + }.to raise_exception(Faraday::ConnectionFailed) + end + end + + context 'when `perform_request` is called with a `retry_on_failure` option value' do + + before do + expect(client.transport).to receive(:get_connection).exactly(6).times.and_call_original + end + + it 'uses the option `retry_on_failure` value' do + expect { + client.transport.perform_request('GET', '/info', {}, nil, nil, retry_on_failure: 5) + }.to raise_exception(Faraday::ConnectionFailed) + end + end + end + + context 'when the client has `retry_on_failure` set to true' do + + let(:client) do + Elasticsearch::Transport::Client.new(arguments) + end + + let(:arguments) do + { + hosts: ['http://unavailable:9200', 'http://unavailable:9201'], + retry_on_failure: true + } + end + + context 'when `perform_request` is called without a `retry_on_failure` option value' do + + before do + expect(client.transport).to receive(:get_connection).exactly(4).times.and_call_original + end + + it 'uses the default `MAX_RETRIES` value' do + expect { + client.transport.perform_request('GET', '/info') + }.to raise_exception(Faraday::ConnectionFailed) + end + end + + context 'when `perform_request` is called with a `retry_on_failure` option value' do + + before do + expect(client.transport).to receive(:get_connection).exactly(6).times.and_call_original + end + + it 'uses the option `retry_on_failure` value' do + expect { + client.transport.perform_request('GET', '/info', {}, nil, nil, retry_on_failure: 5) + }.to raise_exception(Faraday::ConnectionFailed) + end + end + end + + context 'when the client has `retry_on_failure` set to false' do + + let(:client) do + Elasticsearch::Transport::Client.new(arguments) + end + + let(:arguments) do + { + hosts: ['http://unavailable:9200', 'http://unavailable:9201'], + retry_on_failure: false + } + end + + context 'when `perform_request` is called without a `retry_on_failure` option value' do + + before do + expect(client.transport).to receive(:get_connection).once.and_call_original + end + + it 'does not retry' do + expect { + client.transport.perform_request('GET', '/info') + }.to raise_exception(Faraday::ConnectionFailed) + end + end + + context 'when `perform_request` is called with a `retry_on_failure` option value' do + + before do + expect(client.transport).to receive(:get_connection).exactly(6).times.and_call_original + end + + it 'uses the option `retry_on_failure` value' do + expect { + client.transport.perform_request('GET', '/info', {}, nil, nil, retry_on_failure: 5) + }.to raise_exception(Faraday::ConnectionFailed) + end + end + end + + context 'when the client has no `retry_on_failure` set' do + + let(:client) do + Elasticsearch::Transport::Client.new(arguments) + end + + let(:arguments) do + { + hosts: ['http://unavailable:9200', 'http://unavailable:9201'], + } + end + + context 'when `perform_request` is called without a `retry_on_failure` option value' do + + before do + expect(client.transport).to receive(:get_connection).exactly(1).times.and_call_original + end + + it 'does not retry' do + expect { + client.transport.perform_request('GET', '/info') + }.to raise_exception(Faraday::ConnectionFailed) + end + end + + context 'when `perform_request` is called with a `retry_on_failure` option value' do + + before do + expect(client.transport).to receive(:get_connection).exactly(6).times.and_call_original + end + + it 'uses the option `retry_on_failure` value' do + expect { + client.transport.perform_request('GET', '/info', {}, nil, nil, retry_on_failure: 5) + }.to raise_exception(Faraday::ConnectionFailed) + end + end + end end