tests: run in parallel
This commit is contained in:
parent
e22610aedd
commit
d3740ec34f
@ -6,7 +6,7 @@ require "tap"
|
|||||||
|
|
||||||
module Homebrew
|
module Homebrew
|
||||||
def tests
|
def tests
|
||||||
(HOMEBREW_LIBRARY/"Homebrew/test").cd do
|
(HOMEBREW_LIBRARY/"Homebrew").cd do
|
||||||
ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1"
|
ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1"
|
||||||
ENV["HOMEBREW_DEVELOPER"] = "1"
|
ENV["HOMEBREW_DEVELOPER"] = "1"
|
||||||
ENV["TESTOPTS"] = "-v" if ARGV.verbose?
|
ENV["TESTOPTS"] = "-v" if ARGV.verbose?
|
||||||
@ -19,9 +19,11 @@ module Homebrew
|
|||||||
|
|
||||||
if ARGV.include? "--coverage"
|
if ARGV.include? "--coverage"
|
||||||
ENV["HOMEBREW_TESTS_COVERAGE"] = "1"
|
ENV["HOMEBREW_TESTS_COVERAGE"] = "1"
|
||||||
FileUtils.rm_f "coverage/.resultset.json"
|
FileUtils.rm_f "test/coverage/.resultset.json"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
ENV["BUNDLE_GEMFILE"] = "#{Dir.pwd}/test/Gemfile"
|
||||||
|
|
||||||
# Override author/committer as global settings might be invalid and thus
|
# Override author/committer as global settings might be invalid and thus
|
||||||
# will cause silent failure during the setup of dummy Git repositories.
|
# will cause silent failure during the setup of dummy Git repositories.
|
||||||
%w[AUTHOR COMMITTER].each do |role|
|
%w[AUTHOR COMMITTER].each do |role|
|
||||||
@ -37,16 +39,18 @@ module Homebrew
|
|||||||
# Make it easier to reproduce test runs.
|
# Make it easier to reproduce test runs.
|
||||||
ENV["SEED"] = ARGV.next if ARGV.include? "--seed"
|
ENV["SEED"] = ARGV.next if ARGV.include? "--seed"
|
||||||
|
|
||||||
|
files = Dir["test/test_*.rb"]
|
||||||
|
files -= Dir["test/test_os_mac_*.rb"] unless OS.mac?
|
||||||
args = []
|
args = []
|
||||||
args << "--trace" if ARGV.include? "--trace"
|
args << "--trace" if ARGV.include? "--trace"
|
||||||
if ARGV.value("only")
|
if ARGV.value("only")
|
||||||
ENV["HOMEBREW_TESTS_ONLY"] = "1"
|
ENV["HOMEBREW_TESTS_ONLY"] = "1"
|
||||||
test_name, test_method = ARGV.value("only").split("/", 2)
|
test_name, test_method = ARGV.value("only").split("/", 2)
|
||||||
args << "TEST=test_#{test_name}.rb"
|
files = ["test/test_#{test_name}.rb"]
|
||||||
args << "TESTOPTS=--name=test_#{test_method}" if test_method
|
args << "--name=test_#{test_method}" if test_method
|
||||||
end
|
end
|
||||||
args += ARGV.named.select { |v| v[/^TEST(OPTS)?=/] }
|
args += ARGV.named.select { |v| v[/^TEST(OPTS)?=/] }
|
||||||
system "bundle", "exec", "rake", "test", *args
|
system "bundle", "exec", "parallel_test", "--", *args, "--", *files
|
||||||
|
|
||||||
Homebrew.failed = !$?.success?
|
Homebrew.failed = !$?.success?
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@ source "https://rubygems.org"
|
|||||||
gem "mocha", "~> 1.1"
|
gem "mocha", "~> 1.1"
|
||||||
gem "minitest", "~> 5.3"
|
gem "minitest", "~> 5.3"
|
||||||
gem "rake", "~> 10.3"
|
gem "rake", "~> 10.3"
|
||||||
|
gem "parallel_tests", "~> 2.9"
|
||||||
|
|
||||||
group :coverage do
|
group :coverage do
|
||||||
# This is SimpleCov v0.12.0 with one PR merged on top, that finally resolves
|
# This is SimpleCov v0.12.0 with one PR merged on top, that finally resolves
|
||||||
|
|||||||
@ -21,6 +21,9 @@ GEM
|
|||||||
minitest (5.9.0)
|
minitest (5.9.0)
|
||||||
mocha (1.1.0)
|
mocha (1.1.0)
|
||||||
metaclass (~> 0.0.1)
|
metaclass (~> 0.0.1)
|
||||||
|
parallel (1.9.0)
|
||||||
|
parallel_tests (2.9.0)
|
||||||
|
parallel
|
||||||
rake (10.5.0)
|
rake (10.5.0)
|
||||||
simplecov-html (0.10.0)
|
simplecov-html (0.10.0)
|
||||||
url (0.3.2)
|
url (0.3.2)
|
||||||
@ -32,8 +35,9 @@ DEPENDENCIES
|
|||||||
codecov
|
codecov
|
||||||
minitest (~> 5.3)
|
minitest (~> 5.3)
|
||||||
mocha (~> 1.1)
|
mocha (~> 1.1)
|
||||||
|
parallel_tests (~> 2.9)
|
||||||
rake (~> 10.3)
|
rake (~> 10.3)
|
||||||
simplecov (= 0.12.0)!
|
simplecov (= 0.12.0)!
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
1.12.5
|
1.13.1
|
||||||
|
|||||||
@ -1,29 +0,0 @@
|
|||||||
require "rake"
|
|
||||||
require "rake/testtask"
|
|
||||||
|
|
||||||
def mac?
|
|
||||||
return false if ENV["HOMEBREW_TEST_GENERIC_OS"]
|
|
||||||
RUBY_PLATFORM.to_s.downcase.include? "darwin"
|
|
||||||
end
|
|
||||||
|
|
||||||
TEST_DIRECTORY = File.dirname(File.expand_path(__FILE__))
|
|
||||||
TEST_FILES = Dir["#{TEST_DIRECTORY}/test_*.rb"].reject do |f|
|
|
||||||
f.include?("/test_os_mac_") && !mac?
|
|
||||||
end
|
|
||||||
|
|
||||||
task default: :test
|
|
||||||
|
|
||||||
Rake::TestTask.new(:test) do |t|
|
|
||||||
t.libs << TEST_DIRECTORY
|
|
||||||
t.test_files = TEST_FILES
|
|
||||||
end
|
|
||||||
|
|
||||||
namespace :test do
|
|
||||||
TEST_FILES.each do |file|
|
|
||||||
name = file[/test_(.+)\.rb/, 1]
|
|
||||||
Rake::TestTask.new(name) do |t|
|
|
||||||
t.libs << TEST_DIRECTORY
|
|
||||||
t.test_files = [file]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@ -91,26 +91,29 @@ class InreplaceTest < Homebrew::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_inreplace_errors
|
def test_inreplace_errors
|
||||||
|
require "tempfile"
|
||||||
extend(Utils::Inreplace)
|
extend(Utils::Inreplace)
|
||||||
|
|
||||||
open("test", "w") { |f| f.write "a\nb\nc\n" }
|
file = Tempfile.new("test")
|
||||||
|
|
||||||
|
file.write "a\nb\nc\n"
|
||||||
|
|
||||||
assert_raises(Utils::InreplaceError) do
|
assert_raises(Utils::InreplaceError) do
|
||||||
inreplace "test", "d", "f"
|
inreplace file.path, "d", "f"
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_raises(Utils::InreplaceError) do
|
assert_raises(Utils::InreplaceError) do
|
||||||
# Under current context, we are testing `String#gsub!`, so let's disable rubocop temporarily.
|
# Under current context, we are testing `String#gsub!`, so let's disable rubocop temporarily.
|
||||||
inreplace("test") { |s| s.gsub!("d", "f") } # rubocop:disable Performance/StringReplacement
|
inreplace(file.path) { |s| s.gsub!("d", "f") } # rubocop:disable Performance/StringReplacement
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_raises(Utils::InreplaceError) do
|
assert_raises(Utils::InreplaceError) do
|
||||||
inreplace("test") do |s|
|
inreplace(file.path) do |s|
|
||||||
s.change_make_var! "VAR", "value"
|
s.change_make_var! "VAR", "value"
|
||||||
s.remove_make_var! "VAR2"
|
s.remove_make_var! "VAR2"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
File.unlink("test")
|
file.unlink
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -42,7 +42,7 @@ module Homebrew
|
|||||||
module FSLeakLogger
|
module FSLeakLogger
|
||||||
def self.included(klass)
|
def self.included(klass)
|
||||||
require "find"
|
require "find"
|
||||||
@@log = File.open("fs_leak_log", "w")
|
@@log = File.open("#{__dir__}/fs_leak_log", "w")
|
||||||
klass.make_my_diffs_pretty!
|
klass.make_my_diffs_pretty!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user