spec/lib/gdk/version_manager_spec.rb (64 lines of code) (raw):
# frozen_string_literal: true
require_relative '../../../lib/gdk/version_manager'
RSpec.describe GDK::VersionManager do
let(:gitaly_version_file) { '/home/git/gdk/gitlab/GITALY_SERVER_VERSION' }
let(:gitlab_shell_version_file) { '/home/git/gdk/gitlab/GITLAB_SHELL_VERSION' }
let(:gitlab_workhorse_version_file) { '/home/git/gdk/gitlab/GITLAB_WORKHORSE_VERSION' }
before do
allow(GDK.config.gdk_root).to receive(:join).with('gitlab', 'GITALY_SERVER_VERSION').and_return(gitaly_version_file)
allow(GDK.config.gdk_root).to receive(:join).with('gitlab', 'GITLAB_SHELL_VERSION').and_return(gitlab_shell_version_file)
allow(GDK.config.gdk_root).to receive(:join).with('gitlab', 'GITLAB_WORKHORSE_VERSION').and_return(gitlab_workhorse_version_file)
end
describe '.fetch' do
context 'when version file exists' do
it 'returns the version for Gitaly' do
allow(File).to receive(:exist?).with(gitaly_version_file).and_return(true)
allow(File).to receive(:read).with(gitaly_version_file).and_return("75281001cbb0339ff4467b1a1ba8f9390af95a7b\n")
version = described_class.fetch(:gitaly)
expect(version).to eq('75281001cbb0339ff4467b1a1ba8f9390af95a7b')
end
it 'returns the version for GitLab Shell' do
allow(File).to receive(:exist?).with(gitlab_shell_version_file).and_return(true)
allow(File).to receive(:read).with(gitlab_shell_version_file).and_return("14.42.0\n")
version = described_class.fetch(:gitlab_shell)
expect(version).to eq('14.42.0')
end
it 'returns the version for GitLab Workhorse' do
allow(File).to receive(:exist?).with(gitlab_workhorse_version_file).and_return(true)
allow(File).to receive(:read).with(gitlab_workhorse_version_file).and_return("18.0.0-pre\n")
version = described_class.fetch(:workhorse)
expect(version).to eq('18.0.0-pre')
end
end
context 'when version file does not exist' do
it 'falls back to "main" for Gitaly' do
allow(File).to receive(:exist?).with(gitaly_version_file).and_return(false)
version = described_class.fetch(:gitaly)
expect(version).to eq('main')
end
it 'falls back to "main" for GitLab Shell' do
allow(File).to receive(:exist?).with(gitlab_shell_version_file).and_return(false)
version = described_class.fetch(:gitlab_shell)
expect(version).to eq('main')
end
it 'falls back to "main" for GitLab Workhorse' do
allow(File).to receive(:exist?).with(gitlab_workhorse_version_file).and_return(false)
version = described_class.fetch(:workhorse)
expect(version).to eq('main')
end
end
context 'when graphql_schema is fetched' do
it 'always returns "master"' do
expect(File).not_to receive(:exist?)
expect(File).not_to receive(:read)
version = described_class.fetch(:graphql_schema)
expect(version).to eq('master')
end
end
context 'when package is unknown' do
it 'falls back to "main"' do
version = described_class.fetch(:unknown_package)
expect(version).to eq('main')
end
end
end
end