discourse/lib/tasks/smoke_test.rake
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

55 lines
1.4 KiB
Ruby

# frozen_string_literal: true
desc "run chrome headless smoke tests on current build"
task "smoke:test" do
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
system("yarn install --dev")
url = ENV["URL"]
if !url
require "#{Rails.root}/config/environment"
url = Discourse.base_url
end
puts "Testing: #{url}"
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)
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(request)
end
if response.code != "200"
raise "TRIVIAL GET FAILED WITH #{response.code}"
end
results = ""
IO.popen("node #{Rails.root}/test/smoke_test.js #{url}").each do |line|
puts line
results << line
end
if results !~ /ALL PASSED/
raise "FAILED"
end
end