Refactor error classes

All runner errors are now in a single file. The not found error
has been splitted into an error for runner not found and for
environment not found.
This commit is contained in:
Felix Auringer
2021-06-14 09:56:27 +02:00
committed by Sebastian Serth
parent 413f9b2705
commit b48b45de9f
11 changed files with 29 additions and 32 deletions

View File

@ -1,3 +1,21 @@
# frozen_string_literal: true # frozen_string_literal: true
class Runner::Error < ApplicationError; end class Runner
class Error < ApplicationError
class BadRequest < Error; end
class EnvironmentNotFound < Error; end
class ExecutionTimeout < Error; end
class InternalServerError < Error; end
class NotAvailable < Error; end
class Unauthorized < Error; end
class RunnerNotFound < Error; end
class Unknown < Error; end
end
end

View File

@ -1,3 +0,0 @@
# frozen_string_literal: true
class Runner::Error::BadRequest < Runner::Error; end

View File

@ -1,3 +0,0 @@
# frozen_string_literal: true
class Runner::Error::ExecutionTimeout < Runner::Error; end

View File

@ -1,3 +0,0 @@
# frozen_string_literal: true
class Runner::Error::InternalServerError < Runner::Error; end

View File

@ -1,3 +0,0 @@
# frozen_string_literal: true
class Runner::Error::NotAvailable < Runner::Error; end

View File

@ -1,3 +0,0 @@
# frozen_string_literal: true
class Runner::Error::NotFound < Runner::Error; end

View File

@ -1,3 +0,0 @@
# frozen_string_literal: true
class Runner::Error::Unauthorized < Runner::Error; end

View File

@ -1,3 +0,0 @@
# frozen_string_literal: true
class Runner::Error::Unknown < Runner::Error; end

View File

@ -38,7 +38,7 @@ class Runner < ApplicationRecord
DELEGATED_STRATEGY_METHODS.each do |method| DELEGATED_STRATEGY_METHODS.each do |method|
define_method(method) do |*args, &block| define_method(method) do |*args, &block|
@strategy.send(method, *args, &block) @strategy.send(method, *args, &block)
rescue Runner::Error::NotFound rescue Runner::Error::RunnerNotFound
request_new_id request_new_id
save save
@strategy.send(method, *args, &block) @strategy.send(method, *args, &block)
@ -55,13 +55,13 @@ class Runner < ApplicationRecord
strategy_class = self.class.strategy_class strategy_class = self.class.strategy_class
self.runner_id = strategy_class.request_from_management(execution_environment) self.runner_id = strategy_class.request_from_management(execution_environment)
@strategy = strategy_class.new(runner_id, execution_environment) @strategy = strategy_class.new(runner_id, execution_environment)
rescue Runner::Error::NotFound rescue Runner::Error::EnvironmentNotFound
if strategy_class.sync_environment(execution_environment) if strategy_class.sync_environment(execution_environment)
raise Runner::Error::NotFound.new( raise Runner::Error::EnvironmentNotFound.new(
"The execution environment with id #{execution_environment.id} was not found and was successfully synced with the runner management" "The execution environment with id #{execution_environment.id} was not found and was successfully synced with the runner management"
) )
else else
raise Runner::Error::NotFound.new( raise Runner::Error::EnvironmentNotFound.new(
"The execution environment with id #{execution_environment.id} was not found and could not be synced with the runner management" "The execution environment with id #{execution_environment.id} was not found and could not be synced with the runner management"
) )
end end

View File

@ -53,7 +53,7 @@ describe Runner::Strategy::Poseidon do
let(:response_status) { 404 } let(:response_status) { 404 }
it 'raises an error' do it 'raises an error' do
expect { action.call }.to raise_error(Runner::Error::NotFound, /Runner/) expect { action.call }.to raise_error(Runner::Error::RunnerNotFound)
end end
end end
end end
@ -152,7 +152,7 @@ describe Runner::Strategy::Poseidon do
let(:response_status) { 404 } let(:response_status) { 404 }
it 'raises an error' do it 'raises an error' do
expect { action.call }.to raise_error(Runner::Error::NotFound, /Execution environment/) expect { action.call }.to raise_error(Runner::Error::EnvironmentNotFound)
end end
end end

View File

@ -118,23 +118,23 @@ describe Runner do
context 'when the environment could not be found in the runner management' do context 'when the environment could not be found in the runner management' do
let(:environment_id) { runner.execution_environment.id } let(:environment_id) { runner.execution_environment.id }
before { allow(strategy_class).to receive(:request_from_management).and_raise(Runner::Error::NotFound) } before { allow(strategy_class).to receive(:request_from_management).and_raise(Runner::Error::EnvironmentNotFound) }
it 'syncs the execution environment' do it 'syncs the execution environment' do
expect(strategy_class).to receive(:sync_environment).with(runner.execution_environment) expect(strategy_class).to receive(:sync_environment).with(runner.execution_environment)
runner.send(:request_new_id) runner.send(:request_new_id)
rescue Runner::Error::NotFound rescue Runner::Error::EnvironmentNotFound
# Ignored because this error is expected (see tests below). # Ignored because this error is expected (see tests below).
end end
it 'raises an error when the environment could be synced' do it 'raises an error when the environment could be synced' do
allow(strategy_class).to receive(:sync_environment).with(runner.execution_environment).and_return(true) allow(strategy_class).to receive(:sync_environment).with(runner.execution_environment).and_return(true)
expect { runner.send(:request_new_id) }.to raise_error(Runner::Error::NotFound, /#{environment_id}.*successfully synced/) expect { runner.send(:request_new_id) }.to raise_error(Runner::Error::EnvironmentNotFound, /#{environment_id}.*successfully synced/)
end end
it 'raises an error when the environment could not be synced' do it 'raises an error when the environment could not be synced' do
allow(strategy_class).to receive(:sync_environment).with(runner.execution_environment).and_return(false) allow(strategy_class).to receive(:sync_environment).with(runner.execution_environment).and_return(false)
expect { runner.send(:request_new_id) }.to raise_error(Runner::Error::NotFound, /#{environment_id}.*could not be synced/) expect { runner.send(:request_new_id) }.to raise_error(Runner::Error::EnvironmentNotFound, /#{environment_id}.*could not be synced/)
end end
end end
end end