summaryrefslogtreecommitdiffstats
path: root/scripts/lib/resulttool/report.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/resulttool/report.py')
-rw-r--r--scripts/lib/resulttool/report.py104
1 files changed, 55 insertions, 49 deletions
diff --git a/scripts/lib/resulttool/report.py b/scripts/lib/resulttool/report.py
index cb6b1cf948..a48c59f632 100644
--- a/scripts/lib/resulttool/report.py
+++ b/scripts/lib/resulttool/report.py
@@ -24,16 +24,19 @@ class ResultsTextReport(object):
24 'skipped': ['SKIPPED', 'skipped']} 24 'skipped': ['SKIPPED', 'skipped']}
25 25
26 26
27 def handle_ptest_result(self, k, status, result): 27 def handle_ptest_result(self, k, status, result, machine):
28 if machine not in self.ptests:
29 self.ptests[machine] = {}
30
28 if k == 'ptestresult.sections': 31 if k == 'ptestresult.sections':
29 # Ensure tests without any test results still show up on the report 32 # Ensure tests without any test results still show up on the report
30 for suite in result['ptestresult.sections']: 33 for suite in result['ptestresult.sections']:
31 if suite not in self.ptests: 34 if suite not in self.ptests[machine]:
32 self.ptests[suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []} 35 self.ptests[machine][suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []}
33 if 'duration' in result['ptestresult.sections'][suite]: 36 if 'duration' in result['ptestresult.sections'][suite]:
34 self.ptests[suite]['duration'] = result['ptestresult.sections'][suite]['duration'] 37 self.ptests[machine][suite]['duration'] = result['ptestresult.sections'][suite]['duration']
35 if 'timeout' in result['ptestresult.sections'][suite]: 38 if 'timeout' in result['ptestresult.sections'][suite]:
36 self.ptests[suite]['duration'] += " T" 39 self.ptests[machine][suite]['duration'] += " T"
37 return 40 return
38 try: 41 try:
39 _, suite, test = k.split(".", 2) 42 _, suite, test = k.split(".", 2)
@@ -47,22 +50,25 @@ class ResultsTextReport(object):
47 suite = suite + "." + suite1 50 suite = suite + "." + suite1
48 except ValueError: 51 except ValueError:
49 pass 52 pass
50 if suite not in self.ptests: 53 if suite not in self.ptests[machine]:
51 self.ptests[suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []} 54 self.ptests[machine][suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []}
52 for tk in self.result_types: 55 for tk in self.result_types:
53 if status in self.result_types[tk]: 56 if status in self.result_types[tk]:
54 self.ptests[suite][tk] += 1 57 self.ptests[machine][suite][tk] += 1
58
59 def handle_ltptest_result(self, k, status, result, machine):
60 if machine not in self.ltptests:
61 self.ltptests[machine] = {}
55 62
56 def handle_ltptest_result(self, k, status, result):
57 if k == 'ltpresult.sections': 63 if k == 'ltpresult.sections':
58 # Ensure tests without any test results still show up on the report 64 # Ensure tests without any test results still show up on the report
59 for suite in result['ltpresult.sections']: 65 for suite in result['ltpresult.sections']:
60 if suite not in self.ltptests: 66 if suite not in self.ltptests[machine]:
61 self.ltptests[suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []} 67 self.ltptests[machine][suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []}
62 if 'duration' in result['ltpresult.sections'][suite]: 68 if 'duration' in result['ltpresult.sections'][suite]:
63 self.ltptests[suite]['duration'] = result['ltpresult.sections'][suite]['duration'] 69 self.ltptests[machine][suite]['duration'] = result['ltpresult.sections'][suite]['duration']
64 if 'timeout' in result['ltpresult.sections'][suite]: 70 if 'timeout' in result['ltpresult.sections'][suite]:
65 self.ltptests[suite]['duration'] += " T" 71 self.ltptests[machine][suite]['duration'] += " T"
66 return 72 return
67 try: 73 try:
68 _, suite, test = k.split(".", 2) 74 _, suite, test = k.split(".", 2)
@@ -77,20 +83,23 @@ class ResultsTextReport(object):
77 suite = suite + "." + suite1 83 suite = suite + "." + suite1
78 except ValueError: 84 except ValueError:
79 pass 85 pass
80 if suite not in self.ltptests: 86 if suite not in self.ltptests[machine]:
81 self.ltptests[suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []} 87 self.ltptests[machine][suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []}
82 for tk in self.result_types: 88 for tk in self.result_types:
83 if status in self.result_types[tk]: 89 if status in self.result_types[tk]:
84 self.ltptests[suite][tk] += 1 90 self.ltptests[machine][suite][tk] += 1
91
92 def handle_ltpposixtest_result(self, k, status, result, machine):
93 if machine not in self.ltpposixtests:
94 self.ltpposixtests[machine] = {}
85 95
86 def handle_ltpposixtest_result(self, k, status, result):
87 if k == 'ltpposixresult.sections': 96 if k == 'ltpposixresult.sections':
88 # Ensure tests without any test results still show up on the report 97 # Ensure tests without any test results still show up on the report
89 for suite in result['ltpposixresult.sections']: 98 for suite in result['ltpposixresult.sections']:
90 if suite not in self.ltpposixtests: 99 if suite not in self.ltpposixtests[machine]:
91 self.ltpposixtests[suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []} 100 self.ltpposixtests[machine][suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []}
92 if 'duration' in result['ltpposixresult.sections'][suite]: 101 if 'duration' in result['ltpposixresult.sections'][suite]:
93 self.ltpposixtests[suite]['duration'] = result['ltpposixresult.sections'][suite]['duration'] 102 self.ltpposixtests[machine][suite]['duration'] = result['ltpposixresult.sections'][suite]['duration']
94 return 103 return
95 try: 104 try:
96 _, suite, test = k.split(".", 2) 105 _, suite, test = k.split(".", 2)
@@ -104,19 +113,13 @@ class ResultsTextReport(object):
104 suite = suite + "." + suite1 113 suite = suite + "." + suite1
105 except ValueError: 114 except ValueError:
106 pass 115 pass
107 if suite not in self.ltpposixtests: 116 if suite not in self.ltpposixtests[machine]:
108 self.ltpposixtests[suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []} 117 self.ltpposixtests[machine][suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []}
109 for tk in self.result_types: 118 for tk in self.result_types:
110 if status in self.result_types[tk]: 119 if status in self.result_types[tk]:
111 self.ltpposixtests[suite][tk] += 1 120 self.ltpposixtests[machine][suite][tk] += 1
112 121
113 def get_aggregated_test_result(self, logger, testresult): 122 def get_aggregated_test_result(self, logger, testresult, machine):
114 test_count_report = {'passed': 0, 'failed': 0, 'skipped': 0, 'failed_testcases': []}
115 def get_aggregated_test_result(self, logger, testresult):
116 test_count_report = {'passed': 0, 'failed': 0, 'skipped': 0, 'failed_testcases': []}
117 def get_aggregated_test_result(self, logger, testresult):
118 test_count_report = {'passed': 0, 'failed': 0, 'skipped': 0, 'failed_testcases': []}
119 def get_aggregated_test_result(self, logger, testresult):
120 test_count_report = {'passed': 0, 'failed': 0, 'skipped': 0, 'failed_testcases': []} 123 test_count_report = {'passed': 0, 'failed': 0, 'skipped': 0, 'failed_testcases': []}
121 result = testresult.get('result', []) 124 result = testresult.get('result', [])
122 for k in result: 125 for k in result:
@@ -127,11 +130,11 @@ class ResultsTextReport(object):
127 if test_status in self.result_types['failed']: 130 if test_status in self.result_types['failed']:
128 test_count_report['failed_testcases'].append(k) 131 test_count_report['failed_testcases'].append(k)
129 if k.startswith("ptestresult."): 132 if k.startswith("ptestresult."):
130 self.handle_ptest_result(k, test_status, result) 133 self.handle_ptest_result(k, test_status, result, machine)
131 if k.startswith("ltpresult."): 134 if k.startswith("ltpresult."):
132 self.handle_ltptest_result(k, test_status, result) 135 self.handle_ltptest_result(k, test_status, result, machine)
133 if k.startswith("ltpposixresult."): 136 if k.startswith("ltpposixresult."):
134 self.handle_ltpposixtest_result(k, test_status, result) 137 self.handle_ltpposixtest_result(k, test_status, result, machine)
135 return test_count_report 138 return test_count_report
136 139
137 def print_test_report(self, template_file_name, test_count_reports): 140 def print_test_report(self, template_file_name, test_count_reports):
@@ -141,10 +144,8 @@ class ResultsTextReport(object):
141 env = Environment(loader=file_loader, trim_blocks=True) 144 env = Environment(loader=file_loader, trim_blocks=True)
142 template = env.get_template(template_file_name) 145 template = env.get_template(template_file_name)
143 havefailed = False 146 havefailed = False
144 haveptest = bool(self.ptests)
145 haveltp = bool(self.ltptests)
146 haveltpposix = bool(self.ltpposixtests)
147 reportvalues = [] 147 reportvalues = []
148 machines = []
148 cols = ['passed', 'failed', 'skipped'] 149 cols = ['passed', 'failed', 'skipped']
149 maxlen = {'passed' : 0, 'failed' : 0, 'skipped' : 0, 'result_id': 0, 'testseries' : 0, 'ptest' : 0 ,'ltptest': 0, 'ltpposixtest': 0} 150 maxlen = {'passed' : 0, 'failed' : 0, 'skipped' : 0, 'result_id': 0, 'testseries' : 0, 'ptest' : 0 ,'ltptest': 0, 'ltpposixtest': 0}
150 for line in test_count_reports: 151 for line in test_count_reports:
@@ -162,21 +163,24 @@ class ResultsTextReport(object):
162 reportvalues.append(vals) 163 reportvalues.append(vals)
163 if line['failed_testcases']: 164 if line['failed_testcases']:
164 havefailed = True 165 havefailed = True
165 for ptest in self.ptests: 166 if line['machine'] not in machines:
166 if len(ptest) > maxlen['ptest']: 167 machines.append(line['machine'])
167 maxlen['ptest'] = len(ptest) 168 for (machine, report) in self.ptests.items():
168 for ltptest in self.ltptests: 169 for ptest in self.ptests[machine]:
169 if len(ltptest) > maxlen['ltptest']: 170 if len(ptest) > maxlen['ptest']:
170 maxlen['ltptest'] = len(ltptest) 171 maxlen['ptest'] = len(ptest)
171 for ltpposixtest in self.ltpposixtests: 172 for (machine, report) in self.ltptests.items():
172 if len(ltpposixtest) > maxlen['ltpposixtest']: 173 for ltptest in self.ltptests[machine]:
173 maxlen['ltpposixtest'] = len(ltpposixtest) 174 if len(ltptest) > maxlen['ltptest']:
175 maxlen['ltptest'] = len(ltptest)
176 for (machine, report) in self.ltpposixtests.items():
177 for ltpposixtest in self.ltpposixtests[machine]:
178 if len(ltpposixtest) > maxlen['ltpposixtest']:
179 maxlen['ltpposixtest'] = len(ltpposixtest)
174 output = template.render(reportvalues=reportvalues, 180 output = template.render(reportvalues=reportvalues,
175 havefailed=havefailed, 181 havefailed=havefailed,
176 haveptest=haveptest, 182 machines=machines,
177 ptests=self.ptests, 183 ptests=self.ptests,
178 haveltp=haveltp,
179 haveltpposix=haveltpposix,
180 ltptests=self.ltptests, 184 ltptests=self.ltptests,
181 ltpposixtests=self.ltpposixtests, 185 ltpposixtests=self.ltpposixtests,
182 maxlen=maxlen) 186 maxlen=maxlen)
@@ -200,7 +204,9 @@ class ResultsTextReport(object):
200 for testsuite in testresults: 204 for testsuite in testresults:
201 for resultid in testresults[testsuite]: 205 for resultid in testresults[testsuite]:
202 result = testresults[testsuite][resultid] 206 result = testresults[testsuite][resultid]
203 test_count_report = self.get_aggregated_test_result(logger, result) 207 machine = result['configuration']['MACHINE']
208 test_count_report = self.get_aggregated_test_result(logger, result, machine)
209 test_count_report['machine'] = machine
204 test_count_report['testseries'] = result['configuration']['TESTSERIES'] 210 test_count_report['testseries'] = result['configuration']['TESTSERIES']
205 test_count_report['result_id'] = resultid 211 test_count_report['result_id'] = resultid
206 test_count_reports.append(test_count_report) 212 test_count_reports.append(test_count_report)