|
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 |