Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/bin/diagnostic_reports_uploader_spec.rb')
-rw-r--r--spec/bin/diagnostic_reports_uploader_spec.rb86
1 files changed, 86 insertions, 0 deletions
diff --git a/spec/bin/diagnostic_reports_uploader_spec.rb b/spec/bin/diagnostic_reports_uploader_spec.rb
new file mode 100644
index 00000000000..9a929de6d0e
--- /dev/null
+++ b/spec/bin/diagnostic_reports_uploader_spec.rb
@@ -0,0 +1,86 @@
+# frozen_string_literal: true
+
+require 'fast_spec_helper'
+require 'tempfile'
+
+RSpec.describe 'bin/diagnostic-reports-uploader' do
+ let(:reports_dir) { Dir.mktmpdir }
+ let(:gcs_key) { Tempfile.new }
+ let(:gcs_project) { 'test_gcs_project' }
+ let(:gcs_bucket) { 'test_gcs_bucket' }
+
+ after do
+ FileUtils.remove_entry(reports_dir)
+ FileUtils.remove_entry(gcs_key)
+ end
+
+ subject(:load_bin) { load File.expand_path('../../bin/diagnostic-reports-uploader', __dir__) }
+
+ context 'when necessary ENV vars are set' do
+ before do
+ stub_env('GITLAB_DIAGNOSTIC_REPORTS_PATH', reports_dir)
+ stub_env('GITLAB_GCP_KEY_PATH', gcs_key.path)
+ stub_env('GITLAB_DIAGNOSTIC_REPORTS_PROJECT', gcs_project)
+ stub_env('GITLAB_DIAGNOSTIC_REPORTS_BUCKET', gcs_bucket)
+ end
+
+ let(:reports_uploader) { instance_double(Gitlab::Memory::ReportsUploader) }
+ let(:upload_and_cleanup_reports) { instance_double(Gitlab::Memory::UploadAndCleanupReports) }
+ let(:logger) { instance_double(Gitlab::Memory::DiagnosticReportsLogger) }
+
+ it 'runs successfully' do
+ expect(Gitlab::Memory::DiagnosticReportsLogger).to receive(:new).and_return(logger)
+
+ expect(Gitlab::Memory::ReportsUploader)
+ .to receive(:new).with(gcs_key: gcs_key.path, gcs_project: gcs_project, gcs_bucket: gcs_bucket, logger: logger)
+ .and_return(reports_uploader)
+
+ expect(Gitlab::Memory::UploadAndCleanupReports)
+ .to receive(:new).with(uploader: reports_uploader, reports_path: reports_dir, logger: logger)
+ .and_return(upload_and_cleanup_reports)
+
+ expect(upload_and_cleanup_reports).to receive(:call)
+
+ load_bin
+ end
+ end
+
+ context 'when GITLAB_DIAGNOSTIC_REPORTS_PATH is missing' do
+ it 'raises RuntimeError' do
+ expect { load_bin }.to raise_error(RuntimeError, 'GITLAB_DIAGNOSTIC_REPORTS_PATH dir is missing')
+ end
+ end
+
+ context 'when GITLAB_GCP_KEY_PATH is missing' do
+ before do
+ stub_env('GITLAB_DIAGNOSTIC_REPORTS_PATH', reports_dir)
+ end
+
+ it 'raises RuntimeError' do
+ expect { load_bin }.to raise_error(RuntimeError, /GCS keyfile not found/)
+ end
+ end
+
+ context 'when GITLAB_DIAGNOSTIC_REPORTS_PROJECT is missing' do
+ before do
+ stub_env('GITLAB_DIAGNOSTIC_REPORTS_PATH', reports_dir)
+ stub_env('GITLAB_GCP_KEY_PATH', gcs_key.path)
+ end
+
+ it 'raises RuntimeError' do
+ expect { load_bin }.to raise_error(RuntimeError, 'GITLAB_DIAGNOSTIC_REPORTS_PROJECT is missing')
+ end
+ end
+
+ context 'when GITLAB_DIAGNOSTIC_REPORTS_BUCKET is missing' do
+ before do
+ stub_env('GITLAB_DIAGNOSTIC_REPORTS_PATH', reports_dir)
+ stub_env('GITLAB_GCP_KEY_PATH', gcs_key.path)
+ stub_env('GITLAB_DIAGNOSTIC_REPORTS_PROJECT', gcs_project)
+ end
+
+ it 'raises RuntimeError' do
+ expect { load_bin }.to raise_error(RuntimeError, 'GITLAB_DIAGNOSTIC_REPORTS_BUCKET is missing')
+ end
+ end
+end