spec/gitlab/qa/component/license_ops_spec.rb (99 lines of code) (raw):
# frozen_string_literal: true
module Gitlab
module QA
describe Component::LicenseOps do
subject(:license_ops) { described_class.new }
shared_context 'with license key' do
let(:license_key) { valid_license_key }
around do |example|
ClimateControl.modify(EE_LICENSE: license_key) { example.run }
end
end
let(:docker) { instance_double(Gitlab::QA::Docker::Engine) }
let(:gitlab) do
instance_double(
Gitlab::QA::Component::Gitlab,
address: "http://gitlab.example.com",
class: Struct.new(:name).new("Gitlab::QA::Component::Gitlab")
)
end
let(:valid_license_key) { 'valid-license-key' }
before do
allow(gitlab).to receive_messages(docker: docker, name: 'gitlab-container')
end
describe '#add_license' do
context 'when license is valid' do
include_context 'with license key'
before do
allow(docker).to receive(:exec).and_return('License applied successfully')
end
it 'successfully applies the license' do
expect { license_ops.add_license(gitlab) }.not_to raise_error
end
end
context 'when license application fails' do
include_context 'with license key'
before do
allow(docker).to receive(:exec).and_return('Failed to apply license')
end
it 'raises a LicenseError' do
expect { license_ops.add_license(gitlab) }
.to raise_error(described_class::LicenseError, /Failed to apply license/)
end
end
end
describe '#fetch_license_key' do
context 'when EE_LICENSE is not set' do
include_context 'with license key'
let(:license_key) { nil }
it 'raises a LicenseError' do
expect { license_ops.send(:fetch_license_key) }
.to raise_error(described_class::LicenseError, /EE_LICENSE environment variable is not set or is empty/)
end
end
context 'when EE_LICENSE is empty' do
include_context 'with license key'
let(:license_key) { '' }
it 'raises a LicenseError' do
expect { license_ops.send(:fetch_license_key) }
.to raise_error(described_class::LicenseError, /EE_LICENSE environment variable is not set or is empty/)
end
end
context 'when EE_LICENSE is set' do
include_context 'with license key'
it 'returns the license key' do
expect(license_ops.send(:fetch_license_key)).to eq(valid_license_key)
end
end
end
describe '#build_license_command' do
it 'builds the correct command string' do
script = <<~RUBY
key = ENV['EE_LICENSE']
license = License.new(data: key)
if license.save
puts "License applied successfully"
else
STDERR.puts "Failed to apply license"
end
RUBY
expected_command = "EE_LICENSE='test-key' gitlab-rails runner $'#{script.gsub("'", "\\\\'").gsub("\n", '\\n')}'"
expect(license_ops.send(:build_license_command, 'test-key')).to eq(expected_command)
end
end
describe '#verify_license_application' do
context 'when license is applied successfully' do
it 'does not raise an error' do
expect { license_ops.send(:verify_license_application, 'License applied successfully') }
.not_to raise_error
end
end
context 'when license application fails' do
it 'raises a LicenseError' do
expect { license_ops.send(:verify_license_application, 'Failed to apply license') }
.to raise_error(described_class::LicenseError, /Failed to apply license/)
end
end
end
end
end
end