spec/support/macros.rb (101 lines of code) (raw):
require 'openssl'
require 'toml-rb'
module GitlabSpec
module Macros
def stub_gitlab_rb(config)
config.each do |key, value|
value = Mash.from_hash(value) if value.is_a?(Hash)
allow(Gitlab).to receive(:[]).with(key.to_s).and_return(value)
end
end
def stub_default_should_notify?(value)
allow(File).to receive(:symlink?).and_return(value)
allow_any_instance_of(OmnibusHelper).to receive(:success?).and_return(value)
end
# @param [Boolean] value status whether it is listening or not
def stub_default_not_listening?(value)
allow_any_instance_of(OmnibusHelper).to receive(:not_listening?).and_return(false)
end
# @param [String] service internal name of the service (on-disk)
# @param [Boolean] value status command succeed?
def stub_service_success_status(service, value)
allow_any_instance_of(OmnibusHelper).to receive(:success?).with("/opt/gitlab/init/#{service} status").and_return(value)
end
# @param [String] service internal name of the service (on-disk)
# @param [Boolean] value status command failed?
def stub_service_failure_status(service, value)
allow_any_instance_of(OmnibusHelper).to receive(:failure?).with("/opt/gitlab/init/#{service} status").and_return(value)
end
def stub_should_notify?(service, value)
allow(File).to receive(:symlink?).with("/opt/gitlab/service/#{service}").and_return(value)
stub_service_success_status(service, value)
end
# @param [String] service internal name of the service (on-disk)
# @param [Boolean] value status whether it is listening or not
def stub_not_listening?(service, value)
allow_any_instance_of(OmnibusHelper).to receive(:not_listening?).with(service).and_return(value)
end
def stub_expected_owner?
allow_any_instance_of(OmnibusHelper).to receive(:expected_owner?).and_return(true)
end
def stub_env_var(var, value)
allow(ENV).to receive(:[]).with(var).and_return(value)
end
def stub_branch(branch)
stub_env_var('CI_MERGE_REQUEST_SOURCE_BRANCH_NAME', '')
stub_env_var('CI_COMMIT_BRANCH', branch)
allow(Gitlab::Util).to receive(:shellout_stdout).with('git rev-parse --abbrev-ref HEAD').and_return(branch)
stub_env_var('CI_COMMIT_TAG', '')
allow(Gitlab::Util).to receive(:shellout_stdout).with('git describe --tags --exact-match').and_raise(Gitlab::Util::ShellOutExecutionError.new("git describe --tags --exact-match", 128, "", "fatal: no tag exactly matches '#{branch}'"))
end
def stub_mr_branch(branch)
stub_env_var('CI_MERGE_REQUEST_SOURCE_BRANCH_NAME', branch)
stub_env_var('CI_COMMIT_BRANCH', '')
allow(Gitlab::Util).to receive(:shellout_stdout).with('git rev-parse --abbrev-ref HEAD').and_return('HEAD')
stub_env_var('CI_COMMIT_TAG', '')
allow(Gitlab::Util).to receive(:shellout_stdout).with('git describe --tags --exact-match').and_raise(Gitlab::Util::ShellOutExecutionError.new("git describe --tags --exact-match", 128, "", "fatal: no tag exactly matches '#{branch}'"))
end
def stub_tag(tag)
stub_env_var('CI_COMMIT_TAG', tag)
allow(Gitlab::Util).to receive(:shellout_stdout).with('git describe --tags --exact-match').and_return(tag)
stub_env_var('CI_COMMIT_BRANCH', '')
allow(Gitlab::Util).to receive(:shellout_stdout).with('git rev-parse --abbrev-ref HEAD').and_return('HEAD')
stub_env_var('CI_MERGE_REQUEST_SOURCE_BRANCH_NAME', '')
end
def stub_is_package_version(package, value = nil)
allow(File).to receive(:read).with('VERSION').and_return(value ? "1.2.3-#{package}" : '1.2.3')
end
def stub_default_package_version
allow(File).to receive(:read).and_call_original
allow(ENV).to receive(:[]).and_call_original
stub_is_package_version('ce')
end
def stub_is_package_env(package, value)
stub_env_var(package, value.nil? ? '' : value.to_s)
end
def stub_is_package(package, value)
stub_is_package_version(package, value)
stub_is_package_env(package, value)
end
def stub_is_ee_version(value)
stub_is_package_version('ee', value)
end
def stub_is_ee_env(value)
stub_is_package_env('ee', value)
end
def stub_is_ee(value)
stub_is_package('ee', value)
# Auto-deploys can not be non-EE. So, stubbing it to false for CE builds.
# However, since not all EE builds need to be auto-deploys, stubbing it
# to true needs to be done in a case-by-case manner.
stub_is_auto_deploy(value) unless value
end
def stub_is_auto_deploy(value)
allow(Build::Check).to receive(:is_auto_deploy?).and_return(value)
end
def converge_config(*recipes, is_ee: false)
Gitlab[:node] = nil
Services.add_services('gitlab-ee', Services::EEServices.list) if is_ee
config_recipe = is_ee ? 'gitlab-ee::config' : 'gitlab::config'
ChefSpec::SoloRunner.converge(config_recipe, *recipes)
end
# Return the full path for the spec fixtures folder
# @return [String] full path
def fixture_path
File.join(__dir__, '../chef/fixtures')
end
def get_rendered_toml(chef_run, path)
template = chef_run.template(path)
content = ChefSpec::Renderer.new(chef_run, template).content
TomlRB.parse(content, symbolize_keys: true)
end
end
end