class ChefDK::Command::Verify

Attributes

verification_results[R]
verification_status[R]
verification_threads[R]

Public Class Methods

add_component(name, _delete_me = nil) { |component| ... } click to toggle source
# File lib/chef-dk/command/verify.rb, line 48
def add_component(name, _delete_me = nil)
  component = ComponentTest.new(name)
  yield component if block_given? # delete this conditional
  component_map[name] = component
end
component(name) click to toggle source
# File lib/chef-dk/command/verify.rb, line 54
def component(name)
  component_map[name]
end
component_map() click to toggle source
# File lib/chef-dk/command/verify.rb, line 62
def component_map
  @component_map ||= {}
end
components() click to toggle source
# File lib/chef-dk/command/verify.rb, line 58
def components
  component_map.values
end
new() click to toggle source
Calls superclass method ChefDK::Command::Base::new
# File lib/chef-dk/command/verify.rb, line 400
def initialize
  super
  @verification_threads = [ ]
  @verification_results = [ ]
  @verification_status = 0
end

Public Instance Methods

components() click to toggle source
# File lib/chef-dk/command/verify.rb, line 67
def components
  self.class.components
end
components_to_test() click to toggle source
# File lib/chef-dk/command/verify.rb, line 430
def components_to_test
  if @components_filter.empty?
    components
  else
    components.select do |component|
      @components_filter.include?(component.name.to_s)
    end
  end
end
invoke_tests() click to toggle source
# File lib/chef-dk/command/verify.rb, line 440
def invoke_tests
  components_to_test.each do |component|
    # Run the component specs in parallel
    verification_threads << Thread.new do

      results = []

      results << component.run_smoke_test

      if config[:unit]
        results << component.run_unit_test
      end

      if config[:integration]
        results << component.run_integration_test
      end

      if results.any? { |r| r.exitstatus != 0 }
        component_status = 1
        @verification_status = 1
      else
        component_status = 0
      end

      {
        component: component,
        results: results,
        component_status: component_status,
      }
    end

    msg("Running verification for component '#{component.name}'")
  end
end
omnibus_root() click to toggle source
Calls superclass method ChefDK::Helpers#omnibus_root
# File lib/chef-dk/command/verify.rb, line 419
def omnibus_root
  config[:omnibus_dir] || super
end
report_results() click to toggle source
# File lib/chef-dk/command/verify.rb, line 495
def report_results
  msg("")
  msg("---------------------------------------------")
  verification_results.each do |result|
    message = result[:component_status] == 0 ? "succeeded" : "failed"
    msg("Verification of component '#{result[:component].name}' #{message}.")
  end
end
run(params = [ ]) click to toggle source
# File lib/chef-dk/command/verify.rb, line 407
def run(params = [ ])
  err("[WARN] This is an internal command used by the ChefDK development team. If you are a ChefDK user, please do not run it.")
  @components_filter = parse_options(params)

  validate_components!
  invoke_tests
  wait_for_tests
  report_results

  verification_status
end
validate_components!() click to toggle source
# File lib/chef-dk/command/verify.rb, line 423
def validate_components!
  components.each do |component|
    component.omnibus_root = omnibus_root
    component.assert_present!
  end
end
wait_for_tests() click to toggle source
# File lib/chef-dk/command/verify.rb, line 475
def wait_for_tests
  until verification_threads.empty?
    verification_threads.each do |t|
      if t.join(1)
        verification_threads.delete t
        verification_results << t.value
        t.value[:results].each do |result|
          if config[:verbose] || t.value[:component_status] != 0
            msg("")
            msg(result.stdout)
            msg(result.stderr) if result.stderr
          end
        end
      else
        $stdout.write "."
      end
    end
  end
end