Home | History | Annotate | Download | only in tsc
      1 import os, re, logging
      2 from autotest_lib.client.bin import test, utils
      3 from autotest_lib.client.common_lib import error
      4 
      5 class tsc(test.test):
      6     version = 3
      7 
      8     preserve_srcdir = True
      9 
     10     def setup(self):
     11         os.chdir(self.srcdir)
     12         utils.make()
     13 
     14 
     15     def initialize(self):
     16         self.job.require_gcc()
     17 
     18 
     19     def run_once(self, args = '-t 650'):
     20         result = utils.run(self.srcdir + '/checktsc ' + args,
     21                            stdout_tee=open(os.path.join(self.resultsdir,
     22                                                         'checktsc.log'), 'w'),
     23                            ignore_status=True)
     24         if result.exit_status != 0:
     25             logging.error('Program checktsc exit status is %s',
     26                           result.exit_status)
     27             default_reason = ("UNKNOWN FAILURE: rc=%d from %s" %
     28                               (result.exit_status, result.command))
     29             ## Analyze result.stdout to see if it is possible to form qualified
     30             ## reason of failure and to raise an appropriate exception.
     31             ## For this test we qualify the reason of failure if the
     32             ## following conditions are met:
     33             ## (i) result.exit_status = 1
     34             ## (ii) result.stdout ends with 'FAIL'
     35             ## (iii) "FAIL" is preceeded by one or more
     36             ##       lines in the following format:
     37             ##       CPU x - CPU y = <delta>
     38             ## Set as a reason the line that contains max abs(delta)
     39             if result.exit_status == 1:
     40                 if result.stdout.strip('\n').endswith('FAIL'):
     41                     ## find all lines
     42                     ## CPU x - CPU y = <delta>
     43                     ## and parse out delta of max abs value
     44                     max_delta = 0
     45                     reason = ''
     46                     threshold = int(args.split()[1])
     47                     latencies = re.findall("CPU \d+ - CPU \d+ =\s+-*\d+",
     48                                            result.stdout)
     49                     for ln in latencies:
     50                         cur_delta = int(ln.split('=', 2)[1])
     51                         if abs(cur_delta) > max_delta:
     52                             max_delta = abs(cur_delta)
     53                             reason = ln
     54                     if max_delta > threshold:
     55                         reason = "Latency %s exceeds threshold %d" % (reason,
     56                                                                       threshold)
     57                         raise error.TestFail(reason)
     58 
     59             ## If we are here, we failed to qualify the reason of test failre
     60             ## Consider it as a test error
     61             raise error.TestError(default_reason)
     62