class Praegustator::Wrappers::ServerSpec

Public Instance Methods

execute(suite) click to toggle source
# File lib/praegustator/wrappers/server_spec.rb, line 13
def execute suite
  suite.nodes.each do |node|
    ENV['TARGET_HOST'] = node.ipaddress
    spec_files = suite.checks.keys.map{|check| "#{Dir.pwd}/#{Praegustator.config['spec']['checks_dir']}/#{check}.rb" }
    run_rspec suite, node, spec_files
  end
end

Private Instance Methods

run_rspec(suite, node, spec_files) click to toggle source
# File lib/praegustator/wrappers/server_spec.rb, line 22
def run_rspec  suite, node, spec_files
  formatter = RSpec::Core::Formatters::JsonFormatter.new(nil)
  RSpec.clear_remaining_example_groups
  load 'serverspec.rb'
  begin
    params = suite.params
    params[:current_node] = node
    RSpec.configure do |config|
      config.host  = ENV['TARGET_HOST']
      options = Net::SSH::Config.for(config.host)
      user    = options[:user] || Praegustator.config['ssh']['user']
      options[:keys] = Praegustator.config['ssh']['keys'] if options[:keys].nil?
      options[:timeout] = 10
      config.ssh   = Net::SSH.start(config.host, user, options)
      config.os    = backend.check_os
      set_property params
      config.output = $stdout
      config.color_enabled = true
      config.tty = true
      reporter =  RSpec::Core::Reporter.new(formatter)
      config.instance_variable_set(:@reporter, reporter)
    end
    begin
      RSpec::Core::Runner.run_patched(spec_files, $stderr, $stdout)
    rescue Exception => e
      $stderr.puts e.backtrace.join("\n")
      $stderr.puts "!! spec execution failed #{e.message}"
    end
    Praegustator.reporter.add_spec_result node,formatter.output_hash
  rescue Exception => e
    $stderr.puts e.backtrace.join("\n")
    $stderr.puts "!! failed for #{node.ipaddress} : #{e.message}"
  end
end