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

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

Methods inherited from Base

#needs_help?, #needs_version?, #run_with_default_options

Constructor Details

#initializeVerify

Returns a new instance of Verify.



222
223
224
225
226
227
# File 'lib/chef-dk/command/verify.rb', line 222

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

Instance Attribute Details

#verification_resultsObject (readonly)

Returns the value of attribute verification_results.



219
220
221
# File 'lib/chef-dk/command/verify.rb', line 219

def verification_results
  @verification_results
end

#verification_statusObject (readonly)

Returns the value of attribute verification_status.



220
221
222
# File 'lib/chef-dk/command/verify.rb', line 220

def verification_status
  @verification_status
end

#verification_threadsObject (readonly)

Returns the value of attribute verification_threads.



218
219
220
# File 'lib/chef-dk/command/verify.rb', line 218

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



251
252
253
254
255
256
257
258
259
# File 'lib/chef-dk/command/verify.rb', line 251

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



261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
# File 'lib/chef-dk/command/verify.rb', line 261

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



240
241
242
# File 'lib/chef-dk/command/verify.rb', line 240

def omnibus_root
  config[:omnibus_dir] || super
end

#report_resultsObject



316
317
318
319
320
321
322
323
# File 'lib/chef-dk/command/verify.rb', line 316

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



229
230
231
232
233
234
235
236
237
238
# File 'lib/chef-dk/command/verify.rb', line 229

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

  validate_components!
  invoke_tests
  wait_for_tests
  report_results

  verification_status
end

#validate_components!Object



244
245
246
247
248
249
# File 'lib/chef-dk/command/verify.rb', line 244

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

#wait_for_testsObject



296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
# File 'lib/chef-dk/command/verify.rb', line 296

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