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 'qa/spec/support/formatters/test_stats_formatter_spec.rb')
-rw-r--r--qa/spec/support/formatters/test_stats_formatter_spec.rb171
1 files changed, 171 insertions, 0 deletions
diff --git a/qa/spec/support/formatters/test_stats_formatter_spec.rb b/qa/spec/support/formatters/test_stats_formatter_spec.rb
new file mode 100644
index 00000000000..fec7ec1c7c0
--- /dev/null
+++ b/qa/spec/support/formatters/test_stats_formatter_spec.rb
@@ -0,0 +1,171 @@
+# frozen_string_literal: true
+
+require 'rspec/core/sandbox'
+
+describe QA::Support::Formatters::TestStatsFormatter do
+ include QA::Support::Helpers::StubEnv
+ include QA::Specs::Helpers::RSpec
+
+ let(:url) { "http://influxdb.net" }
+ let(:token) { "token" }
+ let(:ci_timestamp) { "2021-02-23T20:58:41Z" }
+ let(:ci_job_name) { "test-job 1/5" }
+ let(:ci_job_url) { "url" }
+ let(:ci_pipeline_url) { "url" }
+ let(:ci_pipeline_id) { "123" }
+ let(:run_type) { 'staging-full' }
+ let(:reliable) { 'false' }
+ let(:quarantined) { 'false' }
+ let(:influx_client) { instance_double('InfluxDB2::Client', create_write_api: influx_write_api) }
+ let(:influx_write_api) { instance_double('InfluxDB2::WriteApi', write: nil) }
+
+ let(:influx_client_args) do
+ {
+ bucket: 'e2e-test-stats',
+ org: 'gitlab-qa',
+ use_ssl: false,
+ precision: InfluxDB2::WritePrecision::NANOSECOND
+ }
+ end
+
+ let(:data) do
+ {
+ name: 'test-stats',
+ time: DateTime.strptime(ci_timestamp).to_time,
+ tags: {
+ name: 'stats export spec',
+ file_path: './spec/support/formatters/test_stats_formatter_spec.rb',
+ status: :passed,
+ reliable: reliable,
+ quarantined: quarantined,
+ retried: "false",
+ job_name: "test-job",
+ merge_request: "false",
+ run_type: run_type
+ },
+ fields: {
+ id: './spec/support/formatters/test_stats_formatter_spec.rb[1:1]',
+ run_time: 0,
+ retry_attempts: 0,
+ job_url: ci_job_url,
+ pipeline_url: ci_pipeline_url,
+ pipeline_id: ci_pipeline_id
+ }
+ }
+ end
+
+ def run_spec(&spec)
+ spec ||= -> { it('spec') {} }
+
+ describe_successfully('stats export', &spec)
+ send_stop_notification
+ end
+
+ around do |example|
+ RSpec::Core::Sandbox.sandboxed do |config|
+ config.formatter = QA::Support::Formatters::TestStatsFormatter
+
+ config.before(:context) { RSpec.current_example = nil }
+
+ example.run
+ end
+ end
+
+ before do
+ allow(InfluxDB2::Client).to receive(:new).with(url, token, **influx_client_args) { influx_client }
+ end
+
+ context "without influxdb variables configured" do
+ it "skips export without influxdb url" do
+ stub_env('QA_INFLUXDB_URL', nil)
+ stub_env('QA_INFLUXDB_TOKEN', nil)
+
+ run_spec
+
+ expect(influx_client).not_to have_received(:create_write_api)
+ end
+
+ it "skips export without influxdb token" do
+ stub_env('QA_INFLUXDB_URL', url)
+ stub_env('QA_INFLUXDB_TOKEN', nil)
+
+ run_spec
+
+ expect(influx_client).not_to have_received(:create_write_api)
+ end
+ end
+
+ context 'with influxdb variables configured' do
+ let(:spec_name) { 'exports data' }
+ let(:run_type) { ci_job_name.gsub(%r{ \d{1,2}/\d{1,2}}, '') }
+
+ before do
+ stub_env('QA_INFLUXDB_URL', url)
+ stub_env('QA_INFLUXDB_TOKEN', token)
+ stub_env('CI_PIPELINE_CREATED_AT', ci_timestamp)
+ stub_env('CI_JOB_URL', ci_job_url)
+ stub_env('CI_JOB_NAME', ci_job_name)
+ stub_env('CI_PIPELINE_URL', ci_pipeline_url)
+ stub_env('CI_PIPELINE_ID', ci_pipeline_id)
+ stub_env('CI_MERGE_REQUEST_IID', nil)
+ stub_env('TOP_UPSTREAM_MERGE_REQUEST_IID', nil)
+ stub_env('QA_RUN_TYPE', run_type)
+ end
+
+ context 'with reliable spec' do
+ let(:reliable) { 'true' }
+
+ it 'exports data to influxdb with correct reliable tag' do
+ run_spec do
+ it('spec', :reliable) {}
+ end
+
+ expect(influx_write_api).to have_received(:write).with(data: [data])
+ end
+ end
+
+ context 'with quarantined spec' do
+ let(:quarantined) { 'true' }
+
+ it 'exports data to influxdb with correct quarantine tag' do
+ run_spec do
+ it('spec', :quarantine) {}
+ end
+
+ expect(influx_write_api).to have_received(:write).with(data: [data])
+ end
+ end
+
+ context 'with staging full run' do
+ let(:run_type) { 'staging-full' }
+
+ before do
+ stub_env('CI_PROJECT_NAME', 'staging')
+ stub_env('QA_RUN_TYPE', nil)
+ end
+
+ it 'exports data to influxdb with correct run type' do
+ run_spec
+
+ expect(influx_write_api).to have_received(:write).with(data: [data])
+ end
+ end
+
+ context 'with staging sanity no admin' do
+ let(:run_type) { 'staging-sanity-no-admin' }
+
+ before do
+ stub_env('CI_PROJECT_NAME', 'staging')
+ stub_env('NO_ADMIN', 'true')
+ stub_env('SMOKE_ONLY', 'true')
+ stub_env('QA_RUN_TYPE', nil)
+ end
+
+ it 'exports data to influxdb with correct run type' do
+ run_spec
+
+ expect(influx_write_api).to have_received(:write).with(data: [data])
+ end
+ end
+ end
+end