discourse/lib/tasks/smoke_test.rake

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

85 lines
2.0 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
desc "run chrome headless smoke tests on current build"
task "smoke:test" do
if RbConfig::CONFIG['host_os'][/darwin|mac os/]
google_chrome_cli = "/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
else
google_chrome_cli = "google-chrome"
end
unless system("command -v \"#{google_chrome_cli}\" >/dev/null")
abort "Chrome is not installed. Download from https://www.google.com/chrome/browser/desktop/index.html"
end
if Gem::Version.new(`\"#{google_chrome_cli}\" --version`.match(/[\d\.]+/)[0]) < Gem::Version.new("59")
abort "Chrome 59 or higher is required to run tests in headless mode."
end
2013-02-21 00:01:18 -05:00
system("yarn install --dev")
url = ENV["URL"]
if !url
require "#{Rails.root}/config/environment"
url = Discourse.base_url
end
2013-02-25 11:42:20 -05:00
2013-02-21 00:01:18 -05:00
puts "Testing: #{url}"
2013-02-21 00:37:17 -05:00
require 'open-uri'
require 'net/http'
uri = URI(url)
request = Net::HTTP::Get.new(uri)
if ENV["AUTH_USER"] && ENV["AUTH_PASSWORD"]
request.basic_auth(ENV['AUTH_USER'], ENV['AUTH_PASSWORD'])
end
dir = ENV["SMOKE_TEST_SCREENSHOT_PATH"] || 'tmp/smoke-test-screenshots'
FileUtils.mkdir_p(dir) unless Dir.exists?(dir)
wait = ENV["WAIT_FOR_URL"].to_i
success = false
code = nil
retries = 0
loop do
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(request)
end
success = response.code == "200"
code = response.code
if !success && wait > 0
sleep 5
wait -= 5
retries += 1
else
break
end
end
if !success
raise "TRIVIAL GET FAILED WITH #{code}: retried #{retries} times"
2013-02-21 00:37:17 -05:00
end
2019-05-12 23:21:56 -04:00
results = +""
node_arguments = []
node_arguments << '--inspect-brk' if ENV["DEBUG_NODE"]
node_arguments << "#{Rails.root}/test/smoke_test.js"
node_arguments << url
IO.popen("node #{node_arguments.join(' ')}").each do |line|
2014-04-10 02:57:23 -04:00
puts line
results << line
end
2013-02-21 00:01:18 -05:00
if results !~ /ALL PASSED/
raise "FAILED"
end
2013-02-20 20:07:22 -05:00
end