blob: 97105fb98d8fa4ecfba04804c368a0e8b4f940bf [file] [log] [blame]
lmrb635b862009-09-10 14:53:21 +00001#!/usr/bin/python
lmr6f669ce2009-05-31 19:02:42 +00002"""
3Program that parses the autotest results and return a nicely printed final test
4result.
5
6@copyright: Red Hat 2008-2009
7"""
8
9def parse_results(text):
lmrb635b862009-09-10 14:53:21 +000010 """
11 Parse text containing Autotest results.
12
13 @return: A list of result 4-tuples.
14 """
lmr6f669ce2009-05-31 19:02:42 +000015 result_list = []
16 start_time_list = []
17 info_list = []
18
19 lines = text.splitlines()
20 for line in lines:
21 line = line.strip()
22 parts = line.split("\t")
23
24 # Found a START line -- get start time
lmrb635b862009-09-10 14:53:21 +000025 if (line.startswith("START") and len(parts) >= 5 and
26 parts[3].startswith("timestamp")):
lmr80460ce2010-05-17 20:55:02 +000027 start_time = float(parts[3].split("=")[1])
lmr6f669ce2009-05-31 19:02:42 +000028 start_time_list.append(start_time)
29 info_list.append("")
30
31 # Found an END line -- get end time, name and status
lmrb635b862009-09-10 14:53:21 +000032 elif (line.startswith("END") and len(parts) >= 5 and
33 parts[3].startswith("timestamp")):
lmr80460ce2010-05-17 20:55:02 +000034 end_time = float(parts[3].split("=")[1])
lmr6f669ce2009-05-31 19:02:42 +000035 start_time = start_time_list.pop()
36 info = info_list.pop()
37 test_name = parts[2]
38 test_status = parts[0].split()[1]
lmr80460ce2010-05-17 20:55:02 +000039 # Remove "kvm." prefix
lmrfc0e1412009-06-10 20:03:26 +000040 if test_name.startswith("kvm."):
Eric Li7edb3042011-01-06 17:57:17 -080041 test_name = test_name[4:]
lmrb635b862009-09-10 14:53:21 +000042 result_list.append((test_name, test_status,
43 int(end_time - start_time), info))
lmr6f669ce2009-05-31 19:02:42 +000044
45 # Found a FAIL/ERROR/GOOD line -- get failure/success info
lmrb635b862009-09-10 14:53:21 +000046 elif (len(parts) >= 6 and parts[3].startswith("timestamp") and
47 parts[4].startswith("localtime")):
lmr6f669ce2009-05-31 19:02:42 +000048 info_list[-1] = parts[5]
49
50 return result_list
51
52
lmr80460ce2010-05-17 20:55:02 +000053def print_result(result, name_width):
54 """
55 Nicely print a single Autotest result.
lmr6f669ce2009-05-31 19:02:42 +000056
lmr80460ce2010-05-17 20:55:02 +000057 @param result: a 4-tuple
58 @param name_width: test name maximum width
lmr6f669ce2009-05-31 19:02:42 +000059 """
60 if result:
lmr80460ce2010-05-17 20:55:02 +000061 format = "%%-%ds %%-10s %%-8s %%s" % name_width
62 print format % result
lmr6f669ce2009-05-31 19:02:42 +000063
64
lmr9fb48272009-09-09 22:04:53 +000065def main(resfiles):
lmr80460ce2010-05-17 20:55:02 +000066 result_lists = []
67 name_width = 40
lmr6f669ce2009-05-31 19:02:42 +000068
lmr9fb48272009-09-09 22:04:53 +000069 for resfile in resfiles:
lmr9fb48272009-09-09 22:04:53 +000070 try:
lmr80460ce2010-05-17 20:55:02 +000071 text = open(resfile).read()
lmr9fb48272009-09-09 22:04:53 +000072 except IOError:
lmr80460ce2010-05-17 20:55:02 +000073 print "Bad result file: %s" % resfile
74 continue
lmr9fb48272009-09-09 22:04:53 +000075 results = parse_results(text)
lmr80460ce2010-05-17 20:55:02 +000076 result_lists.append((resfile, results))
lmr16a783b2010-06-22 01:45:42 +000077 name_width = max([name_width] + [len(r[0]) for r in results])
lmr80460ce2010-05-17 20:55:02 +000078
79 print_result(("Test", "Status", "Seconds", "Info"), name_width)
80 print_result(("----", "------", "-------", "----"), name_width)
81
82 for resfile, results in result_lists:
83 print " (Result file: %s)" % resfile
84 for r in results:
85 print_result(r, name_width)
lmr6f669ce2009-05-31 19:02:42 +000086
87
lmr80460ce2010-05-17 20:55:02 +000088if __name__ == "__main__":
lmr9fb48272009-09-09 22:04:53 +000089 import sys, os, glob
lmr6f669ce2009-05-31 19:02:42 +000090
lmr80460ce2010-05-17 20:55:02 +000091 resfiles = glob.glob("../../results/default/status*")
lmr9fb48272009-09-09 22:04:53 +000092 if len(sys.argv) > 1:
lmr80460ce2010-05-17 20:55:02 +000093 if sys.argv[1] == "-h" or sys.argv[1] == "--help":
94 print "Usage: %s [result files]" % sys.argv[0]
lmr9fb48272009-09-09 22:04:53 +000095 sys.exit(0)
96 resfiles = sys.argv[1:]
97 main(resfiles)