diff options
| author | Douwe Maan <douwe@gitlab.com> | 2015-02-11 23:43:57 +0100 |
|---|---|---|
| committer | Douwe Maan <douwe@gitlab.com> | 2015-02-11 23:43:57 +0100 |
| commit | 562d7eb4ecaa9ca35f970567c0f09cdb29d26521 (patch) | |
| tree | 032eb81a84675799500b5ecb54789fea90f3fcb6 /spec | |
| parent | f92a9c5a5f3f1cfc8a827abcf67a508133f39f04 (diff) | |
| download | gitlab-shell-562d7eb4ecaa9ca35f970567c0f09cdb29d26521.tar.gz | |
Show nice error message when internal API is unreachable.
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/gitlab_access_spec.rb | 49 | ||||
| -rw-r--r-- | spec/gitlab_net_spec.rb | 19 | ||||
| -rw-r--r-- | spec/gitlab_shell_spec.rb | 21 |
3 files changed, 85 insertions, 4 deletions
diff --git a/spec/gitlab_access_spec.rb b/spec/gitlab_access_spec.rb index 13db4bd..4768c71 100644 --- a/spec/gitlab_access_spec.rb +++ b/spec/gitlab_access_spec.rb @@ -5,15 +5,56 @@ describe GitlabAccess do let(:repository_path) { "/home/git/repositories" } let(:repo_name) { 'dzaporozhets/gitlab-ci' } let(:repo_path) { File.join(repository_path, repo_name) + ".git" } - let(:gitlab_access) { GitlabAccess.new(repo_path, 'key-123', 'wow') } + let(:api) do + double(GitlabNet).tap do |api| + api.stub(check_access: GitAccessStatus.new(true)) + end + end + subject do + GitlabAccess.new(repo_path, 'key-123', 'wow').tap do |access| + access.stub(exec_cmd: :exec_called) + access.stub(api: api) + end + end before do GitlabConfig.any_instance.stub(repos_path: repository_path) end describe :initialize do - it { gitlab_access.repo_name.should == repo_name } - it { gitlab_access.repo_path.should == repo_path } - it { gitlab_access.changes.should == ['wow'] } + it { subject.repo_name.should == repo_name } + it { subject.repo_path.should == repo_path } + it { subject.changes.should == ['wow'] } + end + + describe "#exec" do + context "access is granted" do + + it "returns true" do + expect(subject.exec).to be_true + end + end + + context "access is denied" do + + before do + api.stub(check_access: GitAccessStatus.new(false)) + end + + it "returns false" do + expect(subject.exec).to be_false + end + end + + context "API connection fails" do + + before do + api.stub(:check_access).and_raise(GitlabNet::ApiUnreachableError) + end + + it "returns false" do + expect(subject.exec).to be_false + end + end end end diff --git a/spec/gitlab_net_spec.rb b/spec/gitlab_net_spec.rb index e9a9d03..17fb56d 100644 --- a/spec/gitlab_net_spec.rb +++ b/spec/gitlab_net_spec.rb @@ -26,6 +26,11 @@ describe GitlabNet, vcr: true do gitlab_net.check end end + + it "raises an exception if the connection fails" do + Net::HTTP.any_instance.stub(:request).and_raise(StandardError) + expect { gitlab_net.check }.to raise_error(GitlabNet::ApiUnreachableError) + end end describe :discover do @@ -42,6 +47,13 @@ describe GitlabNet, vcr: true do gitlab_net.discover('key-126') end end + + it "raises an exception if the connection fails" do + VCR.use_cassette("discover-ok") do + Net::HTTP.any_instance.stub(:request).and_raise(StandardError) + expect { gitlab_net.discover('key-126') }.to raise_error(GitlabNet::ApiUnreachableError) + end + end end describe :broadcast_message do @@ -110,6 +122,13 @@ describe GitlabNet, vcr: true do end end end + + it "raises an exception if the connection fails" do + Net::HTTP.any_instance.stub(:request).and_raise(StandardError) + expect { + gitlab_net.check_access('git-upload-pack', 'gitlab/gitlabhq.git', 'user-1', changes) + }.to raise_error(GitlabNet::ApiUnreachableError) + end end describe :host do diff --git a/spec/gitlab_shell_spec.rb b/spec/gitlab_shell_spec.rb index 5df2391..4ca7984 100644 --- a/spec/gitlab_shell_spec.rb +++ b/spec/gitlab_shell_spec.rb @@ -135,6 +135,27 @@ describe GitlabShell do api.should_receive(:discover).with(key_id) end end + + context "failed connection" do + before { + ssh_cmd 'git-upload-pack gitlab-ci.git' + api.stub(:check_access).and_raise(GitlabNet::ApiUnreachableError) + } + after { subject.exec } + + it "should not process the command" do + subject.should_not_receive(:process_cmd) + end + + it "should not execute the command" do + subject.should_not_receive(:exec_cmd) + end + + it "should log the failed connection" do + message = "gitlab-shell: Failed to connect to internal API" + $logger.should_receive(:warn).with(message) + end + end end describe :validate_access do |
