spec/app/config_spec.rb (118 lines of code) (raw):
#
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# or more contributor license agreements. Licensed under the Elastic License;
# you may not use this file except in compliance with the Elastic License.
#
# frozen_string_literal: true
require 'app/config'
describe App do
describe '.ent_search_es_config' do
let(:ent_search_config_path) { 'path' }
before(:each) do
allow(ENV).to receive(:[]).with('ENT_SEARCH_CONFIG_PATH').and_return(ent_search_config_path)
end
context 'when ENT_SEARCH_CONFIG_PATH is not set' do
let(:ent_search_config_path) { nil }
it 'returns nil' do
expect(described_class.ent_search_es_config).to be_nil
end
end
context 'when loading of config file fails' do
before(:each) do
allow(YAML).to receive(:load_file).with(ent_search_config_path).and_raise(StandardError)
end
it 'returns nil' do
expect(described_class.ent_search_es_config).to be_nil
end
end
context 'when loading of config file succeeds' do
let(:config_hash) do
{
'elasticsearch.host' => 'http://localhost:9200',
'elasticsearch.username' => 'elastic',
'elasticsearch.password' => 'changeme',
'elasticsearch.headers' => {
'x-pass-through' => true
}
}
end
let(:expected_es_config) do
{
:hosts => [
{
scheme: 'http',
user: 'elastic',
password: 'changeme',
host: 'localhost',
port: 9200
}
],
:headers => {
'x-pass-through' => true
}
}
end
before(:each) do
allow(YAML).to receive(:load_file).with(ent_search_config_path).and_return(config_hash)
end
context 'when config is an empty file' do
let(:config_hash) { false }
it 'returns nil' do
expect(described_class.ent_search_es_config).to be_nil
end
end
context 'when host is missing' do
let(:config_hash) { super().except('elasticsearch.host') }
it 'returns nil' do
expect(described_class.ent_search_es_config).to be_nil
end
end
context 'when username is missing' do
let(:config_hash) { super().except('elasticsearch.username') }
it 'returns nil' do
expect(described_class.ent_search_es_config).to be_nil
end
end
context 'when password is missing' do
let(:config_hash) { super().except('elasticsearch.password') }
it 'returns nil' do
expect(described_class.ent_search_es_config).to be_nil
end
end
context 'when host is an invalid uri' do
let(:config_hash) do
super().tap do |out|
out['elasticsearch.host'] = '%^^&'
end
end
it 'returns nil' do
expect(described_class.ent_search_es_config).to be_nil
end
end
context 'when host is not a HTTP or HTTPS URI' do
let(:config_hash) do
super().tap do |out|
out['elasticsearch.host'] = 'ftp://localhost:21'
end
end
it 'returns nil' do
expect(described_class.ent_search_es_config).to be_nil
end
end
context 'when YAML is nested' do
let(:config_hash) do
{
'elasticsearch' => {
'host' => 'http://localhost:9200',
'username' => 'elastic',
'password' => 'changeme',
'headers' => {
'x-pass-through' => true
}
}
}
end
it 'returns expected elasticsearch config' do
expect(described_class.ent_search_es_config).to eq(expected_es_config)
end
end
it 'returns expected elasticsearch config' do
expect(described_class.ent_search_es_config).to eq(expected_es_config)
end
end
end
end