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 = :slow) ⇒ 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 = :slow) ⇒ TestSuite
Create Beaker::TestSuite instance
246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 |
# File 'lib/beaker/test_suite.rb', line 246 def initialize(name, hosts, , , fail_mode = :slow) @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] @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.
232 233 234 |
# File 'lib/beaker/test_suite.rb', line 232 def fail_mode @fail_mode end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
232 233 234 |
# File 'lib/beaker/test_suite.rb', line 232 def name @name end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
232 233 234 |
# File 'lib/beaker/test_suite.rb', line 232 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
347 348 349 350 351 352 353 354 355 356 357 358 |
# File 'lib/beaker/test_suite.rb', line 347 def log_path(name, log_dir) log_parent_dir = File.dirname(log_dir) FileUtils.mkdir_p(log_dir) unless File.directory?(log_dir) latest = File.join(log_parent_dir, "latest") if !File.exist?(latest) or File.symlink?(latest) then File.delete(latest) if File.exist?(latest) File.symlink(File.basename(log_dir), latest) end File.join(log_parent_dir, 'latest', 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.
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 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 |
# File 'lib/beaker/test_suite.rb', line 268 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.notify "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.debug 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) ) @test_suite_results.write_junit_xml( log_path(@options[:xml_file], @options[:xml_dated_dir]) ) #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.
323 324 325 326 327 328 329 330 331 332 333 334 |
# File 'lib/beaker/test_suite.rb', line 323 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 |