class ParallelTests::Test::RuntimeLogger

Public Class Methods

log_test_run(test) { || ... } click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 11
def log_test_run(test)
  prepare

  result = nil
  time = ParallelTests.delta { result = yield }
  log(test, time)

  result
end
unique_log() click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 21
def unique_log
  with_locked_log do |logfile|
    separator = "\n"
    groups = logfile.read.split(separator).map { |line| line.split(":") }.group_by(&:first)
    lines = groups.map do |file, times|
      time = "%.2f" % times.map(&:last).map(&:to_f).sum
      "#{file}:#{time}"
    end
    logfile.rewind
    logfile.write(lines.join(separator) + separator)
    logfile.truncate(logfile.pos)
  end
end

Private Class Methods

log(test, time) click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 54
def log(test, time)
  return unless message = message(test, time)
  with_locked_log do |logfile|
    logfile.seek(0, IO::SEEK_END)
    logfile.puts message
  end
end
logfile() click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 68
def logfile
  ParallelTests::Test::Runner.runtime_log
end
message(test, delta) click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 62
def message(test, delta)
  return unless method = test.public_instance_methods(true).detect { |m| m =~ /^test_/ }
  filename = test.instance_method(method).source_location.first.sub("#{Dir.pwd}/", "")
  "#{filename}:#{delta}"
end
prepare() click to toggle source

ensure folder exists + clean out previous log this will happen in multiple processes, but should be roughly at the same time so there should be no log message lost

# File lib/parallel_tests/test/runtime_logger.rb, line 47
def prepare
  return if @@prepared
  @@prepared = true
  FileUtils.mkdir_p(File.dirname(logfile))
  File.write(logfile, '')
end
with_locked_log() { |logfile| ... } click to toggle source
# File lib/parallel_tests/test/runtime_logger.rb, line 37
def with_locked_log
  File.open(logfile, File::RDWR | File::CREAT) do |logfile|
    logfile.flock(File::LOCK_EX)
    yield logfile
  end
end