tests: run in parallel

This commit is contained in:
Alyssa Ross 2016-09-19 23:00:58 +01:00
parent e22610aedd
commit d3740ec34f
6 changed files with 24 additions and 41 deletions

View File

@ -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?

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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