spec/chef/cookbooks/package/libraries/config/services_spec.rb (262 lines of code) (raw):

require 'chef_helper' RSpec.describe Services do before { allow(Gitlab).to receive(:[]).and_call_original } describe 'when using the gitlab cookbook' do let(:chef_run) { ChefSpec::SoloRunner.converge('gitlab::default') } it 'returns the gitlab service list' do chef_run expect(Services.service_list).to have_key('puma') expect(Services.service_list).not_to have_key('sentinel') end end describe 'when using the gitlab-ee cookbook' do let(:chef_run) { ChefSpec::SoloRunner.converge('gitlab-ee::default') } it 'returns the gitlab service list including gitlab-ee items' do chef_run expect(Services.service_list).to have_key('puma') expect(Services.service_list).to have_key('sentinel') end end it 'uses the default template when populating service information' do expect(Services::Config.send(:service, ['test_service'])).to eq({ groups: [] }) end describe 'service' do let(:runner) { ChefSpec::SoloRunner.new } let(:chef_run) { runner.converge('gitlab::config') } let(:node) { runner.node } before { Services.add_services('gitlab', Services::BaseServices.list) } context 'when using user values that conflict with service settings' do let!(:runner) { ChefSpec::SoloRunner.new { |node| Gitlab[:node] = node } } it 'node service settings are overridden by gitlab.rb changes' do stub_gitlab_rb(redis: { enable: true }, mattermost: { enable: false }) Services.disable('redis') Services.enable('mattermost') runner.converge('gitlab::config') expect(node['redis']['enable']).to be true expect(node['mattermost']['enable']).to be false end end context 'when enable/disable is passed a single service' do it 'sets the correct values' do chef_run Services.disable('redis') expect(node['redis']['enable']).to be false Services.enable('mattermost') expect(node['mattermost']['enable']).to be true end it 'supports exceptions' do chef_run Services.disable('mattermost') Services.enable('mattermost', except: 'mattermost') expect(node['mattermost']['enable']).to be false Services.enable('redis') Services.disable('redis', except: 'redis') expect(node['redis']['enable']).to be true end end context 'when enable/disable is passed multiple services' do before { chef_run } it 'sets the correct values' do Services.disable('redis', 'postgresql', 'gitaly') expect(node['redis']['enable']).to be false expect(node['postgresql']['enable']).to be false expect(node['gitaly']['enable']).to be false Services.enable('mattermost', 'registry', 'mailroom') expect(node['mattermost']['enable']).to be true expect(node['registry']['enable']).to be true expect(node['gitlab']['mailroom']['enable']).to be true end it 'supports single exceptions' do Services.disable('registry') Services.enable('mattermost', 'registry', 'mailroom', except: 'registry') expect(node['mattermost']['enable']).to be true expect(node['registry']['enable']).to be false expect(node['gitlab']['mailroom']['enable']).to be true Services.enable('postgresql') Services.disable('redis', 'postgresql', 'gitaly', except: 'postgresql') expect(node['redis']['enable']).to be false expect(node['postgresql']['enable']).to be true expect(node['gitaly']['enable']).to be false end it 'supports multiple exceptions' do Services.disable('registry', 'mailroom') Services.enable('mattermost', 'registry', 'mailroom', except: %w(registry mailroom)) expect(node['mattermost']['enable']).to be true expect(node['registry']['enable']).to be false expect(node['gitlab']['mailroom']['enable']).to be false Services.enable('postgresql', 'gitaly') Services.disable('redis', 'postgresql', 'gitaly', except: %w(postgresql gitaly)) expect(node['redis']['enable']).to be false expect(node['postgresql']['enable']).to be true expect(node['gitaly']['enable']).to be true end it 'ignores disable on system services' do Services.disable('node_exporter') expect(node['monitoring']['node_exporter']['enable']).to be true end it 'allows forced disable on system services' do Services.disable('node_exporter', include_system: true) expect(node['monitoring']['node_exporter']['enable']).to be false end end context 'when passed single exception' do before { chef_run } it 'enables all others' do Services.disable('registry') Services.enable(Services::ALL_SERVICES, except: 'registry') expect(node['redis']['enable']).to be true expect(node['postgresql']['enable']).to be true expect(node['mattermost']['enable']).to be true expect(node['registry']['enable']).to be false end it 'disables all others' do Services.enable('redis') Services.disable(Services::ALL_SERVICES, except: 'redis') expect(node['redis']['enable']).to be true expect(node['postgresql']['enable']).to be false expect(node['mattermost']['enable']).to be false expect(node['registry']['enable']).to be false end end context 'when passed multiple exceptions' do before { chef_run } it 'enables all others' do Services.disable('registry', 'mailroom') Services.enable(Services::ALL_SERVICES, except: %w(registry mailroom)) expect(node['redis']['enable']).to be true expect(node['postgresql']['enable']).to be true expect(node['gitaly']['enable']).to be true expect(node['mattermost']['enable']).to be true expect(node['gitlab']['mailroom']['enable']).to be false expect(node['registry']['enable']).to be false end it 'disables all others' do Services.enable('postgresql', 'gitaly') Services.disable(Services::ALL_SERVICES, except: %w(postgresql gitaly)) expect(node['redis']['enable']).to be false expect(node['postgresql']['enable']).to be true expect(node['gitaly']['enable']).to be true expect(node['mattermost']['enable']).to be false expect(node['gitlab']['mailroom']['enable']).to be false expect(node['registry']['enable']).to be false end end end describe 'group' do let(:runner) { ChefSpec::SoloRunner.new } let(:chef_run) { runner.converge('gitlab::config') } let(:node) { runner.node } before { Services.add_services('gitlab', Services::BaseServices.list) } context 'when using user values that conflict with service settings' do cached!(:runner) { ChefSpec::SoloRunner.new { |node| Gitlab[:node] = node } } it 'node service settings are overridden by gitlab.rb changes' do stub_gitlab_rb(redis: { enable: true }, postgresql: { enable: false }) Services.disable_group('redis') Services.enable_group('postgres') runner.converge('gitlab::config') expect(node['redis']['enable']).to be true expect(node['mattermost']['enable']).to be false end end context 'when enable_group/disable_group is passed a single group' do before { chef_run } it 'sets the correct values' do Services.disable_group('redis') expect(node['redis']['enable']).to be false expect(node['monitoring']['redis_exporter']['enable']).to be false Services.enable_group('rails') expect(node['gitlab']['puma']['enable']).to be true expect(node['monitoring']['gitlab_exporter']['enable']).to be true end it 'supports exceptions' do Services.disable_group('monitoring') Services.enable_group('rails', except: 'monitoring') expect(node['monitoring']['gitlab_exporter']['enable']).to be false expect(node['gitlab']['puma']['enable']).to be true Services.enable_group('monitoring') Services.disable_group('redis', except: 'monitoring') expect(node['redis']['enable']).to be false expect(node['monitoring']['redis_exporter']['enable']).to be true end end context 'when enable/disable is passed multiple groups' do before { chef_run } it 'sets the correct values' do Services.disable_group('redis', 'postgres') expect(node['redis']['enable']).to be false expect(node['postgresql']['enable']).to be false Services.enable_group('rails', 'monitoring') expect(node['monitoring']['redis_exporter']['enable']).to be true expect(node['gitlab']['puma']['enable']).to be true end it 'supports single exceptions' do Services.disable_group('monitoring') Services.enable_group('redis', 'rails', except: 'monitoring') expect(node['redis']['enable']).to be true expect(node['gitlab']['puma']['enable']).to be true expect(node['monitoring']['gitlab_exporter']['enable']).to be false expect(node['monitoring']['redis_exporter']['enable']).to be false Services.enable_group('postgres') Services.disable_group('redis', 'monitoring', except: 'postgres') expect(node['redis']['enable']).to be false expect(node['monitoring']['postgres_exporter']['enable']).to be true expect(node['monitoring']['prometheus']['enable']).to be false end it 'supports multiple exceptions' do Services.disable_group('redis', Services::SYSTEM_GROUP, include_system: true) Services.enable_group('rails', 'monitoring', except: ['redis', Services::SYSTEM_GROUP]) expect(node['monitoring']['redis_exporter']['enable']).to be false expect(node['monitoring']['node_exporter']['enable']).to be false expect(node['gitlab']['puma']['enable']).to be true Services.enable_group('sidekiq', 'monitoring') Services.disable_group('rails', 'postgres', except: %w(sidekiq monitoring)) expect(node['gitlab']['gitlab_workhorse']['enable']).to be false expect(node['gitlab']['sidekiq']['enable']).to be true expect(node['postgresql']['enable']).to be false expect(node['monitoring']['postgres_exporter']['enable']).to be true end it 'ignores disable on system services' do Services.enable_group(Services::SYSTEM_GROUP) Services.disable_group(Services::SYSTEM_GROUP) expect(node['logrotate']['enable']).to be true end it 'allows forced disable on system services' do Services.enable_group(Services::SYSTEM_GROUP) Services.disable_group(Services::SYSTEM_GROUP, include_system: true) expect(node['logrotate']['enable']).to be false end end context 'when passed single exception' do before { chef_run } it 'enables all others' do Services.disable_group('monitoring') Services.enable_group(Services::ALL_GROUPS, except: 'monitoring') expect(node['gitlab']['puma']['enable']).to be true expect(node['monitoring']['gitlab_exporter']['enable']).to be false end it 'disables all others' do Services.enable_group('monitoring') Services.disable_group(Services::ALL_GROUPS, except: 'monitoring') expect(node['monitoring']['postgres_exporter']['enable']).to be true expect(node['postgresql']['enable']).to be false end end context 'when passed multiple exceptions' do before { chef_run } it 'enables all others' do Services.disable_group('redis', 'rails') Services.enable_group(Services::ALL_GROUPS, except: %w(redis rails)) expect(node['gitlab']['puma']['enable']).to be false expect(node['monitoring']['node_exporter']['enable']).to be true expect(node['monitoring']['redis_exporter']['enable']).to be false end it 'disables all others' do Services.enable_group('redis', 'rails') Services.disable_group(Services::ALL_GROUPS, except: %w(redis rails)) expect(node['monitoring']['prometheus']['enable']).to be false expect(node['redis']['enable']).to be true expect(node['gitlab']['sidekiq']['enable']).to be true end end end end