2017-12-19 15:59:41 +08:00
|
|
|
desc "run chrome headless smoke tests on current build"
|
2014-06-20 08:55:16 +08:00
|
|
|
task "smoke:test" do
|
2017-12-19 15:59:41 +08:00
|
|
|
unless system("command -v google-chrome >/dev/null;")
|
|
|
|
abort "Chrome is not installed. Download from https://www.google.com/chrome/browser/desktop/index.html"
|
|
|
|
end
|
|
|
|
|
|
|
|
if Gem::Version.new(`$(command -v google-chrome) --version`.match(/[\d\.]+/)[0]) < Gem::Version.new("59")
|
|
|
|
abort "Chrome 59 or higher is required to run smoke tests in headless mode."
|
|
|
|
end
|
2013-02-21 13:01:18 +08:00
|
|
|
|
2014-06-20 08:55:16 +08:00
|
|
|
url = ENV["URL"]
|
|
|
|
if !url
|
|
|
|
require "#{Rails.root}/config/environment"
|
|
|
|
url = Discourse.base_url
|
|
|
|
end
|
2013-02-26 00:42:20 +08:00
|
|
|
|
2013-02-21 13:01:18 +08:00
|
|
|
puts "Testing: #{url}"
|
2013-02-21 13:37:17 +08:00
|
|
|
|
|
|
|
require 'open-uri'
|
|
|
|
require 'net/http'
|
|
|
|
|
2017-05-17 19:24:43 +08: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 15:59:07 +08:00
|
|
|
dir = 'tmp/smoke-test-screenshots'
|
|
|
|
FileUtils.mkdir_p(dir) unless Dir.exists?(dir)
|
|
|
|
|
2018-05-15 20:40:33 +08:00
|
|
|
start = Time.now
|
|
|
|
while true
|
|
|
|
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
|
|
|
|
http.request(request)
|
|
|
|
end
|
|
|
|
|
|
|
|
break if response.code == "200"
|
|
|
|
|
|
|
|
# retry for up to 5 minutes
|
|
|
|
if Time.now - start < 300
|
|
|
|
puts "Connection failed with #{response.code}. Retrying in 5 seconds..."
|
|
|
|
sleep(5)
|
|
|
|
else
|
|
|
|
raise "TRIVIAL GET FAILED WITH #{response.code}"
|
|
|
|
end
|
2013-02-21 13:37:17 +08:00
|
|
|
end
|
|
|
|
|
2014-04-10 14:57:23 +08:00
|
|
|
results = ""
|
2017-12-18 16:32:58 +08:00
|
|
|
|
2017-12-20 14:49:41 +08:00
|
|
|
IO.popen("node #{Rails.root}/test/smoke_test.js #{url}").each do |line|
|
2014-04-10 14:57:23 +08:00
|
|
|
puts line
|
|
|
|
results << line
|
|
|
|
end
|
2013-02-21 13:01:18 +08:00
|
|
|
|
|
|
|
if results !~ /ALL PASSED/
|
|
|
|
raise "FAILED"
|
|
|
|
end
|
2013-02-21 09:07:22 +08:00
|
|
|
end
|