blob: 1c1058dd36c324401dd3d8257c3e02d72ee9b039 [file] [log] [blame]
lmr4c607f22009-06-02 11:50:38 +00001import os, re, logging
mbligh53da18e2009-01-05 21:13:26 +00002from autotest_lib.client.bin import test, utils
3from autotest_lib.client.common_lib import error
mbligh50f4b3c2007-03-14 16:42:41 +00004
5class tsc(test.test):
lmr1f2dfb02010-05-06 16:40:27 +00006 version = 3
mbligha8fe6372008-08-28 20:55:43 +00007
mbligh9f0d48b2008-08-25 19:12:54 +00008 preserve_srcdir = True
mbligh50f4b3c2007-03-14 16:42:41 +00009
mbligh9f0d48b2008-08-25 19:12:54 +000010 def setup(self):
jadmanski0afbb632008-06-06 21:10:57 +000011 os.chdir(self.srcdir)
Eric Li6f27d4f2010-09-29 10:55:17 -070012 utils.make()
mbligh50f4b3c2007-03-14 16:42:41 +000013
jadmanski0afbb632008-06-06 21:10:57 +000014
mblighc5ddfd12008-08-04 17:15:00 +000015 def initialize(self):
16 self.job.require_gcc()
17
18
mbligh9f0d48b2008-08-25 19:12:54 +000019 def run_once(self, args = '-t 650'):
mbligha8fe6372008-08-28 20:55:43 +000020 result = utils.run(self.srcdir + '/checktsc ' + args,
jadmanski262fa262009-10-30 22:14:59 +000021 stdout_tee=open(os.path.join(self.resultsdir,
22 'checktsc.log'), 'w'),
mbligha8fe6372008-08-28 20:55:43 +000023 ignore_status=True)
mbligha8fe6372008-08-28 20:55:43 +000024 if result.exit_status != 0:
lmr4c607f22009-06-02 11:50:38 +000025 logging.error('Program checktsc exit status is %s',
26 result.exit_status)
mbligha8fe6372008-08-28 20:55:43 +000027 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.
mbligh1ef218d2009-08-03 16:57:56 +000031 ## For this test we qualify the reason of failure if the
mbligha8fe6372008-08-28 20:55:43 +000032 ## 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)