diff options
| author | Mike McQuaid | 2016-09-23 07:57:35 +0100 | 
|---|---|---|
| committer | GitHub | 2016-09-23 07:57:35 +0100 | 
| commit | 5cf3838f4292f3c47bc6a66e6d532fa290bcc5e0 (patch) | |
| tree | d70a95c2da4ce92c716b37bbe4765d42017e29e1 | |
| parent | b7e7434bdbe59412505662df4ae919884990264b (diff) | |
| parent | 5c5c416d1cb2df75f430c30a8044c82e041f530c (diff) | |
| download | brew-5cf3838f4292f3c47bc6a66e6d532fa290bcc5e0.tar.bz2 | |
Merge pull request #1041 from penman/parallel_tests
Parallelise test suite
| -rw-r--r-- | .gitignore | 2 | ||||
| -rwxr-xr-x | Library/Homebrew/.simplecov (renamed from Library/Homebrew/test/.simplecov) | 4 | ||||
| l--------- | Library/Homebrew/cask/.simplecov | 2 | ||||
| -rw-r--r-- | Library/Homebrew/cask/Gemfile | 1 | ||||
| -rw-r--r-- | Library/Homebrew/cask/Gemfile.lock | 4 | ||||
| -rw-r--r-- | Library/Homebrew/cask/Rakefile | 25 | ||||
| -rwxr-xr-x | Library/Homebrew/cask/cmd/brew-cask-tests.rb | 31 | ||||
| -rw-r--r-- | Library/Homebrew/cask/test/test_helper.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/dev-cmd/tests.rb | 22 | ||||
| -rw-r--r-- | Library/Homebrew/test/Gemfile | 1 | ||||
| -rw-r--r-- | Library/Homebrew/test/Gemfile.lock | 6 | ||||
| -rw-r--r-- | Library/Homebrew/test/Rakefile | 29 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_inreplace.rb | 13 | ||||
| -rw-r--r-- | Library/Homebrew/test/testing_env.rb | 3 | 
14 files changed, 75 insertions, 70 deletions
| diff --git a/.gitignore b/.gitignore index 20b1a2dfd..118a02ff8 100644 --- a/.gitignore +++ b/.gitignore @@ -13,11 +13,13 @@  /Library/Homebrew/cask/bin  /Library/Homebrew/cask/vendor  /Library/Homebrew/cask/coverage +/Library/Homebrew/cask/tmp  /Library/Homebrew/test/.bundle  /Library/Homebrew/test/bin  /Library/Homebrew/test/vendor  /Library/Homebrew/test/coverage  /Library/Homebrew/test/fs_leak_log +/Library/Homebrew/tmp  /Library/LinkedKegs  /Library/Locks  /Library/PinnedKegs diff --git a/Library/Homebrew/test/.simplecov b/Library/Homebrew/.simplecov index 7b057e878..a7758c448 100755 --- a/Library/Homebrew/test/.simplecov +++ b/Library/Homebrew/.simplecov @@ -1,8 +1,8 @@  #!/usr/bin/env ruby  SimpleCov.start do -  coverage_dir File.expand_path("../coverage", File.realpath(__FILE__)) -  root File.expand_path("../..", File.realpath(__FILE__)) +  coverage_dir File.expand_path("../test/coverage", File.realpath(__FILE__)) +  root File.expand_path("..", File.realpath(__FILE__))    # We manage the result cache ourselves and the default of 10 minutes can be    # too low (particularly on Travis CI), causing results from some integration diff --git a/Library/Homebrew/cask/.simplecov b/Library/Homebrew/cask/.simplecov index d1b045262..75a078be4 120000 --- a/Library/Homebrew/cask/.simplecov +++ b/Library/Homebrew/cask/.simplecov @@ -1 +1 @@ -../test/.simplecov
\ No newline at end of file +../.simplecov
\ No newline at end of file diff --git a/Library/Homebrew/cask/Gemfile b/Library/Homebrew/cask/Gemfile index af1c8d3bc..e252b5f3d 100644 --- a/Library/Homebrew/cask/Gemfile +++ b/Library/Homebrew/cask/Gemfile @@ -16,6 +16,7 @@ group :test do    gem "minitest", "5.4.1"    gem "minitest-reporters"    gem "mocha", "1.1.0", require: false +  gem "parallel_tests"    gem "rspec", "~> 3.0.0"    gem "rspec-its", require: false    gem "rspec-wait", require: false diff --git a/Library/Homebrew/cask/Gemfile.lock b/Library/Homebrew/cask/Gemfile.lock index c9c2b5cca..fa5dcf9a9 100644 --- a/Library/Homebrew/cask/Gemfile.lock +++ b/Library/Homebrew/cask/Gemfile.lock @@ -23,6 +23,9 @@ GEM        ruby-progressbar      mocha (1.1.0)        metaclass (~> 0.0.1) +    parallel (1.9.0) +    parallel_tests (2.9.0) +      parallel      parser (2.3.1.2)        ast (~> 2.2)      powerpack (0.1.1) @@ -80,6 +83,7 @@ DEPENDENCIES    minitest (= 5.4.1)    minitest-reporters    mocha (= 1.1.0) +  parallel_tests    pry    pry-byebug    rake diff --git a/Library/Homebrew/cask/Rakefile b/Library/Homebrew/cask/Rakefile index 25deee407..fe3e75c98 100644 --- a/Library/Homebrew/cask/Rakefile +++ b/Library/Homebrew/cask/Rakefile @@ -7,23 +7,9 @@ $LOAD_PATH.unshift(File.expand_path("#{homebrew_repo}/Library/Homebrew"))  $LOAD_PATH.unshift(File.expand_path("../lib", __FILE__))  namespace :test do -  Rake::TestTask.new(:minitest) do |t| -    # TODO: setting the --seed here is an ugly temporary hack, to remain only -    #       until test-suite glitches are fixed. -    ENV["TESTOPTS"] = "--seed=14830" if ENV["TRAVIS"] -    t.pattern = "test/**/*_test.rb" -    t.libs << "test" -  end - -  RSpec::Core::RakeTask.new(:rspec) - -  desc "Run tests for minitest and RSpec with coverage" -  task :coverage do -    ENV["HOMEBREW_TESTS_COVERAGE"] = "1" - -    Rake::Task[:test].invoke - -    if ENV["CODECOV_TOKEN"] +  namespace :coverage do +    desc "Upload coverage to Codecov" +    task :upload do        require "simplecov"        require "codecov"        formatter = SimpleCov::Formatter::Codecov.new @@ -32,14 +18,11 @@ namespace :test do    end  end -desc "Run tests for minitest and RSpec" -task test: ["test:minitest", "test:rspec"] -  RuboCop::RakeTask.new(:rubocop) do |t|    t.options = ["--force-exclusion"]  end -task default: [:test, :rubocop] +task default: [:rubocop]  desc "Open a REPL for debugging and experimentation"  task :console do diff --git a/Library/Homebrew/cask/cmd/brew-cask-tests.rb b/Library/Homebrew/cask/cmd/brew-cask-tests.rb index 92ef3ddd9..7ae71020e 100755 --- a/Library/Homebrew/cask/cmd/brew-cask-tests.rb +++ b/Library/Homebrew/cask/cmd/brew-cask-tests.rb @@ -1,5 +1,12 @@  require "English" +def run_tests(executable, files, args = []) +  opts = [] +  opts << "--serialize-stdout" if ENV["CI"] + +  system "bundle", "exec", executable, *opts, "--", *args, "--", *files +end +  repo_root = Pathname(__FILE__).realpath.parent.parent  repo_root.cd do    ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1" @@ -9,12 +16,26 @@ repo_root.cd do      system "bundle", "install", "--path", "vendor/bundle"    end -  test_task = "test" -  %w[rspec minitest coverage].each do |subtask| -    next unless ARGV.flag?("--#{subtask}") -    test_task = "test:#{subtask}" +  rspec = ARGV.flag?("--rspec") || !ARGV.flag?("--minitest") +  minitest = ARGV.flag?("--minitest") || !ARGV.flag?("--rspec") + +  ENV["HOMEBREW_TESTS_COVERAGE"] = "1" if ARGV.flag?("--coverage") + +  if rspec +    run_tests "parallel_rspec", Dir["spec/**/*_spec.rb"], %w[ +      --format progress +      --format ParallelTests::RSpec::RuntimeLogger +      --out tmp/parallel_runtime_rspec.log +    ] +  end + +  if minitest +    run_tests "parallel_test", Dir["test/**/*_test.rb"] +  end + +  if ENV["CODECOV_TOKEN"] +    system "bundle", "exec", "rake", "test:coverage:upload"    end -  system "bundle", "exec", "rake", test_task    Homebrew.failed = !$CHILD_STATUS.success?  end diff --git a/Library/Homebrew/cask/test/test_helper.rb b/Library/Homebrew/cask/test/test_helper.rb index e4fd72170..bf557f66b 100644 --- a/Library/Homebrew/cask/test/test_helper.rb +++ b/Library/Homebrew/cask/test/test_helper.rb @@ -39,6 +39,8 @@ require "minitest/autorun"  require "minitest/reporters"  Minitest::Reporters.use! Minitest::Reporters::DefaultReporter.new(color: true) +require "parallel_tests/test/runtime_logger" +  # Force mocha to patch MiniTest since we have both loaded thanks to homebrew's testing_env  require "mocha/api"  require "mocha/integration/mini_test" diff --git a/Library/Homebrew/dev-cmd/tests.rb b/Library/Homebrew/dev-cmd/tests.rb index aa2a3bff9..9b15f9f3e 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,26 @@ 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? + +      opts = [] +      opts << "--serialize-stdout" if ENV["CI"] +        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", *opts, +        "--", *args, "--", *files        Homebrew.failed = !$?.success? diff --git a/Library/Homebrew/test/Gemfile b/Library/Homebrew/test/Gemfile index b7666e551..193604dd7 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 ceb11128d..841ff0b5c 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 a2db861f2..000000000 --- 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 91d57f942..0e62f9d3f 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 164c812ea..2b4f9422b 100644 --- a/Library/Homebrew/test/testing_env.rb +++ b/Library/Homebrew/test/testing_env.rb @@ -15,6 +15,7 @@ TEST_DIRECTORY = File.dirname(File.expand_path(__FILE__))  begin    require "rubygems"    require "minitest/autorun" +  require "parallel_tests/test/runtime_logger"    require "mocha/setup"  rescue LoadError    abort "Run `bundle install` or install the mocha and minitest gems before running the tests" @@ -42,7 +43,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 | 
