spec/chef/cookbooks/package/libraries/services_helper_spec.rb (185 lines of code) (raw):
require 'chef_helper'
RSpec.describe Services do
let(:chef_run) { ChefSpec::SoloRunner.new }
subject(:services) { described_class }
describe '.enable_group' do
before do
chef_run.converge('gitlab::default')
end
it 'enables services in provide groups list' do
expect do
services.enable_group('pages_role')
end.to change { services.enabled?('gitlab_pages') }.from(false).to(true)
end
it 'skips services that dont `exist?`' do
expect do
services.enable_group('monitoring')
end.not_to change { services.enabled?('pgbouncer_exporter') }
end
end
describe '.disable_group' do
before do
chef_run.converge('gitlab::default')
end
it 'disables services in the provide groups list when setting to false' do
expect do
services.disable_group('redis')
end.to change { services.enabled?('redis') }.from(true).to(false)
end
it 'it allows disabling services in system group when setting to false and include_system: true' do
expect do
services.disable_group('system', include_system: true)
end.to change { services.enabled?('logrotate') }.from(true).to(false)
end
end
describe '.enable' do
before do
chef_run.converge('gitlab::default')
end
it 'enables provide service' do
expect do
services.enable('gitlab_pages')
end.to change { services.enabled?('gitlab_pages') }.from(false).to(true)
end
it 'skips services that dont `exist?`' do
expect do
services.enable('pgbouncer_exporter')
end.not_to change { services.enabled?('pgbouncer_exporter') }
end
end
describe '.disable' do
before do
chef_run.converge('gitlab::default')
end
it 'disables provide service' do
expect do
services.disable('puma')
end.to change { services.enabled?('puma') }.from(true).to(false)
end
it 'allows disabling service in system group when include_system: true' do
expect do
services.disable('logrotate', include_system: true)
end.to change { services.enabled?('logrotate') }.from(true).to(false)
end
end
describe '.set_status' do
before do
chef_run.converge('gitlab::default')
end
it 'enables provide service when setting to true' do
expect do
services.set_status('gitlab_pages', true)
end.to change { services.enabled?('gitlab_pages') }.from(false).to(true)
end
it 'disables provide service when setting to false' do
expect do
services.set_status('puma', false)
end.to change { services.enabled?('puma') }.from(true).to(false)
end
it 'allows disabling service in system group when setting to false and include_system: true' do
expect do
services.set_status('logrotate', false, include_system: true)
end.to change { services.enabled?('logrotate') }.from(true).to(false)
end
end
describe '.set_group_status' do
before do
chef_run.converge('gitlab::default')
end
it 'enables services in provide groups list when setting to true' do
expect do
services.set_group_status('pages_role', true)
end.to change { services.enabled?('gitlab_pages') }.from(false).to(true)
end
it 'disables services in the provide groups list when setting to false' do
expect do
services.set_group_status('redis', false)
end.to change { services.enabled?('redis') }.from(true).to(false)
end
it 'it allows disabling services in system group when setting to false and include_system: true' do
expect do
services.set_group_status('system', false, include_system: true)
end.to change { services.enabled?('logrotate') }.from(true).to(false)
end
end
describe '.system_services' do
it 'returns a list of services that are in the SYSTEM_GROUP' do
service_list = {
'redis' => { groups: %w[redis] },
'logrotate' => { groups: %w[system] }
}
services.add_services('test', service_list)
expect(services.system_services).to include('logrotate')
end
end
describe '.find_by_group' do
before do
service_list = {
'redis' => { groups: %w[redis] },
'redis_exporter' => { groups: %w[redis monitoring] }
}
services.add_services('test', service_list)
end
it 'returns a list of services that matches provided groups' do
expect(services.find_by_group('monitoring')).to eq(['redis_exporter'])
end
it 'returns an empty list when no provide groups match' do
expect(services.find_by_group('non_existent')).to eq([])
end
end
describe '.service_list' do
it 'returns a list of loaded known services by existing cookbooks' do
chef_run.converge('gitlab::default')
expect(services.service_list).to include(Services::BaseServices.list)
end
end
describe '.add_services' do
it 'adds provided services and register associated cookbook' do
services.add_services('gitlab', Services::BaseServices.list)
expect(services.service_list).to include(Services::BaseServices.list)
expect(services.send(:cookbook_services).keys).to include('gitlab')
end
end
describe '.enabled?' do
before do
chef_run.converge('gitlab::default')
end
context 'when status is set via configuration file' do
it 'returns true if set as enabled' do
Gitlab['mailroom']['enable'] = true
expect(services.enabled?('mailroom')).to be_truthy
end
it 'returns false if set as disabled' do
Gitlab['puma']['enable'] = false
expect(services.enabled?('puma')).to be_falsey
end
end
context 'when status is not set via configuration file' do
it 'returns true when its enabled via cookbooks' do
expect(services.enabled?('puma')).to be_truthy
end
it 'returns false when disabled via cookbooks' do
expect(services.enabled?('mailroom')).to be_falsey
end
end
end
describe '.exist?' do
it 'returns false for non existing service' do
expect(services.exist?('inexistent_service')).to be_falsey
end
context 'with only CE services registered' do
it 'returns true for CE services and false for EE services' do
chef_run.converge('gitlab::default')
expect(services.exist?('logrotate')).to be_truthy
expect(services.exist?('pgbouncer_exporter')).to be_falsey
end
end
context 'with CE and EE services registered' do
it 'returns true for EE services registered via add_service' do
chef_run.converge('gitlab::default', 'gitlab-ee::default')
expect(services.exist?('logrotate')).to be_truthy
expect(services.exist?('pgbouncer_exporter')).to be_truthy
end
end
end
end