blob: fcd1e8ee726c645f1bcc6910eccef169e4298e5d [file] [log] [blame]
jadmanskie80d4712008-10-03 16:15:59 +00001import os, re
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):
mbligh9f0d48b2008-08-25 19:12:54 +00006 version = 2
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)
12 utils.system('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,
21 ignore_status=True)
22 print 'result.exit_status', result.exit_status
23 if result.exit_status != 0:
24 default_reason = ("UNKNOWN FAILURE: rc=%d from %s" %
25 (result.exit_status, result.command))
26 ## Analyze result.stdout to see if it is possible to form qualified
27 ## reason of failure and to raise an appropriate exception.
28 ## For this test we qualify the reason of failure if the
29 ## following conditions are met:
30 ## (i) result.exit_status = 1
31 ## (ii) result.stdout ends with 'FAIL'
32 ## (iii) "FAIL" is preceeded by one or more
33 ## lines in the following format:
34 ## CPU x - CPU y = <delta>
35 ## Set as a reason the line that contains max abs(delta)
36 if result.exit_status == 1:
37 if result.stdout.strip('\n').endswith('FAIL'):
38 ## find all lines
39 ## CPU x - CPU y = <delta>
40 ## and parse out delta of max abs value
41 max_delta = 0
42 reason = ''
43 threshold = int(args.split()[1])
44 latencies = re.findall("CPU \d+ - CPU \d+ =\s+-*\d+",
45 result.stdout)
46 for ln in latencies:
47 cur_delta = int(ln.split('=', 2)[1])
48 if abs(cur_delta) > max_delta:
49 max_delta = abs(cur_delta)
50 reason = ln
51 if max_delta > threshold:
52 reason = "Latency %s exceeds threshold %d" % (reason,
53 threshold)
54 raise error.TestFail(reason)
55
56 ## If we are here, we failed to qualify the reason of test failre
57 ## Consider it as a test error
58 raise error.TestError(default_reason)
59
60