Refactor to share tests for base class method
DRY up tests for logging error.
This commit is contained in:
parent
5eb2d6ea02
commit
7cd9cdbe54
5 changed files with 75 additions and 203 deletions
|
@ -33,15 +33,22 @@ describe Clusters::Applications::CheckInstallationProgressService, '#execute' do
|
|||
end
|
||||
end
|
||||
|
||||
shared_examples 'error logging' do
|
||||
shared_examples 'error handling' do
|
||||
context 'when installation raises a Kubeclient::HttpError' do
|
||||
let(:cluster) { create(:cluster, :provided_by_user, :project) }
|
||||
let(:logger) { service.send(:logger) }
|
||||
let(:error) { Kubeclient::HttpError.new(401, 'Unauthorized', nil) }
|
||||
|
||||
before do
|
||||
application.update!(cluster: cluster)
|
||||
|
||||
expect(service).to receive(:installation_phase).and_raise(Kubeclient::HttpError.new(401, 'Unauthorized', nil))
|
||||
expect(service).to receive(:installation_phase).and_raise(error)
|
||||
end
|
||||
|
||||
include_examples 'logs kubernetes errors' do
|
||||
let(:error_name) { 'Kubeclient::HttpError' }
|
||||
let(:error_message) { 'Unauthorized' }
|
||||
let(:error_code) { 401 }
|
||||
end
|
||||
|
||||
it 'shows the response code from the error' do
|
||||
|
@ -50,18 +57,6 @@ describe Clusters::Applications::CheckInstallationProgressService, '#execute' do
|
|||
expect(application).to be_errored.or(be_update_errored)
|
||||
expect(application.status_reason).to eq('Kubernetes error: 401')
|
||||
end
|
||||
|
||||
it 'should log error' do
|
||||
expect(logger).to receive(:error)
|
||||
|
||||
service.execute
|
||||
end
|
||||
|
||||
it 'logs error backtrace' do
|
||||
expect(logger).to receive(:error).with(hash_including(backtrace: instance_of(Array)))
|
||||
|
||||
service.execute
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -73,7 +68,7 @@ describe Clusters::Applications::CheckInstallationProgressService, '#execute' do
|
|||
context 'when application is updating' do
|
||||
let(:application) { create(:clusters_applications_helm, :updating) }
|
||||
|
||||
include_examples 'error logging'
|
||||
include_examples 'error handling'
|
||||
|
||||
RESCHEDULE_PHASES.each { |phase| it_behaves_like 'a not yet terminated installation', phase }
|
||||
|
||||
|
@ -134,7 +129,7 @@ describe Clusters::Applications::CheckInstallationProgressService, '#execute' do
|
|||
end
|
||||
|
||||
context 'when application is installing' do
|
||||
include_examples 'error logging'
|
||||
include_examples 'error handling'
|
||||
|
||||
RESCHEDULE_PHASES.each { |phase| it_behaves_like 'a not yet terminated installation', phase }
|
||||
|
||||
|
|
|
@ -39,53 +39,34 @@ describe Clusters::Applications::InstallService do
|
|||
expect(helm_client).to receive(:install).with(install_command).and_raise(error)
|
||||
end
|
||||
|
||||
include_examples 'logs kubernetes errors' do
|
||||
let(:error_name) { 'Kubeclient::HttpError' }
|
||||
let(:error_message) { 'system failure' }
|
||||
let(:error_code) { 500 }
|
||||
end
|
||||
|
||||
it 'make the application errored' do
|
||||
service.execute
|
||||
|
||||
expect(application).to be_errored
|
||||
expect(application.status_reason).to match('Kubernetes error: 500')
|
||||
end
|
||||
|
||||
it 'logs errors' do
|
||||
expect(service.send(:logger)).to receive(:error).with(
|
||||
{
|
||||
exception: 'Kubeclient::HttpError',
|
||||
message: 'system failure',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::InstallService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.project_ids,
|
||||
group_ids: [],
|
||||
error_code: 500
|
||||
}
|
||||
)
|
||||
|
||||
expect(Gitlab::Sentry).to receive(:track_acceptable_exception).with(
|
||||
error,
|
||||
extra: hash_including(
|
||||
exception: 'Kubeclient::HttpError',
|
||||
message: 'system failure',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::InstallService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.project_ids,
|
||||
group_ids: [],
|
||||
error_code: 500
|
||||
)
|
||||
)
|
||||
|
||||
service.execute
|
||||
end
|
||||
end
|
||||
|
||||
context 'a non kubernetes error happens' do
|
||||
let(:application) { create(:clusters_applications_helm, :scheduled) }
|
||||
let(:error) { StandardError.new("something bad happened") }
|
||||
let(:error) { StandardError.new('something bad happened') }
|
||||
|
||||
before do
|
||||
expect(application).to receive(:make_installing!).once.and_raise(error)
|
||||
end
|
||||
|
||||
include_examples 'logs kubernetes errors' do
|
||||
let(:error_name) { 'StandardError' }
|
||||
let(:error_message) { 'something bad happened' }
|
||||
let(:error_code) { nil }
|
||||
end
|
||||
|
||||
it 'make the application errored' do
|
||||
expect(helm_client).not_to receive(:install)
|
||||
|
||||
|
@ -94,37 +75,6 @@ describe Clusters::Applications::InstallService do
|
|||
expect(application).to be_errored
|
||||
expect(application.status_reason).to eq("Can't start installation process.")
|
||||
end
|
||||
|
||||
it 'logs errors' do
|
||||
expect(service.send(:logger)).to receive(:error).with(
|
||||
{
|
||||
exception: 'StandardError',
|
||||
error_code: nil,
|
||||
message: 'something bad happened',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::InstallService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.projects.pluck(:id),
|
||||
group_ids: []
|
||||
}
|
||||
)
|
||||
|
||||
expect(Gitlab::Sentry).to receive(:track_acceptable_exception).with(
|
||||
error,
|
||||
extra: hash_including(
|
||||
exception: 'StandardError',
|
||||
error_code: nil,
|
||||
message: 'something bad happened',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::InstallService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.projects.pluck(:id),
|
||||
group_ids: []
|
||||
)
|
||||
)
|
||||
|
||||
service.execute
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -41,49 +41,30 @@ describe Clusters::Applications::PatchService do
|
|||
expect(helm_client).to receive(:update).with(update_command).and_raise(error)
|
||||
end
|
||||
|
||||
include_examples 'logs kubernetes errors' do
|
||||
let(:error_name) { 'Kubeclient::HttpError' }
|
||||
let(:error_message) { 'system failure' }
|
||||
let(:error_code) { 500 }
|
||||
end
|
||||
|
||||
it 'make the application errored' do
|
||||
service.execute
|
||||
|
||||
expect(application).to be_update_errored
|
||||
expect(application.status_reason).to match('Kubernetes error: 500')
|
||||
end
|
||||
|
||||
it 'logs errors' do
|
||||
expect(service.send(:logger)).to receive(:error).with(
|
||||
{
|
||||
exception: 'Kubeclient::HttpError',
|
||||
message: 'system failure',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::PatchService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.project_ids,
|
||||
group_ids: [],
|
||||
error_code: 500
|
||||
}
|
||||
)
|
||||
|
||||
expect(Gitlab::Sentry).to receive(:track_acceptable_exception).with(
|
||||
error,
|
||||
extra: {
|
||||
exception: 'Kubeclient::HttpError',
|
||||
message: 'system failure',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::PatchService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.project_ids,
|
||||
group_ids: [],
|
||||
error_code: 500
|
||||
}
|
||||
)
|
||||
|
||||
service.execute
|
||||
end
|
||||
end
|
||||
|
||||
context 'a non kubernetes error happens' do
|
||||
let(:application) { create(:clusters_applications_knative, :scheduled) }
|
||||
let(:error) { StandardError.new('something bad happened') }
|
||||
|
||||
include_examples 'logs kubernetes errors' do
|
||||
let(:error_name) { 'StandardError' }
|
||||
let(:error_message) { 'something bad happened' }
|
||||
let(:error_code) { nil }
|
||||
end
|
||||
|
||||
before do
|
||||
expect(application).to receive(:make_updating!).once.and_raise(error)
|
||||
end
|
||||
|
@ -96,37 +77,6 @@ describe Clusters::Applications::PatchService do
|
|||
expect(application).to be_update_errored
|
||||
expect(application.status_reason).to eq("Can't start update process.")
|
||||
end
|
||||
|
||||
it 'logs errors' do
|
||||
expect(service.send(:logger)).to receive(:error).with(
|
||||
{
|
||||
exception: 'StandardError',
|
||||
error_code: nil,
|
||||
message: 'something bad happened',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::PatchService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.projects.pluck(:id),
|
||||
group_ids: []
|
||||
}
|
||||
)
|
||||
|
||||
expect(Gitlab::Sentry).to receive(:track_acceptable_exception).with(
|
||||
error,
|
||||
extra: {
|
||||
exception: 'StandardError',
|
||||
error_code: nil,
|
||||
message: 'something bad happened',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::PatchService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.projects.pluck(:id),
|
||||
group_ids: []
|
||||
}
|
||||
)
|
||||
|
||||
service.execute
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -41,43 +41,18 @@ describe Clusters::Applications::UpgradeService do
|
|||
expect(helm_client).to receive(:update).with(install_command).and_raise(error)
|
||||
end
|
||||
|
||||
include_examples 'logs kubernetes errors' do
|
||||
let(:error_name) { 'Kubeclient::HttpError' }
|
||||
let(:error_message) { 'system failure' }
|
||||
let(:error_code) { 500 }
|
||||
end
|
||||
|
||||
it 'make the application errored' do
|
||||
service.execute
|
||||
|
||||
expect(application).to be_update_errored
|
||||
expect(application.status_reason).to match('Kubernetes error: 500')
|
||||
end
|
||||
|
||||
it 'logs errors' do
|
||||
expect(service.send(:logger)).to receive(:error).with(
|
||||
{
|
||||
exception: 'Kubeclient::HttpError',
|
||||
message: 'system failure',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::UpgradeService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.project_ids,
|
||||
group_ids: [],
|
||||
error_code: 500
|
||||
}
|
||||
)
|
||||
|
||||
expect(Gitlab::Sentry).to receive(:track_acceptable_exception).with(
|
||||
error,
|
||||
extra: {
|
||||
exception: 'Kubeclient::HttpError',
|
||||
message: 'system failure',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::UpgradeService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.project_ids,
|
||||
group_ids: [],
|
||||
error_code: 500
|
||||
}
|
||||
)
|
||||
|
||||
service.execute
|
||||
end
|
||||
end
|
||||
|
||||
context 'a non kubernetes error happens' do
|
||||
|
@ -88,6 +63,12 @@ describe Clusters::Applications::UpgradeService do
|
|||
expect(application).to receive(:make_updating!).once.and_raise(error)
|
||||
end
|
||||
|
||||
include_examples 'logs kubernetes errors' do
|
||||
let(:error_name) { 'StandardError' }
|
||||
let(:error_message) { 'something bad happened' }
|
||||
let(:error_code) { nil }
|
||||
end
|
||||
|
||||
it 'make the application errored' do
|
||||
expect(helm_client).not_to receive(:update)
|
||||
|
||||
|
@ -96,37 +77,6 @@ describe Clusters::Applications::UpgradeService do
|
|||
expect(application).to be_update_errored
|
||||
expect(application.status_reason).to eq("Can't start upgrade process.")
|
||||
end
|
||||
|
||||
it 'logs errors' do
|
||||
expect(service.send(:logger)).to receive(:error).with(
|
||||
{
|
||||
exception: 'StandardError',
|
||||
error_code: nil,
|
||||
message: 'something bad happened',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::UpgradeService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.projects.pluck(:id),
|
||||
group_ids: []
|
||||
}
|
||||
)
|
||||
|
||||
expect(Gitlab::Sentry).to receive(:track_acceptable_exception).with(
|
||||
error,
|
||||
extra: {
|
||||
exception: 'StandardError',
|
||||
error_code: nil,
|
||||
message: 'something bad happened',
|
||||
backtrace: instance_of(Array),
|
||||
service: 'Clusters::Applications::UpgradeService',
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.projects.pluck(:id),
|
||||
group_ids: []
|
||||
}
|
||||
)
|
||||
|
||||
service.execute
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
shared_examples 'logs kubernetes errors' do
|
||||
let(:error_hash) do
|
||||
{
|
||||
exception: error_name,
|
||||
message: error_message,
|
||||
backtrace: instance_of(Array),
|
||||
service: service.class.name,
|
||||
app_id: application.id,
|
||||
project_ids: application.cluster.project_ids,
|
||||
group_ids: [],
|
||||
error_code: error_code
|
||||
}
|
||||
end
|
||||
|
||||
it 'logs into kubernetes.log and Sentry' do
|
||||
expect(service.send(:logger)).to receive(:error).with(error_hash)
|
||||
|
||||
expect(Gitlab::Sentry).to receive(:track_acceptable_exception).with(
|
||||
error,
|
||||
extra: hash_including(error_hash)
|
||||
)
|
||||
|
||||
service.execute
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue