class Drntest::TestRunner

Public Class Methods

new(config, target) click to toggle source
# File lib/drntest/test-runner.rb, line 33
def initialize(config, target)
  @config = config
  @target_path = Pathname(target).expand_path
  @engine = Engine.new(@config)
end

Public Instance Methods

run() click to toggle source
# File lib/drntest/test-runner.rb, line 39
def run
  relative_target_path = @target_path.relative_path_from(@config.suite_path)
  print "#{relative_target_path}: "
  @engine.start(@target_path)
  begin
    results = process_requests
    raise EngineStalled.new if results.status == :no_response
  ensure
    @engine.stop
  end
  results
end

Private Instance Methods

actual_path() click to toggle source
# File lib/drntest/test-runner.rb, line 107
def actual_path
  @target_path.sub_ext(".actual")
end
create_temporary_file(key, content) { |file| ... } click to toggle source
# File lib/drntest/test-runner.rb, line 170
def create_temporary_file(key, content)
  file = Tempfile.new("drntest-#{key}")
  file.write(content)
  file.close
  yield(file)
end
expected_exist?() click to toggle source
# File lib/drntest/test-runner.rb, line 95
def expected_exist?
  expected_path.exist?
end
expected_path() click to toggle source
# File lib/drntest/test-runner.rb, line 99
def expected_path
  @target_path.sub_ext(".expected")
end
format_result(result) click to toggle source
# File lib/drntest/test-runner.rb, line 161
def format_result(result)
  return "" if result.nil?
  begin
    JSON.pretty_generate(result)
  rescue JSON::GeneratorError
    result.inspect
  end
end
format_results(results) click to toggle source
# File lib/drntest/test-runner.rb, line 152
def format_results(results)
  formatted_results = ""
  results.each do |result|
    formatted_results << format_result(result)
    formatted_results << "\n"
  end
  formatted_results
end
load_expected_responses() click to toggle source
# File lib/drntest/test-runner.rb, line 86
def load_expected_responses
  load_jsons(expected_path)
end
load_jsons(path) click to toggle source
# File lib/drntest/test-runner.rb, line 90
def load_jsons(path)
  loader = JSONLoader.new
  loader.load(path)
end
output_errors(errors) click to toggle source
# File lib/drntest/test-runner.rb, line 177
def output_errors(errors)
  return if errors.empty?
  n_digits = (Math.log10(errors.size) + 1).ceil
  mark = "=" * 78
  errors.each_with_index do |error, i|
    puts(mark)
    formatted_nth = "%*d)" % [n_digits, i + 1]
    if error.is_a?(InputError)
      puts("#{formatted_nth} #{error.message}")
    else
      puts("#{formatted_nth} #{error.message} (#{error.class})")
      puts(error.backtrace)
    end
    puts(mark)
  end
end
output_results(results, output) click to toggle source
# File lib/drntest/test-runner.rb, line 130
def output_results(results, output)
  results.each do |result|
    output.puts(format_result(result))
  end
end
process_requests() click to toggle source
# File lib/drntest/test-runner.rb, line 53
def process_requests
  results = TestResults.new(@target_path)

  executor = TestExecutor.new(@config, @target_path, results)
  executor.execute
  if expected_exist?
    results.expecteds = load_expected_responses
  end

  case results.status
  when :success
    puts "SUCCESS"
    remove_reject_file
  when :no_response
    puts "NO RESPONSE"
  when :failure
    puts "FAILURE"
    save_reject_file(results.actuals)
    show_diff(results.expecteds, results.actuals)
  when :not_checked
    puts "NOT CHECKED"
    save_actual_file(results.actuals)
    output_results(results.actuals, $stdout)
  when :error
    puts "ERROR"
    output_errors(results.errors)
  when :omitted
    puts "OMITTED: #{results.omit_message}"
  end

  results
end
reject_path() click to toggle source
# File lib/drntest/test-runner.rb, line 103
def reject_path
  @target_path.sub_ext(".reject")
end
remove_reject_file() click to toggle source
# File lib/drntest/test-runner.rb, line 111
def remove_reject_file
  FileUtils.rm_rf(reject_path, :secure => true)
end
save_actual_file(results) click to toggle source
# File lib/drntest/test-runner.rb, line 119
def save_actual_file(results)
  save_results(results, actual_path)
end
save_reject_file(results) click to toggle source
# File lib/drntest/test-runner.rb, line 115
def save_reject_file(results)
  save_results(results, reject_path)
end
save_results(results, output_path) click to toggle source
# File lib/drntest/test-runner.rb, line 123
def save_results(results, output_path)
  puts "Saving received results as #{output_path}"
  File.open(output_path, "w") do |file|
    output_results(results, file)
  end
end
show_diff(expecteds, actuals) click to toggle source
# File lib/drntest/test-runner.rb, line 136
def show_diff(expecteds, actuals)
  formatted_expected = format_results(expecteds)
  formatted_actual = format_results(actuals)

  create_temporary_file("expected", formatted_expected) do |expected_file|
    create_temporary_file("actual", formatted_actual) do |actual_file|
      diff_options = [
        "-u",
        "--label", "(expected)", expected_file.path,
        "--label", "(actual)", actual_file.path
      ]
      system("diff", *diff_options)
    end
  end
end