class RSpecKneesAndToes::AnalyzeParallelSpecLogs

Public Class Methods

new(processor: ProcessLinesBetweenLoggedSeeds.new, bisector: RspecBisector.new, failing_spec_lines: File.readlines('tmp/failing_specs.log'), parallel_runtime_lines: File.readlines('tmp/parallel_runtime_rspec.log')) click to toggle source
# File lib/analyze_parallel_spec_logs.rb, line 9
def initialize(processor: ProcessLinesBetweenLoggedSeeds.new,
               bisector: RspecBisector.new,
               failing_spec_lines: File.readlines('tmp/failing_specs.log'),
               parallel_runtime_lines: File.readlines('tmp/parallel_runtime_rspec.log'))
  @processor = processor
  @bisector = bisector
  @failing_spec_lines = failing_spec_lines
  @parallel_runtime_lines = parallel_runtime_lines
end

Public Instance Methods

bisect_parallel_spec_threads() click to toggle source
# File lib/analyze_parallel_spec_logs.rb, line 19
def bisect_parallel_spec_threads
  extract_seeds_with_failures.each do |seed, failures|
    @bisector.bisect(seed, failures)
  end
end

Private Instance Methods

extract_seeds_with_failures() click to toggle source
# File lib/analyze_parallel_spec_logs.rb, line 27
def extract_seeds_with_failures
  failing_seeds = []
  seeds_with_failures = Hash.new { |hash, key| hash[key] = [] }

  @processor.process_file(@failing_spec_lines) do |line, seed|
    failing_seeds << seed if /Failures/.match(line)
  end

  @processor.process_file(@parallel_runtime_lines) do |line, seed|
    if %r{spec/}.match(line) && failing_seeds.include?(seed)
      seeds_with_failures[seed] << line[0..line.index(':') - 1]
    end
  end

  seeds_with_failures
end