class CfHighlander::Tests

Attributes

cases[RW]
exit_code[RW]
report[RW]
report_path[RW]
time[RW]
timestamp[RW]

Public Class Methods

new(component_name,options) click to toggle source
# File lib/cfhighlander.tests.rb, line 15
def initialize(component_name,options)
  @component_name = component_name
  @tests_dir = options[:directory]
  @test_files = options[:tests] || Dir["#{@tests_dir}/*.test.yaml"]
  @report_path = "reports"
  @debug = false
  @cases = []
  @report = []
  @time = nil
  @timestamp = nil
  @exit_code = 0
end

Public Instance Methods

generate_report(type) click to toggle source
# File lib/cfhighlander.tests.rb, line 84
def generate_report(type)
  report_dir
  failures = @report.select { |k,v| k[:message] }
  report = {}
  report[:component] = @component_name
  report[:tests] = cases.size.to_s
  report[:pass] = (cases.size - failures.size).to_s
  report[:failures] = failures.size.to_s
  report[:time] = @time.to_s
  report[:timestamp] = @timestamp.to_s
  report[:testcases] = @report
  case type
  when 'json'
    report_json(report)
  when 'xml'
    report_xml(report)
  end
end
get_cases() click to toggle source
# File lib/cfhighlander.tests.rb, line 28
def get_cases
  @test_files.each do |file|
    test_case = load_test_case(file)
    test_parameters = test_case['test_parameters'] || {}
    @cases << { 
      metadata: test_case['test_metadata'],
      test_parameters: test_parameters,
      file: file,
      config: load_default_config.deep_merge(test_case)
    }
  end
end
load_default_config() click to toggle source
# File lib/cfhighlander.tests.rb, line 41
def load_default_config
  begin
    YAML.load_file("#{@component_name}.config.yaml") || {}
  rescue Errno::ENOENT => e
    {}
  end
end
load_test_case(file) click to toggle source
# File lib/cfhighlander.tests.rb, line 49
def load_test_case(file)
  begin
    YAML.load_file(file)
  rescue Errno::ENOENT => e
    abort "No test file found for #{file}"
  end
end
print_results() click to toggle source
report_dir() click to toggle source
# File lib/cfhighlander.tests.rb, line 80
def report_dir
  FileUtils.mkdir_p(@report_path) unless Dir.exist?(@report_path)
end
report_json(report) click to toggle source
# File lib/cfhighlander.tests.rb, line 122
def report_json(report)
  File.open("reports/report.json","w") do |f|
    f.write(JSON.pretty_generate(report))
  end
end
report_xml(report) click to toggle source
# File lib/cfhighlander.tests.rb, line 103
def report_xml(report)
  testsuite = report.map { |k,v| "#{k}=\"#{v}\"" if k != :testcases }
  File.open("reports/report.xml","w") do |f|
    f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
    f.write("<testsuite #{testsuite.join(' ')}>\n")
    report[:testcases].each do |test|
      testcase = test.map { |k,v| "#{k}=\"#{v}\"" if k != :failure }
      if test[:failure]
        f.write("\t<testcase #{testcase.join(' ')}>\n")
        f.write("\t\t<failure message=\"#{test[:failure][:message]}\" type=\"#{test[:failure][:type]}\"/>\n")
        f.write("\t</testcase>\n")
      else
        f.write("\t<testcase #{testcase.join(' ')}/>\n")
      end
    end
    f.write("</testsuite>")
  end
end