omnibus-gitlab/spec/chef/cookbooks/consul/libraries/consul_helper_spec.rb

163 lines
4.3 KiB
Ruby

require 'chef_helper'
RSpec.describe ConsulHelper do
let(:chef_run) { converge_config }
subject { described_class.new(chef_run.node) }
describe '#running_version' do
let(:consul_api_output) { instance_double('response', code: '200', body: '{"Config": { "Version": "1.8.10" }}') }
before do
# Un-doing the stub added in chef_helper
allow_any_instance_of(described_class).to receive(:running_version).and_call_original
allow(Gitlab).to receive(:[]).and_call_original
allow(subject).to receive(:get_api).and_yield(consul_api_output)
end
context 'when consul is not running' do
it 'returns nil' do
allow_any_instance_of(OmnibusHelper).to receive(:service_up?).with('consul').and_return(false)
expect(subject.running_version).to be_nil
end
end
context 'when consul is running' do
before do
allow_any_instance_of(OmnibusHelper).to receive(:service_up?).with('consul').and_return(true)
end
it 'parses version from consul api output properly' do
expect(subject.running_version).to eq('1.8.10')
end
end
end
describe '#installed_version' do
let(:consul_cli_output) do
<<~MSG
Consul v1.7.8
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
MSG
end
before do
# Un-doing the stub added in chef_helper
allow_any_instance_of(described_class).to receive(:installed_version).and_call_original
allow(Gitlab).to receive(:[]).and_call_original
allow(VersionHelper).to receive(:version).with(/consul version/).and_return(consul_cli_output)
end
context 'when consul is not running' do
it 'returns nil' do
allow_any_instance_of(OmnibusHelper).to receive(:service_up?).with('consul').and_return(false)
expect(subject.installed_version).to be_nil
end
end
context 'when consul is running' do
before do
allow_any_instance_of(OmnibusHelper).to receive(:service_up?).with('consul').and_return(true)
end
it 'parses consul output properly' do
expect(subject.installed_version).to eq('1.7.8')
end
end
end
describe '#api_port' do
before do
allow(Gitlab).to receive(:[]).and_call_original
end
it 'falls back to default ports' do
stub_gitlab_rb(
consul: {
enable: true
}
)
expect(subject.api_port('http')).to eq(8500)
expect(subject.api_port('https')).to eq(8501)
expect(subject.configuration).not_to match(%r{"http":8500})
expect(subject.configuration).not_to match(%r{"https":8501})
end
it 'uses the configured ports' do
stub_gitlab_rb(
consul: {
enable: true,
http_port: 18500,
https_port: 18501
}
)
expect(subject.api_port('http')).to eq(18500)
expect(subject.api_port('https')).to eq(18501)
expect(subject.configuration).to match(%r{"http":18500})
expect(subject.configuration).to match(%r{"https":18501})
end
it 'uses the ports from configuration override' do
stub_gitlab_rb(
consul: {
enable: true,
http_port: 18500,
https_port: 18501,
configuration: {
ports: {
http: 28500,
https: 28501,
}
}
}
)
expect(subject.api_port('http')).to eq(28500)
expect(subject.api_port('https')).to eq(28501)
expect(subject.configuration).to match(%r{"http":28500})
expect(subject.configuration).to match(%r{"https":28501})
end
end
describe '#api_url' do
before do
allow(Gitlab).to receive(:[]).and_call_original
end
it 'uses http by default' do
stub_gitlab_rb(
consul: {
enable: true
}
)
expect(subject.api_url).to eq('http://localhost:8500')
end
it 'uses https when tls is enabled' do
stub_gitlab_rb(
consul: {
enable: true,
use_tls: true
}
)
expect(subject.api_url).to eq('https://localhost:8501')
end
it 'uses https when http port is disabled' do
stub_gitlab_rb(
consul: {
enable: true,
http_port: -1
}
)
expect(subject.api_url).to eq('https://localhost:8501')
end
end
end