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)