harness: cleanup tests to not override is_finished() where possible
[barrelfish] / tools / harness / tests / TimerTest.py
1 ##########################################################################
2 # Copyright (c) 2011, ETH Zurich.
3 # All rights reserved.
4 #
5 # This file is distributed under the terms in the attached LICENSE file.
6 # If you do not find this file, copies can be found by writing to:
7 # ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8 ##########################################################################
9 import datetime
10 import re
11 import tests
12 from common import TestCommon
13 from results import PassFailResult
14
15 TIMERTEST_TIMEOUT = datetime.timedelta(minutes=5)
16
17 @tests.add_test
18 class TimerTest(TestCommon):
19     '''Timer test'''
20     name = "timer"
21     
22     def __init__(self, options):
23         super(TimerTest, self).__init__(options)
24         self.saw_line_A = False
25         self.saw_line_B = False
26
27     def get_modules(self, build, machine):
28         modules = super(TimerTest, self).get_modules(build, machine)
29         modules.add_module("lpc_timer", ["auto"])
30         core_ids = machine.get_coreids()
31         modules.add_module("timer_test",["core=%d" % core_ids[1]])
32         if len(core_ids) > 2:
33             modules.add_module("timer_test", ["core=%d" % core_ids[2], "B"])
34         else:
35             modules.add_module("timer_test", ["core=%d" % core_ids[1], "B"])
36         return modules
37
38     def get_test_A_finish_string(self):
39         return "Done with test for client_A"
40
41     def get_test_B_finish_string(self):
42         return "Done with test for client_B"
43     
44     def is_finished(self, line):
45         if line.startswith(self.get_test_A_finish_string()):
46             self.saw_line_A = True
47         if line.startswith(self.get_test_B_finish_string()):
48             self.saw_line_B = True
49         return (self.saw_line_A and self.saw_line_B) or \
50                 super(TimerTest, self).is_finished(line)
51     
52
53     
54     def boot(self, *args):
55         super(TimerTest, self).boot(*args)
56         self.set_timeout(TIMERTEST_TIMEOUT)
57
58     def process_data(self, testdir, rawiter):
59         # the test passed iff it has lines from both test_A and test_B
60         test_A_passed = False
61         test_B_passed = False
62
63         for line in rawiter:
64             if line.startswith(self.get_test_A_finish_string()):
65                 test_A_passed = True
66             if line.startswith(self.get_test_B_finish_string()):
67                 test_B_passed = True
68             if test_A_passed and test_B_passed:
69                 return PassFailResult(True)
70
71         return PassFailResult(test_A_passed and test_B_passed)