blob: dc089a5f12049acc460085cc3dc82e5893b19d21 [file] [log] [blame]
#!/usr/bin/python
import re
import sys
import fileinput
# extract a standard results block from the stream
def standard_results():
minimum = re.compile(r"^Min:\s+(?P<min>[\d\.]+)\s+(?P<units>\w+)")
maximum = re.compile(r"^Max:\s+(?P<max>[\d\.]+)\s+(?P<units>\w+)")
average = re.compile(r"^Avg:\s+(?P<average>[\d\.]+)\s+(?P<units>\w+)")
standarddev = re.compile(r"^StdDev:\s+(?P<stddev>[\d\.]+)\s+(?P<units>\w+)")
finished = 0
for line in sys.stdin:
for parser in [maximum, minimum, average, standarddev]:
result = parser.search(line)
if result is not None:
if parser is minimum:
test_min = result.group("min")
units = result.group("units")
print(
"%s%s_min pass %s %s "
% (test_name, test_args, test_min, units)
)
finished += 1
break
if parser is maximum:
test_max = result.group("max")
units = result.group("units")
finished += 1
print(
"%s%s_max pass %s %s "
% (test_name, test_args, test_max, units)
)
break
if parser is average:
test_avg = result.group("average")
units = result.group("units")
print(
"%s%s_avg pass %s %s "
% (test_name, test_args, test_avg, units)
)
finished += 1
break
if parser is standarddev:
test_stddev = result.group("stddev")
units = result.group("units")
print(
"%s%s_stddev pass %s %s "
% (test_name, test_args, test_stddev, units)
)
finished += 1
break
else:
continue
if finished == 4:
return
print("ERROR: Parser failed and ran to EOF")
sys.exit(-1)
def result_results():
results = re.compile(r"Result:\s+(?P<result>\w+)")
finished = 0
for line in sys.stdin:
for parser in [results]:
result = parser.search(line)
if result is not None:
if parser is results:
test_result = result.group("result")
print("%s-%s %s" % (test_name, test_args, test_result))
finished += 1
break
else:
continue
if finished == 1:
return
print("ERROR: Parser failed and ran to EOF")
sys.exit(-1)
def sched_jitter_results():
maximum = re.compile(r"^max jitter:\s+(?P<max>[\d\.]+)\s+(?P<units>\w+)")
finished = 0
for line in sys.stdin:
for parser in [maximum]:
result = parser.search(line)
if result is not None:
if parser is maximum:
test_max = result.group("max")
units = result.group("units")
print(
"%s%s_max_jitter pass %s %s"
% (test_name, test_args, test_max, units)
)
finished += 1
break
else:
continue
if finished == 1:
# print "min:%s max:%s avg:%s stddev:%s" % (test_min, test_max, test_avg, test_stddev)
return
print("ERROR: Parser failed and ran to EOF")
sys.exit(-1)
def pi_perf_results():
minimum = re.compile(r"^Min delay =\s+(?P<min>[\d\.]+)\s+(?P<units>\w+)")
maximum = re.compile(r"^Max delay =\s+(?P<max>[\d\.]+)\s+(?P<units>\w+)")
average = re.compile(r"^Average delay =\s+(?P<average>[\d\.]+)\s+(?P<units>\w+)")
standarddev = re.compile(
r"^Standard Deviation =\s+(?P<stddev>[\d\.]+)\s+(?P<units>\w+)"
)
finished = 0
for line in sys.stdin:
for parser in [maximum, minimum, average, standarddev]:
result = parser.search(line)
if result is not None:
if parser is minimum:
test_min = result.group("min")
units = result.group("units")
print(
"%s%s_min pass %s %s" % (test_name, test_args, test_min, units)
)
finished += 1
break
if parser is maximum:
test_max = result.group("max")
units = result.group("units")
print(
"%s%s_max pass %s %s" % (test_name, test_args, test_max, units)
)
finished += 1
break
if parser is average:
test_avg = result.group("average")
units = result.group("units")
print(
"%s%s_avg pass %s %s" % (test_name, test_args, test_avg, units)
)
finished += 1
break
if parser is standarddev:
test_stddev = result.group("stddev")
units = result.group("units")
print(
"%s%s_stddev pass %s %s"
% (test_name, test_args, test_stddev, units)
)
finished += 1
break
else:
continue
if finished == 4:
return
print("ERROR: Parser failed and ran to EOF")
sys.exit(-1)
def do_nothing():
return
# names of the test parsed out fo the input stream, converted to functioncalls
def async_handler():
standard_results()
result_results()
def tc_2():
result_results()
def gtod_latency():
standard_results()
def periodic_cpu_load_single():
standard_results()
def sched_latency():
standard_results()
def sched_jitter():
sched_jitter_results()
def sched_football():
result_results()
def rt_migrate():
result_results()
def pthread_kill_latency():
standard_results()
result_results()
def prio_wake():
result_results()
def pi_perf():
pi_perf_results()
def prio_preempt():
result_results()
def matrix_mult():
result_results()
def periodic_cpu_load():
result_results()
def async_handler_jk():
result_results()
# Parse the input stream and tuen test names into function calls to parse their
# details
test_start = re.compile(
r"--- Running testcase (?P<name>[a-zA-Z0-9_-]+)\s+(?P<args>[a-zA-Z0-9_.\- ]*?)\s*---"
)
test_finish = re.compile(r"The .* test appears to have completed.")
for line in sys.stdin:
for parser in [test_start, test_finish]:
result = parser.search(line)
if result is not None:
if parser is test_start:
test_name = result.group("name")
func_name = result.group("name")
func_name = func_name.replace("-", "_")
test_args = result.group("args")
test_args = test_args.replace(" ", "-")
print("")
print("test_start = " + test_name + test_args)
globals()[func_name]()
break
if parser is test_finish:
print("test_finished = " + test_name + test_args)
break
else:
continue