diff options
Diffstat (limited to 'spec/services/clusters/applications/install_service_spec.rb')
-rw-r--r-- | spec/services/clusters/applications/install_service_spec.rb | 70 |
1 files changed, 67 insertions, 3 deletions
diff --git a/spec/services/clusters/applications/install_service_spec.rb b/spec/services/clusters/applications/install_service_spec.rb index 2f801d019fe..018d9822d3e 100644 --- a/spec/services/clusters/applications/install_service_spec.rb +++ b/spec/services/clusters/applications/install_service_spec.rb @@ -33,8 +33,9 @@ describe Clusters::Applications::InstallService do end context 'when k8s cluster communication fails' do + let(:error) { Kubeclient::HttpError.new(500, 'system failure', nil) } + before do - error = Kubeclient::HttpError.new(500, 'system failure', nil) expect(helm_client).to receive(:install).with(install_command).and_raise(error) end @@ -44,18 +45,81 @@ describe Clusters::Applications::InstallService do 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', + 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: { + exception: 'Kubeclient::HttpError', + message: 'system failure', + service: 'Clusters::Applications::InstallService', + app_id: application.id, + project_ids: application.cluster.project_ids, + group_ids: [], + error_code: 500 + } + ) + + service.execute + end end - context 'when application cannot be persisted' do + context 'a non kubernetes error happens' do let(:application) { create(:clusters_applications_helm, :scheduled) } + let(:error) { StandardError.new("something bad happened") } + + before do + expect(application).to receive(:make_installing!).once.and_raise(error) + end it 'make the application errored' do - expect(application).to receive(:make_installing!).once.and_raise(ActiveRecord::RecordInvalid) expect(helm_client).not_to receive(:install) service.execute 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', + 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: { + exception: 'StandardError', + error_code: nil, + message: 'something bad happened', + service: 'Clusters::Applications::InstallService', + app_id: application.id, + project_ids: application.cluster.projects.pluck(:id), + group_ids: [] + } + ) + + service.execute end end end |