124 lines
5.6 KiB
Ruby
124 lines
5.6 KiB
Ruby
# `chef_helper` is a superset of `spec_helper` that configures `chefspec` for
|
|
# testing our cookbooks.
|
|
|
|
require 'spec_helper'
|
|
require 'chefspec'
|
|
require 'ohai'
|
|
|
|
# Load chef specific support libraries to provide common convenience methods for our tests
|
|
Dir["./spec/chef/support/**/*.rb"].each { |library| require library }
|
|
|
|
# Load our cookbook libraries so we can stub them in our tests. package, gitlab
|
|
# and gitlab-ee needs to be loaded first as others depend on them for proper
|
|
# functionality.
|
|
cookbooks = %w[package gitlab gitlab-ee].map { |cookbook| File.join(__dir__, "../files/gitlab-cookbooks/#{cookbook}") }
|
|
cookbooks = cookbooks.concat(Dir[File.join(__dir__, "../files/gitlab-cookbooks/*")].select { |d| File.directory?(d) }).uniq
|
|
|
|
cookbooks.each do |cookbook|
|
|
Dir["#{cookbook}/libraries/**/*.rb"].sort.each { |library| require library }
|
|
end
|
|
|
|
def deep_clone(obj)
|
|
Marshal.load(Marshal.dump(obj))
|
|
end
|
|
|
|
# Save the empty state of the Gitlab config singleton
|
|
initial_gitlab = deep_clone(Gitlab.save)
|
|
|
|
RSpec.configure do |config|
|
|
Ohai::Config[:log_level] = :error
|
|
|
|
ohai_data = Ohai::System.new.tap { |ohai| ohai.all_plugins(['platform']) }.data
|
|
platform, version = *ohai_data.values_at('platform', 'platform_version')
|
|
|
|
begin
|
|
Fauxhai.mock(platform: platform, version: version) { nil }
|
|
rescue Fauxhai::Exception::InvalidPlatform
|
|
puts "Platform #{platform} #{version} not supported. Falling back to ubuntu 16.04"
|
|
platform = 'ubuntu'
|
|
version = '16.04'
|
|
end
|
|
|
|
config.platform = platform
|
|
config.version = version
|
|
|
|
config.cookbook_path = ['files/gitlab-cookbooks/', 'spec/chef/fixtures/cookbooks']
|
|
config.log_level = :error
|
|
|
|
config.define_derived_metadata(file_path: Regexp.new('/spec/chef/')) do |metadata|
|
|
metadata[:type] = :chef
|
|
end
|
|
|
|
config.before(:each, type: :chef) do
|
|
ssh_keygen_module = 'gitlab-7.2.0-ssh-keygen'
|
|
authorized_keys_module = 'gitlab-10.5.0-ssh-authorized-keys'
|
|
gitlab_shell_module = 'gitlab-13.5.0-gitlab-shell'
|
|
gitlab_unified_module = 'gitlab'
|
|
|
|
stub_command('id -Z').and_return(false)
|
|
stub_command("grep 'CS:123456:respawn:/opt/gitlab/embedded/bin/runsvdir-start' /etc/inittab").and_return('')
|
|
stub_command(%r{\(test -f /var/opt/gitlab/gitlab-rails/upgrade-status/db-migrate-\h+-\) && \(cat /var/opt/gitlab/gitlab-rails/upgrade-status/db-migrate-\h+- | grep -Fx 0\)}).and_return(false)
|
|
stub_command("getenforce | grep Disabled").and_return(true)
|
|
stub_command("semodule -l | grep '^#{ssh_keygen_module}([[:space:]]|$)'").and_return(true)
|
|
stub_command("semodule -l | grep '^#{authorized_keys_module}([[:space:]]|$)'").and_return(true)
|
|
stub_command("semodule -l | grep '^#{gitlab_shell_module}([[:space:]]|$)'").and_return(true)
|
|
stub_command("semodule -l | grep -E '^#{gitlab_unified_module}([[:space:]]|$)'").and_return(true)
|
|
stub_command(%r{set \-x \&\& \[ \-d "[^"]\" \]}).and_return(false)
|
|
stub_command(%r{set \-x \&\& \[ "\$\(stat \-\-printf='[^']*' \$\(readlink -f /[^\)]*\)\) }).and_return(false)
|
|
stub_command('/opt/gitlab/embedded/bin/psql --version').and_return("fake_version")
|
|
allow(VersionHelper).to receive(:version).and_call_original
|
|
allow(VersionHelper).to receive(:version).with('/opt/gitlab/embedded/bin/psql --version').and_return('fake_psql_version')
|
|
allow(VersionHelper).to receive(:version).with('cat /opt/gitlab/embedded/service/mattermost/VERSION').and_return('foobar')
|
|
allow(VersionHelper).to receive(:version).with(/-[-]?version/).and_return('foobar')
|
|
allow_any_instance_of(NewRedisHelper::Server).to receive(:installed_version).and_return('3.2.12')
|
|
allow_any_instance_of(NewRedisHelper::Server).to receive(:running_version).and_return('3.2.12')
|
|
allow_any_instance_of(ConsulHelper).to receive(:installed_version).and_return('1.9.6')
|
|
allow_any_instance_of(ConsulHelper).to receive(:running_version).and_return('1.9.6')
|
|
stub_command('/sbin/init --version | grep upstart')
|
|
stub_command('systemctl | grep "\-\.mount"')
|
|
# ChefSpec::SoloRunner doesn't support Chef.event_handler, so stub it
|
|
allow(Chef).to receive(:event_handler)
|
|
|
|
# Stub access to /etc/gitlab/initial_root_password
|
|
allow(File).to receive(:open).and_call_original
|
|
allow(File).to receive(:open).with('/etc/gitlab/initial_root_password', 'w', 0600).and_yield(double(:file, write: true)).once
|
|
|
|
# Prevent chef converge from reloading any of our previously loaded libraries
|
|
allow(Kernel).to receive(:load).and_call_original
|
|
|
|
cookbooks.each do |cookbook_path|
|
|
cookbook = File.basename(cookbook_path)
|
|
allow(Kernel).to receive(:load).with(%r{#{cookbook}/libraries}).and_return(true)
|
|
end
|
|
|
|
# Default attributes are frozen; as that's sometimes a class we really want
|
|
# to mock, just intercept the .freeze call so mocking/unmocking still works
|
|
[PgHelper, GeoPgHelper, PgStatusHelper, GitlabGeoHelper, OmnibusHelper].each do |helper_class|
|
|
allow_any_instance_of(helper_class).to receive(:freeze)
|
|
end
|
|
|
|
allow_any_instance_of(PgHelper).to receive(:database_version).and_return(PGVersion.new('9.2'))
|
|
|
|
stub_expected_owner?
|
|
|
|
# Reset the Gitlab config singelton
|
|
#
|
|
# Gitlab.reset (from mixlib-config) should be enough, but we end up
|
|
# undefining properties.
|
|
initial_gitlab.each do |k, v|
|
|
Gitlab[k] = deep_clone(v)
|
|
end
|
|
|
|
# BUG: https://gitlab.com/gitlab-org/omnibus-gitlab/issues/4780
|
|
Gitlab['geo_postgresql']['dir'] = '/var/opt/gitlab/geo-postgresql'
|
|
Gitlab['geo_postgresql']['wal_keep_segments'] = 10
|
|
Gitlab['geo_postgresql']['wal_keep_size'] = 160
|
|
|
|
# Clear services list before each test
|
|
Services.reset_list!
|
|
|
|
# Clear GitlabCluster config before each test
|
|
GitlabCluster.config.reload!
|
|
end
|
|
end
|