2019-10-15 05:06:09 -04:00
# frozen_string_literal: true
2017-03-13 10:04:46 -04:00
require 'rake_helper'
2021-06-08 11:10:00 -04:00
RSpec . describe 'gitlab:gitaly namespace rake task' , :silence_stdout do
2017-03-13 10:04:46 -04:00
before :all do
Rake . application . rake_require 'tasks/gitlab/gitaly'
end
2021-12-16 13:14:09 -05:00
let ( :repo ) { 'https://gitlab.com/gitlab-org/gitaly.git' }
let ( :clone_path ) { Rails . root . join ( 'tmp/tests/gitaly' ) . to_s }
let ( :storage_path ) { Rails . root . join ( 'tmp/tests/repositories' ) . to_s }
let ( :version ) { File . read ( Rails . root . join ( Gitlab :: GitalyClient :: SERVER_VERSION_FILE ) ) . chomp }
2017-03-13 10:04:46 -04:00
2021-12-16 13:14:09 -05:00
describe 'clone' do
subject { run_rake_task ( 'gitlab:gitaly:clone' , clone_path , storage_path ) }
2018-08-09 01:08:09 -04:00
2017-03-13 10:04:46 -04:00
context 'no dir given' do
it 'aborts and display a help message' do
# avoid writing task output to spec progress
allow ( $stderr ) . to receive :write
2021-12-16 13:14:09 -05:00
expect { run_rake_task ( 'gitlab:gitaly:clone' ) } . to raise_error / Please specify the directory where you want to install gitaly and the path for the default storage /
2018-08-09 01:08:09 -04:00
end
end
context 'no storage path given' do
it 'aborts and display a help message' do
allow ( $stderr ) . to receive :write
2021-12-16 13:14:09 -05:00
expect { run_rake_task ( 'gitlab:gitaly:clone' , clone_path ) } . to raise_error / Please specify the directory where you want to install gitaly and the path for the default storage /
2017-03-13 10:04:46 -04:00
end
end
context 'when an underlying Git command fail' do
it 'aborts and display a help message' do
2017-08-08 11:48:33 -04:00
expect ( main_object )
2017-06-21 09:48:12 -04:00
. to receive ( :checkout_or_clone_version ) . and_raise 'Git error'
2017-03-13 10:04:46 -04:00
2018-08-09 01:08:09 -04:00
expect { subject } . to raise_error 'Git error'
2017-03-13 10:04:46 -04:00
end
end
describe 'checkout or clone' do
2017-04-10 19:15:48 -04:00
it 'calls checkout_or_clone_version with the right arguments' do
2017-08-08 11:48:33 -04:00
expect ( main_object )
2020-05-14 11:08:14 -04:00
. to receive ( :checkout_or_clone_version ) . with ( version : version , repo : repo , target_dir : clone_path , clone_opts : %w[ --depth 1 ] )
2017-03-13 10:04:46 -04:00
2018-08-09 01:08:09 -04:00
subject
2017-03-13 10:04:46 -04:00
end
end
2021-12-16 13:14:09 -05:00
end
describe 'install' do
subject { run_rake_task ( 'gitlab:gitaly:install' , clone_path , storage_path ) }
2017-03-13 10:04:46 -04:00
describe 'gmake/make' do
before do
2017-10-10 11:25:05 -04:00
stub_env ( 'CI' , false )
2017-03-13 10:04:46 -04:00
FileUtils . mkdir_p ( clone_path )
expect ( Dir ) . to receive ( :chdir ) . with ( clone_path ) . and_call_original
2019-09-03 21:57:25 -04:00
stub_rails_env ( 'development' )
2017-03-13 10:04:46 -04:00
end
context 'gmake is available' do
it 'calls gmake in the gitaly directory' do
2021-10-25 11:12:11 -04:00
expect ( Gitlab :: Popen ) . to receive ( :popen )
. with ( %w[ which gmake ] )
. and_return ( [ '/usr/bin/gmake' , 0 ] )
expect ( Gitlab :: Popen ) . to receive ( :popen )
2022-07-29 14:08:58 -04:00
. with ( %w[ gmake clean-build all git ] , nil , { " BUNDLE_GEMFILE " = > nil , " RUBYOPT " = > nil } )
2021-10-25 11:12:11 -04:00
. and_return ( [ 'ok' , 0 ] )
2017-03-13 10:04:46 -04:00
2018-08-09 01:08:09 -04:00
subject
2017-03-13 10:04:46 -04:00
end
2021-10-25 11:12:11 -04:00
context 'when gmake fails' do
it 'aborts process' do
expect ( Gitlab :: Popen ) . to receive ( :popen )
. with ( %w[ which gmake ] )
. and_return ( [ '/usr/bin/gmake' , 0 ] )
expect ( Gitlab :: Popen ) . to receive ( :popen )
2022-07-29 14:08:58 -04:00
. with ( %w[ gmake clean-build all git ] , nil , { " BUNDLE_GEMFILE " = > nil , " RUBYOPT " = > nil } )
2021-10-25 11:12:11 -04:00
. and_return ( [ 'output' , 1 ] )
expect { subject } . to raise_error / Gitaly failed to compile: output /
end
end
2017-03-13 10:04:46 -04:00
end
context 'gmake is not available' do
before do
2021-10-25 11:12:11 -04:00
expect ( Gitlab :: Popen ) . to receive ( :popen )
. with ( %w[ which gmake ] )
. and_return ( [ '' , 42 ] )
2017-03-13 10:04:46 -04:00
end
it 'calls make in the gitaly directory' do
2021-10-25 11:12:11 -04:00
expect ( Gitlab :: Popen ) . to receive ( :popen )
2022-07-29 14:08:58 -04:00
. with ( %w[ make clean-build all git ] , nil , { " BUNDLE_GEMFILE " = > nil , " RUBYOPT " = > nil } )
2021-10-25 11:12:11 -04:00
. and_return ( [ 'output' , 0 ] )
2017-03-13 10:04:46 -04:00
2018-08-09 01:08:09 -04:00
subject
2017-03-13 10:04:46 -04:00
end
2017-08-10 12:24:44 -04:00
2017-11-21 12:45:36 -05:00
context 'when Rails.env is test' do
2022-07-29 14:08:58 -04:00
let ( :command ) { %w[ make clean-build all git ] }
2017-11-21 12:45:36 -05:00
2017-08-10 12:24:44 -04:00
before do
2019-09-03 21:57:25 -04:00
stub_rails_env ( 'test' )
2017-08-10 12:24:44 -04:00
end
2021-04-01 11:08:54 -04:00
it 'calls make in the gitaly directory with BUNDLE_DEPLOYMENT and GEM_HOME variables' do
2021-10-25 11:12:11 -04:00
expect ( Gitlab :: Popen ) . to receive ( :popen )
. with ( command , nil , { " BUNDLE_GEMFILE " = > nil , " RUBYOPT " = > nil , " BUNDLE_DEPLOYMENT " = > 'false' , " GEM_HOME " = > Bundler . bundle_path . to_s } )
. and_return ( [ '/usr/bin/gmake' , 0 ] )
2017-08-15 13:44:37 -04:00
2018-08-09 01:08:09 -04:00
subject
2017-08-10 12:24:44 -04:00
end
end
2017-03-13 10:04:46 -04:00
end
end
end
end