spec/lib/gitlab/build/check_spec.rb (282 lines of code) (raw):
require 'spec_helper'
require 'gitlab/build/check'
RSpec.describe Build::Check do
before do
stub_default_package_version
end
describe 'is_ee?' do
describe 'with environment variables' do
before do
stub_is_ee_version(false)
end
describe 'ee variable' do
it 'when ee=true' do
stub_is_ee_env(true)
expect(described_class.is_ee?).to be_truthy
end
it 'when ee=false' do
stub_is_ee(false)
expect(described_class.is_ee?).to be_falsy
end
it 'when env variable is not set' do
stub_env_var('ee', nil)
stub_is_ee_version(false)
stub_is_auto_deploy(false)
expect(described_class.is_ee?).to be_falsy
end
end
describe 'GITLAB_VERSION variable' do
it 'when GITLAB_VERSION ends with -ee' do
stub_env_var('ee', nil)
stub_env_var('GITLAB_VERSION', 'foo-ee')
expect(described_class.is_ee?).to be_truthy
end
it 'when GITLAB_VERSION does not end with -ee' do
stub_env_var('ee', nil)
stub_env_var('GITLAB_VERSION', 'foo')
stub_is_auto_deploy(false)
expect(described_class.is_ee?).to be_falsy
end
it 'ee variable wins over GITLAB_VERSION variable' do
stub_is_ee_env(true)
stub_env_var('GITLAB_VERSION', 'foo')
expect(described_class.is_ee?).to be_truthy
end
end
end
describe 'without environment variables' do
it 'checks the VERSION file' do
stub_is_ee_version(false)
stub_env_var('GITLAB_VERSION', 'foo-ee')
expect(described_class.is_ee?).to be_truthy
end
it 'GITLAB_VERSION variable wins over the file' do
stub_env_var('GITLAB_VERSION', 'foo-ee')
expect(described_class.is_ee?).to be_truthy
end
end
end
describe 'include_ee?' do
it 'returns true when is_ee? is true' do
allow(described_class).to receive(:is_ee?).and_return(true)
expect(described_class.include_ee?).to be_truthy
end
it 'returns false when we are building a ce package' do
allow(described_class).to receive(:is_ee?).and_return(false)
expect(described_class.include_ee?).to be_falsey
end
end
describe 'add tag methods' do
describe 'is_nightly?' do
it 'returns true if it is a nightly build' do
stub_env_var('NIGHTLY', 'true')
expect(described_class.is_nightly?).to be_truthy
end
it 'returns false if it is not a nightly build' do
expect(described_class.is_nightly?).to be_falsey
end
end
describe 'is_latest_tag?' do
it 'returns true if it is an rc release' do
# This will be the case if latest_tag is eg. 9.3.0+rc6.ce.0
# or 9.3.0+ce.0
allow(Build::Info::Git).to receive(:latest_tag).and_return('9.3.0+rc6.ce.0') # This line only is only an example, stubbing is not needed.
allow(described_class).to receive(:match_tag?).and_return(true)
expect(described_class.is_latest_tag?).to be_truthy
end
it 'returns true if it is not an rc release' do
allow(Build::Info::Git).to receive(:latest_tag).and_return('9.3.0+ce.0') # This line only is only an example, stubbing is not needed.
allow(described_class).to receive(:match_tag?).and_return(false)
expect(described_class.is_latest_tag?).to be_falsey
end
end
describe 'is_latest_stable_tag?' do
it 'returns true if it is a stable release' do
# This will be the case if latest_tag is eg. 9.3.0+ce.0
# It will not be the case if the tag is 9.3.0+rc6.ce.0
allow(Build::Info::Git).to receive(:latest_stable_tag).and_return('9.3.0+ce.0') # This line only is only an example, stubbing is not needed.
allow(described_class).to receive(:match_tag?).and_return(true)
expect(described_class.is_latest_stable_tag?).to be_truthy
end
it 'returns true if it is not a stable release' do
allow(Build::Info::Git).to receive(:latest_stable_tag).and_return('9.3.0+rc6.ce.0') # This line only is only an example, stubbing is not needed.
allow(described_class).to receive(:match_tag?).and_return(false)
expect(described_class.is_latest_stable_tag?).to be_falsey
end
end
end
describe '.is_patch_release?' do
it 'returns true for patch release' do
allow(Build::Info::Package).to receive(:semver_version).and_return("10.0.3")
expect(described_class.is_patch_release?).to be_truthy
end
it 'returns false for major/minor release' do
allow(Build::Info::Package).to receive(:semver_version).and_return("10.0.0")
expect(described_class.is_patch_release?).to be_falsey
end
end
describe 'is_rc_tag?' do
it 'returns true if it looks like an rc tag' do
# It will be the case if the tag is 9.3.0+rc6.ce.0
allow(Build::Info::Git).to receive(:tag_name).and_return('9.3.0+rc6.ce.0')
expect(described_class.is_rc_tag?).to be_truthy
end
it 'returns false if it does not look like an rc tag' do
# This not be the case if tag is eg. 9.3.0+ce.0
allow(Build::Info::Git).to receive(:tag_name).and_return('9.3.0+ce.0')
expect(described_class.is_rc_tag?).to be_falsey
end
end
describe 'is_auto_deploy?' do
it 'returns true if it looks like an auto-deploy tag' do
# This is the case if the tag is 11.10.12345+5159f2949cb.59c9fa631
allow(Build::Info::Git).to receive(:tag_name).and_return('11.10.12345+5159f2949cb.59c9fa631')
expect(described_class.is_auto_deploy?).to be_truthy
end
it 'returns false if it does not look like an auto-deploy tag' do
# This not be the case if ag is eg. 9.3.0+ce.0
allow(Gitlab::Util).to receive(:get_env).with('CI_COMMIT_REF_NAME').and_return('a-random-branch')
allow(Build::Info::Git).to receive(:tag_name).and_return('9.3.0+ce.0')
expect(described_class.is_auto_deploy?).to be_falsey
end
end
describe 'ci_commit_tag?' do
it 'checks for the CI_COMMIT_TAG' do
allow(Gitlab::Util).to receive(:get_env).with('CI_COMMIT_TAG').and_return('11.10.12345+5159f2949cb.59c9fa631')
expect(described_class.ci_commit_tag?).to be_truthy
end
end
describe 'on_stable_branch?' do
context 'when on a stable branch' do
before do
stub_branch('14-10-stable')
end
it 'returns true' do
expect(described_class.on_stable_branch?).to be_truthy
end
end
context 'when on a regular branch' do
before do
stub_branch('my-feature-branch')
end
it 'returns false' do
expect(described_class.on_stable_branch?).to be_falsey
end
end
context 'when using a a tag' do
before do
stub_tag('1.2.3')
end
it 'returns false' do
expect(described_class.on_stable_branch?).to be_falsey
end
end
end
describe 'on_regular_tag?' do
context 'when on a regular branch' do
before do
stub_branch('my-feature-branch')
allow(described_class).to receive(:system).with(/git describe --exact-match/).and_return(false)
end
it 'returns false' do
expect(described_class.on_regular_tag?).to be_falsey
end
end
context 'when on a stable branch' do
before do
stub_branch('15-6-stable')
allow(described_class).to receive(:system).with(/git describe --exact-match/).and_return(false)
end
it 'returns false' do
expect(described_class.on_regular_tag?).to be_falsey
end
end
context 'when on RC tag' do
before do
stub_tag('15.8.0+rc42.ce.0')
allow(described_class).to receive(:system).with(/git describe --exact-match/).and_return(true)
end
it 'returns true' do
expect(described_class.on_regular_tag?).to be_truthy
end
end
context 'when on stable tag' do
before do
stub_tag('15.8.0+ce.0')
allow(described_class).to receive(:system).with(/git describe --exact-match/).and_return(true)
end
it 'returns true' do
expect(described_class.on_regular_tag?).to be_truthy
end
end
context 'when on auto-deploy tag' do
before do
stub_tag('15.8.202301050320+b251a9da107.0e5d6807f3a')
allow(described_class).to receive(:system).with(/git describe --exact-match/).and_return(true)
end
it 'returns false' do
expect(described_class.on_regular_tag?).to be_falsey
end
end
end
describe 'on_regular_branch?' do
context 'when on a regular branch' do
before do
stub_branch('my-feature-branch')
end
it 'returns true' do
expect(described_class.on_regular_branch?).to be_truthy
end
end
context 'when on a feature branch MR pipeline' do
before do
stub_mr_branch('my-feature-branch')
end
it 'returns true' do
expect(described_class.on_regular_branch?).to be_truthy
end
end
context 'when on a stable branch' do
before do
stub_branch('15-6-stable')
end
it 'returns false' do
expect(described_class.on_regular_branch?).to be_falsey
end
end
context 'when on RC tag' do
before do
stub_tag('15.8.0+rc42.ce.0')
end
it 'returns true' do
expect(described_class.on_regular_branch?).to be_falsey
end
end
context 'when on stable tag' do
before do
stub_tag('15.8.0+ce.0')
end
it 'returns true' do
expect(described_class.on_regular_branch?).to be_falsey
end
end
context 'when on auto-deploy tag' do
before do
stub_tag('15.8.202301050320+b251a9da107.0e5d6807f3a')
end
it 'returns false' do
expect(described_class.on_regular_branch?).to be_falsey
end
end
end
describe 'boringcrypto_supported?' do
context 'when using a golang with boringcrypto support' do
before do
allow(described_class).to receive(:system).with(hash_including('GOEXPERIMENT'), 'go', 'version').and_return(true)
end
it 'returns true' do
expect(described_class.boringcrypto_supported?).to be_truthy
end
end
context 'when using a golang withou boringcrypto support' do
before do
allow(described_class).to receive(:system).with(hash_including('GOEXPERIMENT'), 'go', 'version').and_return(false)
end
it 'returns true' do
expect(described_class.boringcrypto_supported?).to be_falsey
end
end
end
end