mirror of
https://github.com/discourse/discourse.git
synced 2025-01-31 10:30:02 +08:00
e18ce56f4b
* DEV: Add a new way to run specs in parallel with better output This commit: 1. adds a new executable, `bin/interleaved_rspec` which works much like `rspec`, but runs the tests in parallel. 2. adds a rake task, `rake interleaved:spec` which runs the whole test suite. 3. makes autospec use this new wrapper by default. You can disable this by running `PARALLEL_SPEC=0 rake autospec`. It works much like the `parallel_tests` gem (and relies on it), but makes each subprocess use a machine-readable formatter and parses this output in order to provide a better overall summary. (It's called interleaved, because parallel was taken and naming is hard). * Make popen3 invocation safer * Use FileUtils instead of shelling out * DRY up reporter * Moved summary logic into Reporter * s/interleaved/turbo/g * Move Reporter into its own file * Moved run into its own class * Moved Runner into its own file * Move JsonRowsFormatter under TurboTests * Join on threads at the end * Acted on feedback from eviltrout
54 lines
1.7 KiB
Ruby
54 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
if ENV['DISCOURSE_DUMP_HEAP'] == "1"
|
|
require 'objspace'
|
|
ObjectSpace.trace_object_allocations_start
|
|
end
|
|
|
|
require 'rubygems'
|
|
|
|
# Set up gems listed in the Gemfile.
|
|
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
|
|
|
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
|
|
|
|
if ENV['RAILS_ENV'] != 'production' && ENV['RAILS_ENV'] != 'profile'
|
|
begin
|
|
require 'bootsnap'
|
|
rescue LoadError
|
|
# not a strong requirement
|
|
end
|
|
|
|
if defined? Bootsnap
|
|
Bootsnap.setup(
|
|
cache_dir: 'tmp/cache', # Path to your cache
|
|
load_path_cache: true, # Should we optimize the LOAD_PATH with a cache?
|
|
autoload_paths_cache: true, # Should we optimize ActiveSupport autoloads with cache?
|
|
disable_trace: false, # Sets `RubyVM::InstructionSequence.compile_option = { trace_instruction: false }`
|
|
compile_cache_iseq: true, # Should compile Ruby code into ISeq cache?
|
|
compile_cache_yaml: false # Skip YAML cache for now, cause we were seeing issues with it
|
|
)
|
|
end
|
|
end
|
|
|
|
# Parallel spec system
|
|
if ENV['RAILS_ENV'] == "test" && ENV['TEST_ENV_NUMBER']
|
|
if ENV['TEST_ENV_NUMBER'] == ''
|
|
n = 1
|
|
else
|
|
n = ENV['TEST_ENV_NUMBER'].to_i
|
|
end
|
|
|
|
port = 10000 + n
|
|
|
|
STDERR.puts "Setting up parallel test mode - starting Redis #{n} on port #{port}"
|
|
|
|
`rm -rf tmp/test_data_#{n} && mkdir -p tmp/test_data_#{n}/redis`
|
|
pid = Process.spawn("redis-server --dir tmp/test_data_#{n}/redis --port #{port}", out: "/dev/null")
|
|
|
|
ENV["DISCOURSE_REDIS_PORT"] = port.to_s
|
|
ENV["RAILS_DB"] = "discourse_test_#{n}"
|
|
|
|
at_exit { STDERR.puts "Terminating redis #{n}"; Process.kill("SIGTERM", pid); Process.wait }
|
|
end
|