Skip to content
代码片段 群组 项目
未验证 提交 7b9b1d26 编辑于 作者: Andrejs Cunskis's avatar Andrejs Cunskis 提交者: GitLab
浏览文件

Improve gitlab readiness check in e2e tests

Update log message

Skip attempt number logging
上级 c416b0c4
No related branches found
No related tags found
无相关合并请求
......@@ -9,6 +9,8 @@ module Tools
class ReadinessCheck
include Support::API
ReadinessCheckError = Class.new(StandardError)
def self.perform(wait: 60)
new(wait: wait).perform
end
......@@ -21,22 +23,14 @@ def initialize(wait:)
#
# @return [void]
def perform
error = nil
info("Waiting for Gitlab to become ready!")
Support::Retrier.retry_until(max_duration: wait, sleep_interval: 1, raise_on_failure: false, log: false) do
result = !required_elements_missing?
error = nil
debug("Checking required element presence on sign-in page")
result
rescue StandardError => e
error = "#{error_base} #{e.message}"
false
end
raise error if error
wait_for_login_page_to_load
info("Gitlab is ready!")
rescue StandardError => e
raise ReadinessCheckError, "#{error_base} Reason: #{e}"
end
private
......@@ -66,40 +60,23 @@ def elements_css
@element_css ||= QA::Page::Main::Login.elements.select(&:required?).map(&:selector_css)
end
# Check for missing required elements on sign-in page
# Check if sign_in page loads with all required elements
#
# @return [Boolean]
def required_elements_missing?
debug("Checking for required element presence on '#{url}'")
# @return [void]
def wait_for_login_page_to_load
# Do not perform headless request on .com due to cloudfare
return rendered_elements_missing? if Runtime::Env.running_on_dot_com?
response = get(url)
unless ok_response?(response)
msg = "Got unsucessfull response code: #{response.code}"
debug(msg) && raise(msg)
if Runtime::Env.running_on_dot_com?
debug("Checking for required elements via web browser")
return Capybara.current_session.using_wait_time(wait) { Runtime::Browser.visit(:gitlab, Page::Main::Login) }
end
unless required_elements_present?(response)
msg = "Sign in page missing required elements: '#{elements_css}'"
debug(msg) && raise(msg)
end
Support::Retrier.retry_on_exception(max_attempts: wait, sleep_interval: 1, log: false) do
response = get(url)
raise "Got unsucessfull response code from #{url}: #{response.code}" unless ok_response?(response)
raise "Sign in page missing required elements: '#{elements_css}'" unless required_elements_present?(response)
end
debug("Required elements are present!")
false
end
# Perform check for present elements via web browser
#
# @return [Boolean]
def rendered_elements_missing?
debug("Checking for required elements via web browser")
Runtime::Browser.visit(:gitlab, Page::Main::Login)
false
rescue StandardError => e
debug("Sign in page did not render fully")
raise(e)
end
# Validate response code is 200
......
......@@ -5,7 +5,7 @@
let(:url) { "example.com" }
let(:wait) { 1 }
let(:msg_base) { "Gitlab readiness check failed, valid sign_in page did not appear within #{wait} seconds!" }
let(:msg_base) { "Gitlab readiness check failed, valid sign_in page did not appear within #{wait} seconds! Reason:" }
let(:dot_com) { false }
let(:response) { instance_double(RestClient::Response, code: code, body: body) }
......@@ -13,6 +13,7 @@
let(:body) { "" }
before do
allow(Capybara).to receive_message_chain("current_session.using_wait_time").and_yield
allow(QA::Runtime::Env).to receive(:running_on_dot_com?).and_return(dot_com)
allow(QA::Support::GitlabAddress).to receive(:address_with_port).with(with_default_port: false).and_return(url)
allow(readiness_check).to receive(:get).with("#{url}/users/sign_in").and_return(response)
......@@ -51,7 +52,7 @@
it "raises an error on validation" do
expect { readiness_check.perform }.to raise_error(
"#{msg_base} Got unsucessfull response code: #{code}"
"#{msg_base} Got unsucessfull response code from #{url}/users/sign_in: #{code}"
)
end
end
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册