72 lines
1.5 KiB
Ruby
72 lines
1.5 KiB
Ruby
|
module RubyQA
|
||
|
require 'erb'
|
||
|
class Test
|
||
|
DEFAULT_OPTIONS={
|
||
|
:site => "",
|
||
|
:cluster => false,
|
||
|
:has_key => "",
|
||
|
}.freeze
|
||
|
|
||
|
attr_reader :name, :options, :proc
|
||
|
|
||
|
def initialize (name, options ={}, &test_block)
|
||
|
@tests = Hash.new
|
||
|
@name = name
|
||
|
@options = DEFAULT_OPTIONS.merge(options)
|
||
|
@test = test_block
|
||
|
@description = ""
|
||
|
if options[:description]
|
||
|
@description=options[:description]
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def valid_host(host)
|
||
|
## By default if options weren't changed, then
|
||
|
## we just assume it is to be tested against all
|
||
|
## provided hosts
|
||
|
is_valid = 0
|
||
|
if @options == DEFAULT_OPTIONS
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
DEFAULT_OPTIONS.each do |key,value|
|
||
|
if @options[key] != value and host[key] != @options[key]
|
||
|
return false
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
def run (host)
|
||
|
test_status = "N/A"
|
||
|
if @test.call(host)
|
||
|
test_status = "PASSED"
|
||
|
else
|
||
|
test_status = "FAILED"
|
||
|
end
|
||
|
@tests[host.name]=test_status
|
||
|
end
|
||
|
|
||
|
def report
|
||
|
if @tests.count == 0
|
||
|
return
|
||
|
end
|
||
|
template = ERB.new <<EOF, :trim_mode => '-'
|
||
|
==============================================
|
||
|
Test : "<%= @name %>"
|
||
|
<% if not @description.empty? -%>
|
||
|
Description : "<%= @description %>
|
||
|
<% end -%>
|
||
|
==============================================
|
||
|
<% @tests.each do |key,val| -%>
|
||
|
<%= key %> : <%= val %>
|
||
|
<% end -%>
|
||
|
|
||
|
EOF
|
||
|
template.result(binding)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|