2019-05-02 17:17:27 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-12-19 01:59:41 -06:00
|
|
|
desc "run chrome headless smoke tests on current build"
|
2014-06-19 19:55:16 -05:00
|
|
|
task "smoke:test" do
|
2019-06-07 11:20:48 -05:00
|
|
|
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")
|
2017-12-19 01:59:41 -06:00
|
|
|
abort "Chrome is not installed. Download from https://www.google.com/chrome/browser/desktop/index.html"
|
|
|
|
end
|
|
|
|
|
2019-06-07 11:20:48 -05:00
|
|
|
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."
|
2017-12-19 01:59:41 -06:00
|
|
|
end
|
2013-02-20 23:01:18 -06:00
|
|
|
|
2018-06-05 05:46:41 -05:00
|
|
|
system("yarn install --dev")
|
|
|
|
|
2014-06-19 19:55:16 -05:00
|
|
|
url = ENV["URL"]
|
|
|
|
if !url
|
|
|
|
require "#{Rails.root}/config/environment"
|
|
|
|
url = Discourse.base_url
|
|
|
|
end
|
2013-02-25 10:42:20 -06:00
|
|
|
|
2013-02-20 23:01:18 -06:00
|
|
|
puts "Testing: #{url}"
|
2013-02-20 23:37:17 -06:00
|
|
|
|
|
|
|
require 'open-uri'
|
|
|
|
require 'net/http'
|
|
|
|
|
2017-05-17 06:24:43 -05:00
|
|
|
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
|
|
|
|
|
2018-05-30 03:20:18 -05:00
|
|
|
dir = ENV["SMOKE_TEST_SCREENSHOT_PATH"] || 'tmp/smoke-test-screenshots'
|
2018-05-30 02:59:07 -05:00
|
|
|
FileUtils.mkdir_p(dir) unless Dir.exists?(dir)
|
|
|
|
|
2019-05-20 02:22:50 -05:00
|
|
|
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
|
2018-06-10 19:47:32 -05:00
|
|
|
end
|
|
|
|
|
2019-05-20 02:22:50 -05:00
|
|
|
if !success
|
|
|
|
raise "TRIVIAL GET FAILED WITH #{code}: retried #{retries} times"
|
2013-02-20 23:37:17 -06:00
|
|
|
end
|
|
|
|
|
2019-05-12 22:21:56 -05:00
|
|
|
results = +""
|
2017-12-18 02:32:58 -06:00
|
|
|
|
2019-10-24 08:10:18 -05:00
|
|
|
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 01:57:23 -05:00
|
|
|
puts line
|
|
|
|
results << line
|
|
|
|
end
|
2013-02-20 23:01:18 -06:00
|
|
|
|
|
|
|
if results !~ /ALL PASSED/
|
|
|
|
raise "FAILED"
|
|
|
|
end
|
2013-02-20 19:07:22 -06:00
|
|
|
end
|