Class: Beaker::TestSuite
- Inherits:
-
Object
- Object
- Beaker::TestSuite
- Defined in:
- lib/beaker/test_suite.rb
Overview
Defined Under Namespace
Classes: TestSuiteResult
Instance Attribute Summary collapse
-
#fail_mode ⇒ Object
readonly
Returns the value of attribute fail_mode.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Instance Method Summary collapse
-
#initialize(name, hosts, options, timestamp, fail_mode = nil) ⇒ TestSuite
constructor
Create TestSuite instance.
-
#log_path(name, log_dir) ⇒ Object
Gives a full file path for output to be written to, maintaining the latest symlink.
-
#run ⇒ Object
Execute all the TestCase instances and then report the results as both plain text and xml.
-
#run_and_raise_on_failure ⇒ Object
Execute all the TestCases in this suite.
Constructor Details
#initialize(name, hosts, options, timestamp, fail_mode = nil) ⇒ TestSuite
Create Beaker::TestSuite instance
285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
# File 'lib/beaker/test_suite.rb', line 285 def initialize(name, hosts, , , fail_mode=nil) @logger = [:logger] @test_cases = [] @test_files = [name] @name = name.to_s.gsub(/\s+/, '-') @hosts = hosts @run = false @options = @fail_mode = fail_mode || @options[:fail_mode] || :slow @test_suite_results = TestSuiteResult.new(@options, name) @timestamp = report_and_raise(@logger, RuntimeError.new("#{@name}: no test files found..."), "TestSuite: initialize") if @test_files.empty? rescue => e report_and_raise(@logger, e, "TestSuite: initialize") end |
Instance Attribute Details
#fail_mode ⇒ Object (readonly)
Returns the value of attribute fail_mode.
271 272 273 |
# File 'lib/beaker/test_suite.rb', line 271 def fail_mode @fail_mode end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
271 272 273 |
# File 'lib/beaker/test_suite.rb', line 271 def name @name end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
271 272 273 |
# File 'lib/beaker/test_suite.rb', line 271 def @options end |
Instance Method Details
#log_path(name, log_dir) ⇒ Object
Gives a full file path for output to be written to, maintaining the latest symlink
401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 |
# File 'lib/beaker/test_suite.rb', line 401 def log_path(name, log_dir) FileUtils.mkdir_p(log_dir) unless File.directory?(log_dir) base_dir = log_dir link_dir = '' while File.dirname(base_dir) != '.' do link_dir = link_dir == '' ? File.basename(base_dir) : File.join(File.basename(base_dir), link_dir) base_dir = File.dirname(base_dir) end latest = File.join(base_dir, "latest") if !File.exist?(latest) or File.symlink?(latest) then File.delete(latest) if File.exist?(latest) || File.symlink?(latest) File.symlink(link_dir, latest) end File.join(log_dir, name) end |
#run ⇒ Object
Execute all the Beaker::TestCase instances and then report the results as both plain text and xml. The text result is reported to a newly created run log. Execution is dependent upon the fail_mode. If mode is :fast then stop running any additional Beaker::TestCase instances after first failure, if mode is :slow continue execution no matter what Beaker::TestCase results are.
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 |
# File 'lib/beaker/test_suite.rb', line 307 def run @run = true start_time = Time.now #Create a run log for this TestSuite. run_log = log_path("#{@name}-run.log", @options[:log_dated_dir]) @logger.add_destination(run_log) # This is an awful hack to maintain backward compatibility until tests # are ported to use logger. Still in use in PuppetDB tests Beaker.const_set(:Log, @logger) unless defined?( Log ) @test_suite_results.start_time = start_time @test_suite_results.total_tests = @test_files.length @test_files.each do |test_file| @logger.info "Begin #{test_file}" start = Time.now test_case = TestCase.new(@hosts, @logger, , test_file).run_test duration = Time.now - start @test_suite_results.add_test_case(test_case) @test_cases << test_case state = test_case.test_status == :skip ? 'skipp' : test_case.test_status msg = "#{test_file} #{state}ed in %.2f seconds" % duration.to_f case test_case.test_status when :pass @logger.success msg when :skip @logger.warn msg when :fail @logger.error msg break if @fail_mode.to_s !~ /slow/ #all failure modes except slow cause us to kick out early on failure when :error @logger.warn msg break if @fail_mode.to_s !~ /slow/ #all failure modes except slow cause us to kick out early on failure end end @test_suite_results.stop_time = Time.now # REVISIT: This changes global state, breaking logging in any future runs # of the suite – or, at least, making them highly confusing for anyone who # has not studied the implementation in detail. --daniel 2011-03-14 @test_suite_results.summarize( Logger.new(log_path("#{name}-summary.txt", @options[:log_dated_dir]), STDOUT) ) junit_file_log = log_path(@options[:xml_file], @options[:xml_dated_dir]) if @options[:xml_time_enabled] junit_file_time = log_path(@options[:xml_time], @options[:xml_dated_dir]) @test_suite_results.write_junit_xml( junit_file_log, @options[:xml_time] ) @test_suite_results.write_junit_xml( junit_file_time, @options[:xml_file], true ) else @test_suite_results.write_junit_xml( junit_file_log ) end #All done with this run, remove run log @logger.remove_destination(run_log) # Allow chaining operations... return self end |
#run_and_raise_on_failure ⇒ Object
Execute all the TestCases in this suite. This is a wrapper that catches any failures generated during TestSuite::run.
369 370 371 372 373 374 375 376 377 378 379 380 |
# File 'lib/beaker/test_suite.rb', line 369 def run_and_raise_on_failure begin run return self if @test_suite_results.success? rescue => e #failed during run report_and_raise(@logger, e, "TestSuite :run_and_raise_on_failure") else #failed during test report_and_raise(@logger, RuntimeError.new("Failed while running the #{name} suite"), "TestSuite: report_and_raise_on_failure") end end |