Commit 5d32a7a1 authored by GitLab Bot's avatar GitLab Bot

Add latest changes from gitlab-org/gitlab@master

parent d74fcc9b
......@@ -221,14 +221,12 @@ Gitlab/DuplicateSpecLocation:
- ee/spec/services/merge_requests/create_service_spec.rb
- ee/spec/services/merge_requests/refresh_service_spec.rb
- ee/spec/services/merge_requests/update_service_spec.rb
- ee/spec/services/system_hooks_service_spec.rb
- ee/spec/helpers/ee/auth_helper_spec.rb
- ee/spec/models/ee/namespace_spec.rb
- ee/spec/services/ee/issues/create_service_spec.rb
- ee/spec/services/ee/merge_requests/create_service_spec.rb
- ee/spec/services/ee/merge_requests/refresh_service_spec.rb
- ee/spec/services/ee/merge_requests/update_service_spec.rb
- ee/spec/services/ee/system_hooks_service_spec.rb
Cop/InjectEnterpriseEditionModule:
Enabled: true
......
......@@ -12,20 +12,19 @@ module Gitlab
attr_reader :name, :classname, :execution_time, :status, :file, :system_output, :stack_trace, :key, :attachment, :job
# rubocop: disable Metrics/ParameterLists
def initialize(name:, classname:, execution_time:, status:, file: nil, system_output: nil, stack_trace: nil, attachment: nil, job: nil)
@name = name
@classname = classname
@file = file
@execution_time = execution_time.to_f
@status = status
@system_output = system_output
@stack_trace = stack_trace
def initialize(params)
@name = params.fetch(:name)
@classname = params.fetch(:classname)
@file = params.fetch(:file, nil)
@execution_time = params.fetch(:execution_time).to_f
@status = params.fetch(:status)
@system_output = params.fetch(:system_output, nil)
@stack_trace = params.fetch(:stack_trace, nil)
@attachment = params.fetch(:attachment, nil)
@job = params.fetch(:job, nil)
@key = sanitize_key_name("#{classname}_#{name}")
@attachment = attachment
@job = job
end
# rubocop: enable Metrics/ParameterLists
def has_attachment?
attachment.present?
......
......@@ -16,6 +16,10 @@ module QA
def_delegators :evaluator, :view, :views
def initialize
@retry_later_backoff = QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME
end
def assert_no_element(name)
assert_no_selector(element_selector_css(name))
end
......@@ -259,6 +263,19 @@ module QA
visit find_element(name)['href']
end
def wait_if_retry_later
return if @retry_later_backoff > QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME * 5
if has_css?('body', text: 'Retry later', wait: 0)
QA::Runtime::Logger.warn("`Retry later` error occurred. Sleeping for #{@retry_later_backoff} seconds...")
sleep @retry_later_backoff
refresh
@retry_later_backoff += QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME
wait_if_retry_later
end
end
def self.path
raise NotImplementedError
end
......
......@@ -152,6 +152,8 @@ module QA
private
def sign_in_using_gitlab_credentials(user:, skip_page_validation: false)
wait_if_retry_later
switch_to_sign_in_tab if has_sign_in_tab?
switch_to_standard_tab if has_standard_tab?
......
......@@ -77,6 +77,8 @@ module QA
def sign_out
retry_until do
wait_if_retry_later
break true unless signed_in?
within_user_menu do
......
......@@ -8,6 +8,8 @@ module QA
def validate_elements_present!
base_page = self.new
base_page.wait_if_retry_later
elements.each do |element|
next unless element.required?
......
......@@ -43,6 +43,10 @@ module QA
ENV['GITLAB_QA_ADMIN_ACCESS_TOKEN']
end
def ci_project_name
ENV['CI_PROJECT_NAME']
end
def debug?
enabled?(ENV['QA_DEBUG'], default: false)
end
......
......@@ -63,8 +63,9 @@ RSpec.configure do |config|
config.display_try_failure_messages = true
if ENV['CI'] && !QA::Runtime::Env.disable_rspec_retry?
non_quarantine_retries = QA::Runtime::Env.ci_project_name =~ /staging|canary|production/ ? 3 : 2
config.around do |example|
retry_times = example.metadata.key?(:quarantine) ? 1 : 2
retry_times = example.metadata.key?(:quarantine) ? 1 : non_quarantine_retries
example.run_with_retry retry: retry_times
end
end
......
......@@ -6,17 +6,18 @@ FactoryBot.define do
classname { "trace" }
file { "spec/trace_spec.rb" }
execution_time { 1.23 }
status { "success" }
status { Gitlab::Ci::Reports::TestCase::STATUS_SUCCESS }
system_output { nil }
attachment { nil }
association :job, factory: :ci_build
trait :failed do
status { "failed" }
status { Gitlab::Ci::Reports::TestCase::STATUS_FAILED }
system_output { "Failure/Error: is_expected.to eq(300) expected: 300 got: -100" }
end
trait :with_attachment do
status { "failed" }
status { Gitlab::Ci::Reports::TestCase::STATUS_FAILED }
attachment { "some/path.png" }
end
......
......@@ -4,21 +4,12 @@ require 'spec_helper'
describe Gitlab::Ci::Reports::TestCase do
describe '#initialize' do
let(:test_case) { described_class.new(**params)}
let(:test_case) { described_class.new(params)}
context 'when both classname and name are given' do
context 'when test case is passed' do
let(:params) do
{
name: 'test-1',
classname: 'trace',
file: 'spec/trace_spec.rb',
execution_time: 1.23,
status: described_class::STATUS_SUCCESS,
system_output: nil,
job: build(:ci_build)
}
end
let(:job) { build(:ci_build) }
let(:params) { attributes_for(:test_case).merge!(job: job) }
it 'initializes an instance' do
expect { test_case }.not_to raise_error
......@@ -34,16 +25,8 @@ describe Gitlab::Ci::Reports::TestCase do
end
context 'when test case is failed' do
let(:params) do
{
name: 'test-1',
classname: 'trace',
file: 'spec/trace_spec.rb',
execution_time: 1.23,
status: described_class::STATUS_FAILED,
system_output: "Failure/Error: is_expected.to eq(300) expected: 300 got: -100"
}
end
let(:job) { build(:ci_build) }
let(:params) { attributes_for(:test_case, :failed).merge!(job: job) }
it 'initializes an instance' do
expect { test_case }.not_to raise_error
......@@ -59,36 +42,23 @@ describe Gitlab::Ci::Reports::TestCase do
end
end
context 'when classname is missing' do
let(:params) do
{
name: 'test-1',
file: 'spec/trace_spec.rb',
execution_time: 1.23,
status: described_class::STATUS_SUCCESS,
system_output: nil
}
end
shared_examples 'param is missing' do |param|
let(:job) { build(:ci_build) }
let(:params) { attributes_for(:test_case).merge!(job: job) }
it 'raises an error' do
expect { test_case }.to raise_error(ArgumentError)
params.delete(param)
expect { test_case }.to raise_error(KeyError)
end
end
context 'when name is missing' do
let(:params) do
{
classname: 'trace',
file: 'spec/trace_spec.rb',
execution_time: 1.23,
status: described_class::STATUS_SUCCESS,
system_output: nil
}
end
context 'when classname is missing' do
it_behaves_like 'param is missing', :classname
end
it 'raises an error' do
expect { test_case }.to raise_error(ArgumentError)
end
context 'when name is missing' do
it_behaves_like 'param is missing', :name
end
context 'when attachment is present' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment