tests/run-all.rb
branchdevelopment
changeset 3000 08d798b4ef80
child 3020 e7c286435bfe
equal deleted inserted replaced
2999:fe87c228905c 3000:08d798b4ef80
       
     1 #!/usr/bin/ruby
       
     2 
       
     3 require 'fileutils'
       
     4 
       
     5 PACKAGES = [ 'stx:libjava', 'stx:libjava/mauve', 'stx:libjava/experiments', 'stx:libjava/tools' ]
       
     6 PARAMS = {
       
     7 	'STX_LIBJAVA_ENABLE_JIT' => [
       
     8 		#'1',
       
     9 		'0'
       
    10 	],
       
    11 	'STX_LIBJAVA_RELEASE' => [
       
    12 		'JDK6',
       
    13 		'JDK7'
       
    14 	]
       
    15 }
       
    16 
       
    17 REPORT_RUNNER = File.join(File.dirname(__FILE__), '..', '..', 'goodies', 'builder', 'reports' , 'report-runner.sh')
       
    18 REPORT_DIR="results-#{Time.now.strftime("%Y-%m-%d-%H-%M-%S")}"
       
    19 
       
    20 def run_package(package, params = {})
       
    21 	ident = []
       
    22 	setup = 'Stdin close'
       
    23 	params.keys.sort.each do | name |
       
    24 		value = params[name]
       
    25 		ident.push("#{name}=#{value}")
       
    26 		ENV[name] = value
       
    27 	end
       
    28 	if ident.size > 0 then
       
    29 		logf = File.join(REPORT_DIR, "#{package.tr(':/', '__')}-#{ident.join('-')}-Test.out")
       
    30 		ident = "#{ident.join('-')}"
       
    31 		cmd = %W[#{REPORT_RUNNER} -S #{setup} -D #{REPORT_DIR} -i #{ident} -r Builder::TestReport -p #{package}]
       
    32 		#cmd = %W[#{REPORT_RUNNER} -S #{setup} -D #{REPORT_DIR} -i #{ident} -r Builder::TestReport ]
       
    33 	else
       
    34 		logf = File.join(REPORT_DIR, "#{package.tr(':/', '__')}-Test.out")
       
    35 		ident = ''
       
    36 		cmd = %W[#{REPORT_RUNNER} -S #{setup}  -D #{REPORT_DIR} -r Builder::TestReport -p #{package}]
       
    37 	end
       
    38 
       
    39 	puts "Running #{package} {#{ident}}"
       
    40 	pattern = /SUMMARY: (?<run>\d+) run, (?<passed>\d+) passed, (?<skipped>\d+) skipped, (?<failed>\d+) failed, (?<error>\d+) error/
       
    41 	result = {
       
    42 						'run' => '?',
       
    43 						'passed' => '?',
       
    44 						'skipped' => '?',
       
    45 						'failed' => '?',
       
    46 						'error' => '?'
       
    47 					}
       
    48 	IO.popen(cmd + [ :err => [:child, :out]]) do | out |
       
    49 		File.open(logf, "w") do | log |
       
    50 			out.each do | line |
       
    51 				log.puts line
       
    52 				puts line
       
    53 				match = pattern.match (line)
       
    54 				if match then
       
    55 					result = {
       
    56 						'run' => match['run'],
       
    57 						'passed' => match['passed'],
       
    58 						'skipped' => match['skipped'],
       
    59 						'failed' => match['failed'],
       
    60 						'error' => match['error']
       
    61 					}
       
    62 				end
       
    63 			end
       
    64 		end
       
    65 	end
       
    66 	result['ident'] = ident
       
    67 	result['package'] = package
       
    68 	result['params'] = params
       
    69 	return result
       
    70 end
       
    71 
       
    72 def combine(params, bound = {}, &block)
       
    73 	if bound.size == params.size then
       
    74 		yield bound
       
    75 	else
       
    76 		params_to_combine = params.keys.sort.select { | p | not bound.key? p }
       
    77 		param = params_to_combine.to_a().first()
       
    78 		values = params[param]
       
    79 		values.each do | value |
       
    80 			combined = bound.clone()
       
    81 			combined[param] = value
       
    82 			combine(params, combined, &block)
       
    83 		end
       
    84 	end
       
    85 end
       
    86 
       
    87 
       
    88 def write_results_txt_to_file(filename, results)
       
    89   File.open(filename, "a+") do |file|
       
    90     write_results_txt(file, results)
       
    91   end
       
    92 end
       
    93 
       
    94 
       
    95 def write_results_txt(file, results)
       
    96     file.write("\n")
       
    97     file.write(Time.now.to_s)
       
    98     file.write("\n")
       
    99     params = PARAMS.keys.sort
       
   100     values = [[ "Package"] + params + ['result', 'run', 'passed', 'skipped' , 'failed' , 'error']]
       
   101     results.each do | result |
       
   102       param_values = params.collect { | p | result['params'][p] }
       
   103       result_text = '?'
       
   104       if result['run'] != '0' then
       
   105 	      if result['error'] != '0' then
       
   106 	      	result_text = 'ERROR'
       
   107 	      elsif result['failed'] != '0' then
       
   108 	      	result_text = 'FAILED'
       
   109 				else
       
   110 					result_text = 'passed'
       
   111 				end
       
   112 			end
       
   113 
       
   114       row = [ result['package'] ] + param_values + [ result_text, result['run'], result['passed'], result['skipped'], result['failed'], result['error'] ]
       
   115       values.push(row)
       
   116     end
       
   117     max_lengths = values[0].map { |val| val.length }
       
   118     values.each do |row|
       
   119       row.each_with_index do |elem, index|
       
   120         elem_size = elem.size
       
   121         max_lengths[index] = elem_size if elem_size > max_lengths[index]
       
   122       end
       
   123     end
       
   124     values.each do |val|
       
   125       format = max_lengths.map { |length| "%#{length}s" }.join(" " * 3)
       
   126       file.write(format % val)
       
   127       file.write("\n")
       
   128     end
       
   129     file.write("--\n")
       
   130 
       
   131 end
       
   132 
       
   133 
       
   134 FileUtils.mkdir_p REPORT_DIR
       
   135 
       
   136 results = []
       
   137 
       
   138 combine(PARAMS) do | bound |
       
   139 	PACKAGES.each do | package |
       
   140 		results.push(run_package(package, bound))
       
   141 	end
       
   142 end
       
   143 
       
   144 write_results_txt_to_file(File.join(REPORT_DIR, 'results.txt'), results)
       
   145 write_results_txt(STDOUT, results)
       
   146 
       
   147