Skip to content

Commit

Permalink
Support parallel_tests options
Browse files Browse the repository at this point in the history
  • Loading branch information
inkstak authored and pboling committed Jan 14, 2025
1 parent 7d4a6df commit 9c5ec96
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 15 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,12 @@ Options:
--print_failed_group Prints group that had failures in it
```

To pass any options supported by paralell_tests, use `--` :

```bash
bundle exec turbo_tests -n 4 -- --only-group 1 --pattern spec/system
```

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
Expand Down
8 changes: 6 additions & 2 deletions lib/turbo_tests/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -114,16 +114,20 @@ def run
formatter[:outputs] << "-" if formatter[:outputs].empty?
end

exitstatus = TurboTests::Runner.run(
parallel_options = ParallelTests::CLI.new.send(:parse_options!, @argv.unshift("--type", "rspec"))
files = parallel_options.fetch(:files, ["spec"])

exitstatus = TurboTests::Runner.run({
formatters: formatters,
tags: tags,
files: @argv.empty? ? ["spec"] : @argv,
files: files,
runtime_log: runtime_log,
verbose: verbose,
fail_fast: fail_fast,
count: count,
seed: seed,
print_failed_group: print_failed_group,
parallel_options: parallel_options,
)

# From https://github.com/serpapi/turbo_tests/pull/20/
Expand Down
34 changes: 21 additions & 13 deletions lib/turbo_tests/runner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ def self.run(opts = {})
files = opts[:files]
formatters = opts[:formatters]
tags = opts[:tags]
parallel_options = opts[:parallel_options] || {}

start_time = opts.fetch(:start_time) { RSpec::Core::Time.now }
runtime_log = opts.fetch(:runtime_log, nil)
Expand All @@ -31,6 +32,14 @@ def self.run(opts = {})
seed_used = !seed.nil?
print_failed_group = opts.fetch(:print_failed_group, false)

use_runtime_info = files == ["spec"]

if use_runtime_info
parallel_options[:runtime_log] = runtime_log
else
parallel_options[:group_by] = :filesize
end

warn("VERBOSE") if verbose

reporter = Reporter.from_config(formatters, start_time, seed, seed_used)
Expand All @@ -46,24 +55,33 @@ def self.run(opts = {})
seed: seed,
seed_used: seed_used,
print_failed_group: print_failed_group,
use_runtime_info: use_runtime_info,
parallel_options: parallel_options,
).run
end

def initialize(opts)
@reporter = opts[:reporter]
@files = opts[:files]
@tags = opts[:tags]
@runtime_log = opts[:runtime_log] || "tmp/turbo_rspec_runtime.log"
@verbose = opts[:verbose]
@fail_fast = opts[:fail_fast]
@count = opts[:count]
@seed = opts[:seed]
@seed_used = opts[:seed_used]
@use_runtime_info = opts[:use_runtime_info]

@load_time = 0
@load_count = 0
@failure_count = 0

# Supports runtime_log as a top level option,
# but also nested inside parallel_options
@runtime_log = opts[:runtime_log] || "tmp/turbo_rspec_runtime.log"
@parallel_options = opts.fetch(:parallel_options, {})
@parallel_options[:runtime_log] ||= @runtime_log
@record_runtime = @parallel_options[:group_by] == :runtime

@messages = Thread::Queue.new
@threads = []
@error = false
Expand All @@ -76,27 +94,17 @@ def run
ParallelTests::RSpec::Runner.tests_with_size(@files, {}).size,
].min

use_runtime_info = @files == ["spec"]

group_opts = {}

if use_runtime_info
group_opts[:runtime_log] = @runtime_log
else
group_opts[:group_by] = :filesize
end

tests_in_groups =
ParallelTests::RSpec::Runner.tests_in_groups(
@files,
@num_processes,
**group_opts,
**@parallel_options
)

setup_tmp_dir

subprocess_opts = {
record_runtime: use_runtime_info,
record_runtime: @record_runtime
}

@reporter.report(tests_in_groups) do |_reporter|
Expand Down

0 comments on commit 9c5ec96

Please sign in to comment.