diff options
author | Douwe Maan <douwe@gitlab.com> | 2016-03-15 10:51:38 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2016-03-15 10:51:38 +0000 |
commit | ea7d062fa60e3e622288237fc66a815348bbcf36 (patch) | |
tree | 69957b37821b4593ed9e75c330a5c650150cd3c3 /spec | |
parent | be3a9440af7cedcf60dc1bb64c63f1786dc565bc (diff) | |
parent | 30b36c92c386e93b432166fb6f9dd973882a6d82 (diff) | |
download | gitlab-ce-ea7d062fa60e3e622288237fc66a815348bbcf36.tar.gz |
Merge branch 'auto-gc' into 'master'
revert-01160fc0
Run 'git gc' every 10 pushes
Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/14250
Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/12620
Fixes https://gitlab.com/gitlab-org/gitlab-ee/issues/254
Associated gitlab-shell MR:
https://gitlab.com/gitlab-org/gitlab-shell/merge_requests/44
See merge request !3206
Diffstat (limited to 'spec')
-rw-r--r-- | spec/services/git_push_service_spec.rb | 39 | ||||
-rw-r--r-- | spec/services/projects/housekeeping_service_spec.rb | 48 |
2 files changed, 87 insertions, 0 deletions
diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb index a7e2e1b1792..145bc937560 100644 --- a/spec/services/git_push_service_spec.rb +++ b/spec/services/git_push_service_spec.rb @@ -401,6 +401,45 @@ describe GitPushService, services: true do end end + describe "housekeeping" do + let(:housekeeping) { Projects::HousekeepingService.new(project) } + + before do + allow(Projects::HousekeepingService).to receive(:new).and_return(housekeeping) + end + + it 'does not perform housekeeping when not needed' do + expect(housekeeping).not_to receive(:execute) + + execute_service(project, user, @oldrev, @newrev, @ref) + end + + context 'when housekeeping is needed' do + before do + allow(housekeeping).to receive(:needed?).and_return(true) + end + + it 'performs housekeeping' do + expect(housekeeping).to receive(:execute) + + execute_service(project, user, @oldrev, @newrev, @ref) + end + + it 'does not raise an exception' do + allow(housekeeping).to receive(:try_obtain_lease).and_return(false) + + execute_service(project, user, @oldrev, @newrev, @ref) + end + end + + + it 'increments the push counter' do + expect(housekeeping).to receive(:increment!) + + execute_service(project, user, @oldrev, @newrev, @ref) + end + end + def execute_service(project, user, oldrev, newrev, ref) service = described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref ) service.execute diff --git a/spec/services/projects/housekeeping_service_spec.rb b/spec/services/projects/housekeeping_service_spec.rb new file mode 100644 index 00000000000..93bf1b81fbe --- /dev/null +++ b/spec/services/projects/housekeeping_service_spec.rb @@ -0,0 +1,48 @@ +require 'spec_helper' + +describe Projects::HousekeepingService do + subject { Projects::HousekeepingService.new(project) } + let(:project) { create :project } + + describe 'execute' do + before do + project.pushes_since_gc = 3 + project.save! + end + + it 'enqueues a sidekiq job' do + expect(subject).to receive(:try_obtain_lease).and_return(true) + expect(GitlabShellWorker).to receive(:perform_async).with(:gc, project.path_with_namespace) + + subject.execute + expect(project.pushes_since_gc).to eq(0) + end + + it 'does not enqueue a job when no lease can be obtained' do + expect(subject).to receive(:try_obtain_lease).and_return(false) + expect(GitlabShellWorker).not_to receive(:perform_async) + + expect { subject.execute }.to raise_error(Projects::HousekeepingService::LeaseTaken) + expect(project.pushes_since_gc).to eq(0) + end + end + + describe 'needed?' do + it 'when the count is low enough' do + expect(subject.needed?).to eq(false) + end + + it 'when the count is high enough' do + allow(project).to receive(:pushes_since_gc).and_return(10) + expect(subject.needed?).to eq(true) + end + end + + describe 'increment!' do + it 'increments the pushes_since_gc counter' do + expect(project.pushes_since_gc).to eq(0) + subject.increment! + expect(project.pushes_since_gc).to eq(1) + end + end +end |