62 lines
2.6 KiB
Python
62 lines
2.6 KiB
Python
import os, re, logging
|
|
from autotest_lib.client.bin import test, utils
|
|
from autotest_lib.client.common_lib import error
|
|
|
|
class tsc(test.test):
|
|
version = 3
|
|
|
|
preserve_srcdir = True
|
|
|
|
def setup(self):
|
|
os.chdir(self.srcdir)
|
|
utils.make()
|
|
|
|
|
|
def initialize(self):
|
|
self.job.require_gcc()
|
|
|
|
|
|
def run_once(self, args = '-t 650'):
|
|
result = utils.run(self.srcdir + '/checktsc ' + args,
|
|
stdout_tee=open(os.path.join(self.resultsdir,
|
|
'checktsc.log'), 'w'),
|
|
ignore_status=True)
|
|
if result.exit_status != 0:
|
|
logging.error('Program checktsc exit status is %s',
|
|
result.exit_status)
|
|
default_reason = ("UNKNOWN FAILURE: rc=%d from %s" %
|
|
(result.exit_status, result.command))
|
|
## Analyze result.stdout to see if it is possible to form qualified
|
|
## reason of failure and to raise an appropriate exception.
|
|
## For this test we qualify the reason of failure if the
|
|
## following conditions are met:
|
|
## (i) result.exit_status = 1
|
|
## (ii) result.stdout ends with 'FAIL'
|
|
## (iii) "FAIL" is preceeded by one or more
|
|
## lines in the following format:
|
|
## CPU x - CPU y = <delta>
|
|
## Set as a reason the line that contains max abs(delta)
|
|
if result.exit_status == 1:
|
|
if result.stdout.strip('\n').endswith('FAIL'):
|
|
## find all lines
|
|
## CPU x - CPU y = <delta>
|
|
## and parse out delta of max abs value
|
|
max_delta = 0
|
|
reason = ''
|
|
threshold = int(args.split()[1])
|
|
latencies = re.findall("CPU \d+ - CPU \d+ =\s+-*\d+",
|
|
result.stdout)
|
|
for ln in latencies:
|
|
cur_delta = int(ln.split('=', 2)[1])
|
|
if abs(cur_delta) > max_delta:
|
|
max_delta = abs(cur_delta)
|
|
reason = ln
|
|
if max_delta > threshold:
|
|
reason = "Latency %s exceeds threshold %d" % (reason,
|
|
threshold)
|
|
raise error.TestFail(reason)
|
|
|
|
## If we are here, we failed to qualify the reason of test failre
|
|
## Consider it as a test error
|
|
raise error.TestError(default_reason)
|