spec/elasticsearch/transport/base_spec.rb in elasticsearch-transport-6.8.1 vs spec/elasticsearch/transport/base_spec.rb in elasticsearch-transport-6.8.2
- old
+ new
@@ -1,5 +1,9 @@
+# Licensed to Elasticsearch B.V under one or more agreements.
+# Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
+# See the LICENSE file in the project root for more information
+
# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
@@ -69,8 +73,188 @@
{ hosts: URI.parse('https://test:secret_password@fake_local_elasticsearch'),
logger: logger }
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