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
271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 |
# File 'lib/beaker/test_suite.rb', line 271 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.
257 258 259 |
# File 'lib/beaker/test_suite.rb', line 257 def fail_mode @fail_mode end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
257 258 259 |
# File 'lib/beaker/test_suite.rb', line 257 def name @name end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
257 258 259 |
# File 'lib/beaker/test_suite.rb', line 257 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
387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 |
# File 'lib/beaker/test_suite.rb', line 387 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.
293 294 295 296 297 298 299 300 301 302 303 304 305 306 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 |
# File 'lib/beaker/test_suite.rb', line 293 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.
355 356 357 358 359 360 361 362 363 364 365 366 |
# File 'lib/beaker/test_suite.rb', line 355 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 |