... ... @@ -9,14 +9,11 @@ describe Gitlab::Shell do
let ( :gitlab_shell ) { described_class . new }
let ( :popen_vars ) { { 'GIT_TERMINAL_PROMPT' => ENV [ 'GIT_TERMINAL_PROMPT' ] } }
let ( :timeout ) { Gitlab . config . gitlab_shell . git_timeout }
let ( :gitlab_authorized_keys ) { double }
before do
allow ( Project ). to receive ( :find ). and_return ( project )
end
it { is_expected . to respond_to :add_key }
it { is_expected . to respond_to :remove_key }
it { is_expected . to respond_to :create_repository }
it { is_expected . to respond_to :remove_repository }
it { is_expected . to respond_to :fork_repository }
... ... @@ -49,227 +46,6 @@ describe Gitlab::Shell do
end
end
describe '#add_key' do
context 'when authorized_keys_enabled is true' do
it 'calls Gitlab::AuthorizedKeys#add_key with id and key' do
expect ( Gitlab :: AuthorizedKeys ). to receive ( :new ). and_return ( gitlab_authorized_keys )
expect ( gitlab_authorized_keys )
. to receive ( :add_key )
. with ( 'key-123' , 'ssh-rsa foobar' )
gitlab_shell . add_key ( 'key-123' , 'ssh-rsa foobar' )
end
end
context 'when authorized_keys_enabled is false' do
before do
stub_application_setting ( authorized_keys_enabled: false )
end
it 'does nothing' do
expect ( Gitlab :: AuthorizedKeys ). not_to receive ( :new )
gitlab_shell . add_key ( 'key-123' , 'ssh-rsa foobar trailing garbage' )
end
end
context 'when authorized_keys_enabled is nil' do
before do
stub_application_setting ( authorized_keys_enabled: nil )
end
it 'calls Gitlab::AuthorizedKeys#add_key with id and key' do
expect ( Gitlab :: AuthorizedKeys ). to receive ( :new ). and_return ( gitlab_authorized_keys )
expect ( gitlab_authorized_keys )
. to receive ( :add_key )
. with ( 'key-123' , 'ssh-rsa foobar' )
gitlab_shell . add_key ( 'key-123' , 'ssh-rsa foobar' )
end
end
end
describe '#batch_add_keys' do
let ( :keys ) { [ double ( shell_id: 'key-123' , key: 'ssh-rsa foobar' )] }
context 'when authorized_keys_enabled is true' do
it 'calls Gitlab::AuthorizedKeys#batch_add_keys with keys to be added' do
expect ( Gitlab :: AuthorizedKeys ). to receive ( :new ). and_return ( gitlab_authorized_keys )
expect ( gitlab_authorized_keys )
. to receive ( :batch_add_keys )
. with ( keys )
gitlab_shell . batch_add_keys ( keys )
end
end
context 'when authorized_keys_enabled is false' do
before do
stub_application_setting ( authorized_keys_enabled: false )
end
it 'does nothing' do
expect ( Gitlab :: AuthorizedKeys ). not_to receive ( :new )
gitlab_shell . batch_add_keys ( keys )
end
end
context 'when authorized_keys_enabled is nil' do
before do
stub_application_setting ( authorized_keys_enabled: nil )
end
it 'calls Gitlab::AuthorizedKeys#batch_add_keys with keys to be added' do
expect ( Gitlab :: AuthorizedKeys ). to receive ( :new ). and_return ( gitlab_authorized_keys )
expect ( gitlab_authorized_keys )
. to receive ( :batch_add_keys )
. with ( keys )
gitlab_shell . batch_add_keys ( keys )
end
end
end
describe '#remove_key' do
context 'when authorized_keys_enabled is true' do
it 'calls Gitlab::AuthorizedKeys#rm_key with the key to be removed' do
expect ( Gitlab :: AuthorizedKeys ). to receive ( :new ). and_return ( gitlab_authorized_keys )
expect ( gitlab_authorized_keys ). to receive ( :rm_key ). with ( 'key-123' )
gitlab_shell . remove_key ( 'key-123' )
end
end
context 'when authorized_keys_enabled is false' do
before do
stub_application_setting ( authorized_keys_enabled: false )
end
it 'does nothing' do
expect ( Gitlab :: AuthorizedKeys ). not_to receive ( :new )
gitlab_shell . remove_key ( 'key-123' )
end
end
context 'when authorized_keys_enabled is nil' do
before do
stub_application_setting ( authorized_keys_enabled: nil )
end
it 'calls Gitlab::AuthorizedKeys#rm_key with the key to be removed' do
expect ( Gitlab :: AuthorizedKeys ). to receive ( :new ). and_return ( gitlab_authorized_keys )
expect ( gitlab_authorized_keys ). to receive ( :rm_key ). with ( 'key-123' )
gitlab_shell . remove_key ( 'key-123' )
end
end
end
describe '#remove_all_keys' do
context 'when authorized_keys_enabled is true' do
it 'calls Gitlab::AuthorizedKeys#clear' do
expect ( Gitlab :: AuthorizedKeys ). to receive ( :new ). and_return ( gitlab_authorized_keys )
expect ( gitlab_authorized_keys ). to receive ( :clear )
gitlab_shell . remove_all_keys
end
end
context 'when authorized_keys_enabled is false' do
before do
stub_application_setting ( authorized_keys_enabled: false )
end
it 'does nothing' do
expect ( Gitlab :: AuthorizedKeys ). not_to receive ( :new )
gitlab_shell . remove_all_keys
end
end
context 'when authorized_keys_enabled is nil' do
before do
stub_application_setting ( authorized_keys_enabled: nil )
end
it 'calls Gitlab::AuthorizedKeys#clear' do
expect ( Gitlab :: AuthorizedKeys ). to receive ( :new ). and_return ( gitlab_authorized_keys )
expect ( gitlab_authorized_keys ). to receive ( :clear )
gitlab_shell . remove_all_keys
end
end
end
describe '#remove_keys_not_found_in_db' do
context 'when keys are in the file that are not in the DB' do
before do
gitlab_shell . remove_all_keys
gitlab_shell . add_key ( 'key-1234' , 'ssh-rsa ASDFASDF' )
gitlab_shell . add_key ( 'key-9876' , 'ssh-rsa ASDFASDF' )
@another_key = create ( :key ) # this one IS in the DB
end
it 'removes the keys' do
expect ( gitlab_shell ). to receive ( :remove_key ). with ( 'key-1234' )
expect ( gitlab_shell ). to receive ( :remove_key ). with ( 'key-9876' )
expect ( gitlab_shell ). not_to receive ( :remove_key ). with ( "key- #{ @another_key . id } " )
gitlab_shell . remove_keys_not_found_in_db
end
end
context 'when keys there are duplicate keys in the file that are not in the DB' do
before do
gitlab_shell . remove_all_keys
gitlab_shell . add_key ( 'key-1234' , 'ssh-rsa ASDFASDF' )
gitlab_shell . add_key ( 'key-1234' , 'ssh-rsa ASDFASDF' )
end
it 'removes the keys' do
expect ( gitlab_shell ). to receive ( :remove_key ). with ( 'key-1234' )
gitlab_shell . remove_keys_not_found_in_db
end
end
context 'when keys there are duplicate keys in the file that ARE in the DB' do
before do
gitlab_shell . remove_all_keys
@key = create ( :key )
gitlab_shell . add_key ( @key . shell_id , @key . key )
end
it 'does not remove the key' do
expect ( gitlab_shell ). not_to receive ( :remove_key ). with ( "key- #{ @key . id } " )
gitlab_shell . remove_keys_not_found_in_db
end
end
unless ENV [ 'CI' ] # Skip in CI, it takes 1 minute
context 'when the first batch can be skipped, but the next batch has keys that are not in the DB' do
before do
gitlab_shell . remove_all_keys
100 . times { | i | create ( :key ) } # first batch is all in the DB
gitlab_shell . add_key ( 'key-1234' , 'ssh-rsa ASDFASDF' )
end
it 'removes the keys not in the DB' do
expect ( gitlab_shell ). to receive ( :remove_key ). with ( 'key-1234' )
gitlab_shell . remove_keys_not_found_in_db
end
end
end
end
describe 'projects commands' do
let ( :gitlab_shell_path ) { File . expand_path ( 'tmp/tests/gitlab-shell' ) }
let ( :projects_path ) { File . join ( gitlab_shell_path , 'bin/gitlab-projects' ) }
... ...
... ...