From d3740ec34f1ad98311a3ac606643db972d5130e9 Mon Sep 17 00:00:00 2001 From: Alyssa Ross <hi@alyssa.is> Date: Mon, 19 Sep 2016 23:00:58 +0100 Subject: [PATCH] tests: run in parallel --- Library/Homebrew/dev-cmd/tests.rb | 14 +++++++----- Library/Homebrew/test/Gemfile | 1 + Library/Homebrew/test/Gemfile.lock | 6 ++++- Library/Homebrew/test/Rakefile | 29 ------------------------- Library/Homebrew/test/test_inreplace.rb | 13 ++++++----- Library/Homebrew/test/testing_env.rb | 2 +- 6 files changed, 24 insertions(+), 41 deletions(-) delete mode 100644 Library/Homebrew/test/Rakefile diff --git a/Library/Homebrew/dev-cmd/tests.rb b/Library/Homebrew/dev-cmd/tests.rb index aa2a3bff9b..aba2fa3b64 100644 --- a/Library/Homebrew/dev-cmd/tests.rb +++ b/Library/Homebrew/dev-cmd/tests.rb @@ -6,7 +6,7 @@ require "tap" module Homebrew def tests - (HOMEBREW_LIBRARY/"Homebrew/test").cd do + (HOMEBREW_LIBRARY/"Homebrew").cd do ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1" ENV["HOMEBREW_DEVELOPER"] = "1" ENV["TESTOPTS"] = "-v" if ARGV.verbose? @@ -19,9 +19,11 @@ module Homebrew if ARGV.include? "--coverage" ENV["HOMEBREW_TESTS_COVERAGE"] = "1" - FileUtils.rm_f "coverage/.resultset.json" + FileUtils.rm_f "test/coverage/.resultset.json" end + ENV["BUNDLE_GEMFILE"] = "#{Dir.pwd}/test/Gemfile" + # Override author/committer as global settings might be invalid and thus # will cause silent failure during the setup of dummy Git repositories. %w[AUTHOR COMMITTER].each do |role| @@ -37,16 +39,18 @@ module Homebrew # Make it easier to reproduce test runs. 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 << "--trace" if ARGV.include? "--trace" if ARGV.value("only") ENV["HOMEBREW_TESTS_ONLY"] = "1" test_name, test_method = ARGV.value("only").split("/", 2) - args << "TEST=test_#{test_name}.rb" - args << "TESTOPTS=--name=test_#{test_method}" if test_method + files = ["test/test_#{test_name}.rb"] + args << "--name=test_#{test_method}" if test_method end args += ARGV.named.select { |v| v[/^TEST(OPTS)?=/] } - system "bundle", "exec", "rake", "test", *args + system "bundle", "exec", "parallel_test", "--", *args, "--", *files Homebrew.failed = !$?.success? diff --git a/Library/Homebrew/test/Gemfile b/Library/Homebrew/test/Gemfile index b7666e5516..193604dd79 100644 --- a/Library/Homebrew/test/Gemfile +++ b/Library/Homebrew/test/Gemfile @@ -3,6 +3,7 @@ source "https://rubygems.org" gem "mocha", "~> 1.1" gem "minitest", "~> 5.3" gem "rake", "~> 10.3" +gem "parallel_tests", "~> 2.9" group :coverage do # This is SimpleCov v0.12.0 with one PR merged on top, that finally resolves diff --git a/Library/Homebrew/test/Gemfile.lock b/Library/Homebrew/test/Gemfile.lock index ceb11128dc..841ff0b5cc 100644 --- a/Library/Homebrew/test/Gemfile.lock +++ b/Library/Homebrew/test/Gemfile.lock @@ -21,6 +21,9 @@ GEM minitest (5.9.0) mocha (1.1.0) metaclass (~> 0.0.1) + parallel (1.9.0) + parallel_tests (2.9.0) + parallel rake (10.5.0) simplecov-html (0.10.0) url (0.3.2) @@ -32,8 +35,9 @@ DEPENDENCIES codecov minitest (~> 5.3) mocha (~> 1.1) + parallel_tests (~> 2.9) rake (~> 10.3) simplecov (= 0.12.0)! BUNDLED WITH - 1.12.5 + 1.13.1 diff --git a/Library/Homebrew/test/Rakefile b/Library/Homebrew/test/Rakefile deleted file mode 100644 index a2db861f20..0000000000 --- a/Library/Homebrew/test/Rakefile +++ /dev/null @@ -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 diff --git a/Library/Homebrew/test/test_inreplace.rb b/Library/Homebrew/test/test_inreplace.rb index 91d57f942f..0e62f9d3f9 100644 --- a/Library/Homebrew/test/test_inreplace.rb +++ b/Library/Homebrew/test/test_inreplace.rb @@ -91,26 +91,29 @@ class InreplaceTest < Homebrew::TestCase end def test_inreplace_errors + require "tempfile" 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 - inreplace "test", "d", "f" + inreplace file.path, "d", "f" end assert_raises(Utils::InreplaceError) do # 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 assert_raises(Utils::InreplaceError) do - inreplace("test") do |s| + inreplace(file.path) do |s| s.change_make_var! "VAR", "value" s.remove_make_var! "VAR2" end end ensure - File.unlink("test") + file.unlink end end diff --git a/Library/Homebrew/test/testing_env.rb b/Library/Homebrew/test/testing_env.rb index aa89ba2bd4..396d92e13f 100644 --- a/Library/Homebrew/test/testing_env.rb +++ b/Library/Homebrew/test/testing_env.rb @@ -42,7 +42,7 @@ module Homebrew module FSLeakLogger def self.included(klass) require "find" - @@log = File.open("fs_leak_log", "w") + @@log = File.open("#{__dir__}/fs_leak_log", "w") klass.make_my_diffs_pretty! end -- GitLab