Commit d1bb9c5c authored by Marin Jankovski's avatar Marin Jankovski

Merge branch 'fix-post-receive' into 'master'

Return true from GitlabPostReceive to ensure custom hooks run.

Fixes https://gitlab.com/gitlab-org/omnibus-gitlab/issues/438.

See merge request !62
parents 926bef44 b0fc24c9
...@@ -2,7 +2,7 @@ source "http://rubygems.org" ...@@ -2,7 +2,7 @@ source "http://rubygems.org"
group :development, :test do group :development, :test do
gem 'coveralls', require: false gem 'coveralls', require: false
gem 'rspec' gem 'rspec', '~> 2.14.0'
gem 'webmock' gem 'webmock'
gem 'guard' gem 'guard'
gem 'guard-rspec' gem 'guard-rspec'
......
...@@ -13,7 +13,7 @@ GEM ...@@ -13,7 +13,7 @@ GEM
term-ansicolor term-ansicolor
thor thor
crack (0.3.1) crack (0.3.1)
diff-lcs (1.1.3) diff-lcs (1.2.5)
docile (1.1.5) docile (1.1.5)
guard (1.5.4) guard (1.5.4)
listen (>= 0.4.2) listen (>= 0.4.2)
...@@ -40,14 +40,14 @@ GEM ...@@ -40,14 +40,14 @@ GEM
rest-client (1.7.2) rest-client (1.7.2)
mime-types (>= 1.16, < 3.0) mime-types (>= 1.16, < 3.0)
netrc (~> 0.7) netrc (~> 0.7)
rspec (2.12.0) rspec (2.14.1)
rspec-core (~> 2.12.0) rspec-core (~> 2.14.0)
rspec-expectations (~> 2.12.0) rspec-expectations (~> 2.14.0)
rspec-mocks (~> 2.12.0) rspec-mocks (~> 2.14.0)
rspec-core (2.12.2) rspec-core (2.14.8)
rspec-expectations (2.12.1) rspec-expectations (2.14.5)
diff-lcs (~> 1.1.3) diff-lcs (>= 1.1.3, < 2.0)
rspec-mocks (2.12.2) rspec-mocks (2.14.6)
rubocop (0.28.0) rubocop (0.28.0)
astrolabe (~> 1.3) astrolabe (~> 1.3)
parser (>= 2.2.0.pre.7, < 3.0) parser (>= 2.2.0.pre.7, < 3.0)
...@@ -77,7 +77,7 @@ DEPENDENCIES ...@@ -77,7 +77,7 @@ DEPENDENCIES
coveralls coveralls
guard guard
guard-rspec guard-rspec
rspec rspec (~> 2.14.0)
rubocop (= 0.28.0) rubocop (= 0.28.0)
vcr vcr
webmock webmock
...@@ -16,7 +16,7 @@ class GitlabPostReceive ...@@ -16,7 +16,7 @@ class GitlabPostReceive
# get value from it # get value from it
ENV['GL_ID'] = nil ENV['GL_ID'] = nil
update_redis result = update_redis
begin begin
broadcast_message = GitlabNet.new.broadcast_message broadcast_message = GitlabNet.new.broadcast_message
...@@ -28,6 +28,8 @@ class GitlabPostReceive ...@@ -28,6 +28,8 @@ class GitlabPostReceive
rescue GitlabNet::ApiUnreachableError rescue GitlabNet::ApiUnreachableError
nil nil
end end
result
end end
protected protected
......
...@@ -4,18 +4,87 @@ require 'gitlab_post_receive' ...@@ -4,18 +4,87 @@ require 'gitlab_post_receive'
describe GitlabPostReceive do describe GitlabPostReceive do
let(:repository_path) { "/home/git/repositories" } let(:repository_path) { "/home/git/repositories" }
let(:repo_name) { 'dzaporozhets/gitlab-ci' } let(:repo_name) { 'dzaporozhets/gitlab-ci' }
let(:actor) { 'key-123' }
let(:changes) { 'wow' }
let(:repo_path) { File.join(repository_path, repo_name) + ".git" } let(:repo_path) { File.join(repository_path, repo_name) + ".git" }
let(:gitlab_post_receive) { GitlabPostReceive.new(repo_path, 'key-123', 'wow') } let(:gitlab_post_receive) { GitlabPostReceive.new(repo_path, actor, changes) }
let(:message) { "test " * 10 + "message " * 10 }
before do before do
GitlabConfig.any_instance.stub(repos_path: repository_path) GitlabConfig.any_instance.stub(repos_path: repository_path)
Kernel.stub(system: true) GitlabNet.any_instance.stub(broadcast_message: { "message" => message })
GitlabNet.any_instance.stub(broadcast_message: { "message" => "test " * 10 + "message " * 10 })
end end
describe :initialize do describe "#exec" do
it { gitlab_post_receive.repo_path.should == repo_path }
it { gitlab_post_receive.changes.should == 'wow' } before do
it { gitlab_post_receive.exec } GitlabConfig.any_instance.stub(redis_command: %w(env -i redis-cli))
allow(gitlab_post_receive).to receive(:system).and_return(true)
end
it "resets the GL_ID environment variable" do
ENV["GL_ID"] = actor
gitlab_post_receive.exec
expect(ENV["GL_ID"]).to be_nil
end
it "prints the broadcast message" do
expect(gitlab_post_receive).to receive(:puts).ordered
expect(gitlab_post_receive).to receive(:puts).with(
"========================================================================"
).ordered
expect(gitlab_post_receive).to receive(:puts).ordered
expect(gitlab_post_receive).to receive(:puts).with(
" test test test test test test test test test test message message"
).ordered
expect(gitlab_post_receive).to receive(:puts).with(
" message message message message message message message message"
).ordered
expect(gitlab_post_receive).to receive(:puts).ordered
expect(gitlab_post_receive).to receive(:puts).with(
"========================================================================"
).ordered
gitlab_post_receive.exec
end
it "pushes a Sidekiq job onto the queue" do
expect(gitlab_post_receive).to receive(:system).with(
*[
*%w(env -i redis-cli rpush resque:gitlab:queue:post_receive),
%Q/{"class":"PostReceive","args":["#{repo_path}","#{actor}","#{changes}"]}/,
{ err: "/dev/null", out: "/dev/null" }
]
).and_return(true)
gitlab_post_receive.exec
end
context "when the redis command succeeds" do
before do
allow(gitlab_post_receive).to receive(:system).and_return(true)
end
it "returns true" do
expect(gitlab_post_receive.exec).to eq(true)
end
end
context "when the redis command fails" do
before do
allow(gitlab_post_receive).to receive(:system).and_return(false)
allow($?).to receive(:exitstatus).and_return(nil)
end
it "returns false" do
expect(gitlab_post_receive.exec).to eq(false)
end
end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment