Class: ChefDK::Command::Verify

Inherits:
Base
  • Object
show all
Includes:
Helpers
Defined in:
lib/chef-dk/command/verify.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helpers

#chefdk_home, #err, #msg, #omnibus_apps_dir, #omnibus_bin_dir, #omnibus_chefdk_location, #omnibus_embedded_bin_dir, #omnibus_install?, #stderr, #stdout, #system_command, #usr_bin_path, #usr_bin_prefix

Methods inherited from Base

#needs_help?, #needs_version?, #run_with_default_options

Constructor Details

#initializeVerify



348
349
350
351
352
353
# File 'lib/chef-dk/command/verify.rb', line 348

def initialize
  super
  @verification_threads = [ ]
  @verification_results = [ ]
  @verification_status = 0
end

Instance Attribute Details

#verification_resultsObject (readonly)

Returns the value of attribute verification_results.



345
346
347
# File 'lib/chef-dk/command/verify.rb', line 345

def verification_results
  @verification_results
end

#verification_statusObject (readonly)

Returns the value of attribute verification_status.



346
347
348
# File 'lib/chef-dk/command/verify.rb', line 346

def verification_status
  @verification_status
end

#verification_threadsObject (readonly)

Returns the value of attribute verification_threads.



344
345
346
# File 'lib/chef-dk/command/verify.rb', line 344

def verification_threads
  @verification_threads
end

Class Method Details

.add_component(name, _delete_me = nil) {|component| ... } ⇒ Object

Yields:



47
48
49
50
51
# File 'lib/chef-dk/command/verify.rb', line 47

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) ⇒ Object



53
54
55
# File 'lib/chef-dk/command/verify.rb', line 53

def component(name)
  component_map[name]
end

.component_mapObject



61
62
63
# File 'lib/chef-dk/command/verify.rb', line 61

def component_map
  @component_map ||= {}
end

.componentsObject



57
58
59
# File 'lib/chef-dk/command/verify.rb', line 57

def components
  component_map.values
end

Instance Method Details

#componentsObject



66
67
68
# File 'lib/chef-dk/command/verify.rb', line 66

def components
  self.class.components
end

#components_to_testObject



377
378
379
380
381
382
383
384
385
# File 'lib/chef-dk/command/verify.rb', line 377

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_testsObject



387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
# File 'lib/chef-dk/command/verify.rb', line 387

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_rootObject



366
367
368
# File 'lib/chef-dk/command/verify.rb', line 366

def omnibus_root
  config[:omnibus_dir] || super
end

#report_resultsObject



442
443
444
445
446
447
448
449
# File 'lib/chef-dk/command/verify.rb', line 442

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 = [ ]) ⇒ Object



355
356
357
358
359
360
361
362
363
364
# File 'lib/chef-dk/command/verify.rb', line 355

def run(params = [ ])
  @components_filter = parse_options(params)

  validate_components!
  invoke_tests
  wait_for_tests
  report_results

  verification_status
end

#validate_components!Object



370
371
372
373
374
375
# File 'lib/chef-dk/command/verify.rb', line 370

def validate_components!
  components.each do |component|
    component.omnibus_root = omnibus_root
    component.assert_present!
  end
end

#wait_for_testsObject



422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
# File 'lib/chef-dk/command/verify.rb', line 422

def wait_for_tests
  while !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