2017-08-17 22:00:37 +05:30
require 'rake_helper'
describe 'gitlab:gitaly namespace rake task' do
before :all do
Rake . application . rake_require 'tasks/gitlab/gitaly'
end
describe 'install' do
let ( :repo ) { 'https://gitlab.com/gitlab-org/gitaly.git' }
let ( :clone_path ) { Rails . root . join ( 'tmp/tests/gitaly' ) . to_s }
2018-11-20 20:47:30 +05:30
let ( :storage_path ) { Rails . root . join ( 'tmp/tests/repositories' ) . to_s }
2017-08-17 22:00:37 +05:30
let ( :version ) { File . read ( Rails . root . join ( Gitlab :: GitalyClient :: SERVER_VERSION_FILE ) ) . chomp }
2018-11-20 20:47:30 +05:30
subject { run_rake_task ( 'gitlab:gitaly:install' , clone_path , storage_path ) }
2017-08-17 22:00:37 +05:30
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
2018-11-20 20:47:30 +05:30
expect { run_rake_task ( 'gitlab:gitaly:install' ) } . to raise_error / Please specify the directory where you want to install gitaly and the path for the default storage /
end
end
context 'no storage path given' do
it 'aborts and display a help message' do
allow ( $stderr ) . to receive :write
expect { run_rake_task ( 'gitlab:gitaly:install' , clone_path ) } . to raise_error / Please specify the directory where you want to install gitaly and the path for the default storage /
2017-08-17 22:00:37 +05:30
end
end
context 'when an underlying Git command fail' do
it 'aborts and display a help message' do
2018-03-17 18:26:18 +05:30
expect ( main_object )
2017-09-10 17:25:29 +05:30
. to receive ( :checkout_or_clone_version ) . and_raise 'Git error'
2017-08-17 22:00:37 +05:30
2018-11-20 20:47:30 +05:30
expect { subject } . to raise_error 'Git error'
2017-08-17 22:00:37 +05:30
end
end
describe 'checkout or clone' do
before do
expect ( Dir ) . to receive ( :chdir ) . with ( clone_path )
end
it 'calls checkout_or_clone_version with the right arguments' do
2018-03-17 18:26:18 +05:30
expect ( main_object )
2017-09-10 17:25:29 +05:30
. to receive ( :checkout_or_clone_version ) . with ( version : version , repo : repo , target_dir : clone_path )
2017-08-17 22:00:37 +05:30
2018-11-20 20:47:30 +05:30
subject
2017-08-17 22:00:37 +05:30
end
end
describe 'gmake/make' do
2017-09-10 17:25:29 +05:30
let ( :command_preamble ) { %w[ /usr/bin/env -u RUBYOPT -u BUNDLE_GEMFILE ] }
2017-08-17 22:00:37 +05:30
before do
2018-03-17 18:26:18 +05:30
stub_env ( 'CI' , false )
2017-08-17 22:00:37 +05:30
FileUtils . mkdir_p ( clone_path )
expect ( Dir ) . to receive ( :chdir ) . with ( clone_path ) . and_call_original
2018-03-17 18:26:18 +05:30
allow ( Rails . env ) . to receive ( :test? ) . and_return ( false )
2017-08-17 22:00:37 +05:30
end
context 'gmake is available' do
before do
2018-03-17 18:26:18 +05:30
expect ( main_object ) . to receive ( :checkout_or_clone_version )
2017-08-17 22:00:37 +05:30
end
it 'calls gmake in the gitaly directory' do
expect ( Gitlab :: Popen ) . to receive ( :popen ) . with ( %w[ which gmake ] ) . and_return ( [ '/usr/bin/gmake' , 0 ] )
2018-03-17 18:26:18 +05:30
expect ( main_object ) . to receive ( :run_command! ) . with ( command_preamble + %w[ gmake ] ) . and_return ( true )
2017-08-17 22:00:37 +05:30
2018-11-20 20:47:30 +05:30
subject
2017-08-17 22:00:37 +05:30
end
end
context 'gmake is not available' do
before do
2018-03-17 18:26:18 +05:30
expect ( main_object ) . to receive ( :checkout_or_clone_version )
expect ( Gitlab :: Popen ) . to receive ( :popen ) . with ( %w[ which gmake ] ) . and_return ( [ '' , 42 ] )
2017-08-17 22:00:37 +05:30
end
it 'calls make in the gitaly directory' do
2018-03-17 18:26:18 +05:30
expect ( main_object ) . to receive ( :run_command! ) . with ( command_preamble + %w[ make ] ) . and_return ( true )
2017-08-17 22:00:37 +05:30
2018-11-20 20:47:30 +05:30
subject
2017-08-17 22:00:37 +05:30
end
2018-03-17 18:26:18 +05:30
context 'when Rails.env is test' do
let ( :command ) do
%W[ make
BUNDLE_FLAGS = - - no - deployment
BUNDLE_PATH = #{Bundler.bundle_path}]
end
before do
allow ( Rails . env ) . to receive ( :test? ) . and_return ( true )
end
it 'calls make in the gitaly directory with --no-deployment flag for bundle' do
expect ( main_object ) . to receive ( :run_command! ) . with ( command_preamble + command ) . and_return ( true )
2018-11-20 20:47:30 +05:30
subject
2018-03-17 18:26:18 +05:30
end
end
2017-08-17 22:00:37 +05:30
end
end
end
end