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