spec/utility/es_client_spec.rb (89 lines of code) (raw):
require 'elasticsearch'
require 'utility/es_client'
require 'utility/environment'
RSpec.describe Utility::EsClient do
let(:host) { 'http://notreallyaserver' }
let(:config) do
{
:service_type => 'example',
:log_level => 'INFO',
:connector_id => '1',
:elasticsearch => {
:api_key => 'key',
:hosts => host,
:disable_warnings => disable_warnings
}
}
end
let(:subject) { described_class.new(config[:elasticsearch]) }
before(:each) do
stub_request(:get, "#{host}:9200/")
.to_return(status: 403, body: '', headers: {})
stub_request(:get, "#{host}:9200/_cluster/health")
end
context 'when wrapped in Utility::Environment.set_execution_environment' do
around(:each) do |example|
Utility::Environment.set_execution_environment(config) do
example.run
end
end
context 'when disable_warnings=false' do
let(:disable_warnings) { false }
it 'receives warnings from elasticsearch client' do
expect {
subject.cluster.health
}.to output(/#{Elasticsearch::SECURITY_PRIVILEGES_VALIDATION_WARNING}/).to_stderr
end
end
context 'when disable_warnings=true' do
let(:disable_warnings) { true }
it 'receives no warnings from elasticsearch client' do
expect {
subject.cluster.health
}.to_not output.to_stderr
end
end
end
context 'when Elasticsearch::Client arguments are presented' do
let(:disable_warnings) { false }
before(:example) do
# remove api_key to force Elasticsearch::Client pickup TLS options
config[:elasticsearch].delete(:api_key)
end
context 'when transport_options is presented' do
let(:transport_options) { { ssl: { verify: false } } }
it 'configures Elasticsearch client with transport_options' do
config[:elasticsearch][:transport_options] = transport_options
expect(subject.transport.options[:transport_options][:ssl]).to eq(transport_options[:ssl])
end
end
context 'when ca_fingerprint is presented' do
let(:ca_fingerprint) { '64F2593F...' }
it 'configures Elasticsearch client with ca_fingerprint' do
config[:elasticsearch][:ca_fingerprint] = ca_fingerprint
# there is no other way to get ca_fingerprint variable
expect(subject.instance_variable_get(:@transport).instance_variable_get(:@ca_fingerprint)).to eq(ca_fingerprint)
end
end
end
describe '#connection_configs' do
let(:disable_warnings) { false }
context 'when headers are present' do
let(:headers) do
{
:something => 'something'
}
end
it 'configures Elasticsearch client with headers' do
config[:elasticsearch][:headers] = headers
result = subject.connection_configs(config[:elasticsearch])
expect(result[:headers]).to eq(headers)
end
end
context 'when headers are not present' do
it 'configures Elasticsearch client with headers' do
config[:elasticsearch][:headers] = nil
result = subject.connection_configs(config[:elasticsearch])
expect(result).to_not have_key(:headers)
end
end
end
end