11a483649e
When a repository does not exist on a remote, Gitaly won't be able to clone it. This is correct behaviour, but from the clients perspective a change in behaviour. This change implements the client side changes that allows Gitaly to execute a `git ls-remote <remote-url> HEAD`. This way the client has no need to shell out to Git. In the situation where multiple Gitalies are available, one is chosen at random. This commit closes https://gitlab.com/gitlab-org/gitlab-ce/issues/43929, while its also a part of https://gitlab.com/gitlab-org/gitaly/issues/1084
71 lines
2.4 KiB
Ruby
71 lines
2.4 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Gitlab::GitalyClient::RemoteService do
|
|
let(:project) { create(:project) }
|
|
let(:storage_name) { project.repository_storage }
|
|
let(:relative_path) { project.disk_path + '.git' }
|
|
let(:remote_name) { 'my-remote' }
|
|
let(:client) { described_class.new(project.repository) }
|
|
|
|
describe '#add_remote' do
|
|
let(:url) { 'http://my-repo.git' }
|
|
let(:mirror_refmap) { :all_refs }
|
|
|
|
it 'sends an add_remote message' do
|
|
expect_any_instance_of(Gitaly::RemoteService::Stub)
|
|
.to receive(:add_remote)
|
|
.with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
|
|
.and_return(double(:add_remote_response))
|
|
|
|
client.add_remote(remote_name, url, mirror_refmap)
|
|
end
|
|
end
|
|
|
|
describe '#remove_remote' do
|
|
it 'sends an remove_remote message and returns the result value' do
|
|
expect_any_instance_of(Gitaly::RemoteService::Stub)
|
|
.to receive(:remove_remote)
|
|
.with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
|
|
.and_return(double(result: true))
|
|
|
|
expect(client.remove_remote(remote_name)).to be(true)
|
|
end
|
|
end
|
|
|
|
describe '#fetch_internal_remote' do
|
|
let(:remote_repository) { Gitlab::Git::Repository.new('default', TEST_MUTABLE_REPO_PATH, '') }
|
|
|
|
it 'sends an fetch_internal_remote message and returns the result value' do
|
|
expect_any_instance_of(Gitaly::RemoteService::Stub)
|
|
.to receive(:fetch_internal_remote)
|
|
.with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
|
|
.and_return(double(result: true))
|
|
|
|
expect(client.fetch_internal_remote(remote_repository)).to be(true)
|
|
end
|
|
end
|
|
|
|
describe '#update_remote_mirror' do
|
|
let(:ref_name) { 'remote_mirror_1' }
|
|
let(:only_branches_matching) { ['my-branch', 'master'] }
|
|
|
|
it 'sends an update_remote_mirror message' do
|
|
expect_any_instance_of(Gitaly::RemoteService::Stub)
|
|
.to receive(:update_remote_mirror)
|
|
.with(kind_of(Enumerator), kind_of(Hash))
|
|
.and_return(double(:update_remote_mirror_response))
|
|
|
|
client.update_remote_mirror(ref_name, only_branches_matching)
|
|
end
|
|
end
|
|
|
|
describe '.exists?' do
|
|
context "when the remote doesn't exist" do
|
|
let(:url) { 'https://gitlab.com/gitlab-org/ik-besta-niet-of-ik-word-geplaagd.git' }
|
|
|
|
it 'returns false' do
|
|
expect(described_class.exists?(url)).to be(false)
|
|
end
|
|
end
|
|
end
|
|
end
|