Update service to handle unexpected exceptions

This will ensure that now and in the future, PushOptionsHandlerService
will not cause the post_receive API endpoint from running other code if
something causes an unknown exception.
This commit is contained in:
Luke Duncalfe 2019-04-09 10:55:07 +12:00
parent 3c40c98e26
commit b5bcf80c9a
2 changed files with 29 additions and 0 deletions

View File

@ -24,6 +24,9 @@ module MergeRequests
execute_for_branch(branch)
rescue Gitlab::Access::AccessDeniedError
errors << 'User access was denied'
rescue StandardError => e
Gitlab::AppLogger.error(e)
errors << 'An unknown error occurred'
end
self

View File

@ -334,6 +334,32 @@ describe MergeRequests::PushOptionsHandlerService do
end
end
describe 'handling unexpected exceptions' do
let(:push_options) { { create: true } }
let(:changes) { new_branch_changes }
let(:exception) { StandardError.new('My standard error') }
def run_service_with_exception
allow_any_instance_of(
MergeRequests::BuildService
).to receive(:execute).and_raise(exception)
service.execute
end
it 'records an error' do
run_service_with_exception
expect(service.errors).to eq(['An unknown error occurred'])
end
it 'writes to Gitlab::AppLogger' do
expect(Gitlab::AppLogger).to receive(:error).with(exception)
run_service_with_exception
end
end
describe 'when target is not a valid branch name' do
let(:push_options) { { create: true, target: 'my-branch' } }
let(:changes) { new_branch_changes }