blob: 9710fd07d61b017a710a96dcb896cd02336bf84e [file] [log] [blame]
jadmanskia9894d02009-08-21 16:49:48 +00001#!/usr/bin/python
mbligh234a84f2008-11-20 19:57:43 +00002
3"""Unit Tests for autotest.client.common_lib.test"""
4
5__author__ = 'gps@google.com (Gregory P. Smith)'
6
7import unittest
8from cStringIO import StringIO
9import common
showardf1175bb2009-06-17 19:34:36 +000010from autotest_lib.client.common_lib import error, test
mbligh234a84f2008-11-20 19:57:43 +000011from autotest_lib.client.common_lib.test_utils import mock
12
mbligh4b835b82009-02-11 01:26:13 +000013class TestTestCase(unittest.TestCase):
mbligh234a84f2008-11-20 19:57:43 +000014 class _neutered_base_test(test.base_test):
15 """A child class of base_test to avoid calling the constructor."""
16 def __init__(self, *args, **kwargs):
mbligh4b835b82009-02-11 01:26:13 +000017 class MockJob(object):
18 pass
19 class MockProfilerManager(object):
20 def active(self):
21 return False
mblighc6bf6012009-10-02 00:02:15 +000022 def present(self):
23 return True
mbligh4b835b82009-02-11 01:26:13 +000024 self.job = MockJob()
showarda6082ef2009-10-12 20:25:44 +000025 self.job.default_profile_only = False
mbligh4b835b82009-02-11 01:26:13 +000026 self.job.profilers = MockProfilerManager()
jadmanskia93fbca2009-08-21 15:34:04 +000027 self._new_keyval = False
mbligh5e703a22009-06-15 22:00:12 +000028 self.iteration = 0
mbligh742ae422009-05-13 20:46:41 +000029 self.before_iteration_hooks = []
30 self.after_iteration_hooks = []
31
mbligh234a84f2008-11-20 19:57:43 +000032
33 def setUp(self):
34 self.god = mock.mock_god()
35 self.test = self._neutered_base_test()
mbligh234a84f2008-11-20 19:57:43 +000036
37
38 def tearDown(self):
39 self.god.unstub_all()
40
41
mbligh4b835b82009-02-11 01:26:13 +000042
mbligh4b835b82009-02-11 01:26:13 +000043class Test_base_test_execute(TestTestCase):
44 # Test the various behaviors of the base_test.execute() method.
45 def setUp(self):
46 TestTestCase.setUp(self)
mbligh4b835b82009-02-11 01:26:13 +000047 self.god.stub_function(self.test, 'run_once_profiling')
48 self.god.stub_function(self.test, 'postprocess')
mbligh32cb5b42009-05-01 23:05:09 +000049 self.god.stub_function(self.test, 'process_failed_constraints')
mbligh4b835b82009-02-11 01:26:13 +000050
mbligh4b835b82009-02-11 01:26:13 +000051
mbligh4395bbd2009-03-25 19:34:17 +000052 def test_call_run_once(self):
53 # setup
54 self.god.stub_function(self.test, 'drop_caches_between_iterations')
55 self.god.stub_function(self.test, 'run_once')
56 self.god.stub_function(self.test, 'postprocess_iteration')
mbligh7af09972009-04-17 22:17:08 +000057 self.god.stub_function(self.test, 'analyze_perf_constraints')
mbligh4395bbd2009-03-25 19:34:17 +000058 before_hook = self.god.create_mock_function('before_hook')
59 after_hook = self.god.create_mock_function('after_hook')
mbligh742ae422009-05-13 20:46:41 +000060 self.test.register_before_iteration_hook(before_hook)
61 self.test.register_after_iteration_hook(after_hook)
mbligh4395bbd2009-03-25 19:34:17 +000062
63 # tests the test._call_run_once implementation
64 self.test.drop_caches_between_iterations.expect_call()
showardd4ead172009-05-01 00:08:56 +000065 before_hook.expect_call(self.test)
mbligh4395bbd2009-03-25 19:34:17 +000066 self.test.run_once.expect_call(1, 2, arg='val')
showardd4ead172009-05-01 00:08:56 +000067 after_hook.expect_call(self.test)
mbligh4395bbd2009-03-25 19:34:17 +000068 self.test.postprocess_iteration.expect_call()
mbligh7af09972009-04-17 22:17:08 +000069 self.test.analyze_perf_constraints.expect_call([])
jadmanskia93fbca2009-08-21 15:34:04 +000070 self.test._call_run_once([], False, None, (1, 2), {'arg': 'val'})
showardd4ead172009-05-01 00:08:56 +000071 self.god.check_playback()
mbligh4395bbd2009-03-25 19:34:17 +000072
73
74 def _expect_call_run_once(self):
jadmanskia93fbca2009-08-21 15:34:04 +000075 self.test._call_run_once.expect_call((), False, None, (), {})
mbligh4395bbd2009-03-25 19:34:17 +000076
77
mbligh4b835b82009-02-11 01:26:13 +000078 def test_execute_test_length(self):
79 # test that test_length overrides iterations and works.
mbligh4395bbd2009-03-25 19:34:17 +000080 self.god.stub_function(self.test, '_call_run_once')
81
82 self._expect_call_run_once()
83 self._expect_call_run_once()
84 self._expect_call_run_once()
mbligha49c5cb2009-02-26 01:01:09 +000085 self.test.run_once_profiling.expect_call(None)
mbligh4b835b82009-02-11 01:26:13 +000086 self.test.postprocess.expect_call()
mbligh32cb5b42009-05-01 23:05:09 +000087 self.test.process_failed_constraints.expect_call()
mbligh4b835b82009-02-11 01:26:13 +000088
89 fake_time = iter(xrange(4)).next
90 self.test.execute(iterations=1, test_length=3, _get_time=fake_time)
91 self.god.check_playback()
92
93
94 def test_execute_iterations(self):
95 # test that iterations works.
mbligh4395bbd2009-03-25 19:34:17 +000096 self.god.stub_function(self.test, '_call_run_once')
97
mbligh4b835b82009-02-11 01:26:13 +000098 iterations = 2
99 for _ in range(iterations):
mbligh4395bbd2009-03-25 19:34:17 +0000100 self._expect_call_run_once()
mbligha49c5cb2009-02-26 01:01:09 +0000101 self.test.run_once_profiling.expect_call(None)
mbligh4b835b82009-02-11 01:26:13 +0000102 self.test.postprocess.expect_call()
mbligh32cb5b42009-05-01 23:05:09 +0000103 self.test.process_failed_constraints.expect_call()
mbligh4b835b82009-02-11 01:26:13 +0000104
105 self.test.execute(iterations=iterations)
106 self.god.check_playback()
107
108
109 def _mock_calls_for_execute_no_iterations(self):
mbligha49c5cb2009-02-26 01:01:09 +0000110 self.test.run_once_profiling.expect_call(None)
mbligh4b835b82009-02-11 01:26:13 +0000111 self.test.postprocess.expect_call()
mbligh32cb5b42009-05-01 23:05:09 +0000112 self.test.process_failed_constraints.expect_call()
mbligh4b835b82009-02-11 01:26:13 +0000113
114
115 def test_execute_iteration_zero(self):
116 # test that iterations=0 works.
117 self._mock_calls_for_execute_no_iterations()
118
119 self.test.execute(iterations=0)
120 self.god.check_playback()
121
122
123 def test_execute_profile_only(self):
mblighc6bf6012009-10-02 00:02:15 +0000124 # test that profile_only=True works.
jadmanskia93fbca2009-08-21 15:34:04 +0000125 self.god.stub_function(self.test, 'drop_caches_between_iterations')
126 self.test.drop_caches_between_iterations.expect_call()
127 self.test.run_once_profiling.expect_call(None)
128 self.test.drop_caches_between_iterations.expect_call()
129 self.test.run_once_profiling.expect_call(None)
130 self.test.postprocess.expect_call()
131 self.test.process_failed_constraints.expect_call()
mbligh4b835b82009-02-11 01:26:13 +0000132 self.test.execute(profile_only=True, iterations=2)
133 self.god.check_playback()
134
135
showarda6082ef2009-10-12 20:25:44 +0000136 def test_execute_default_profile_only(self):
137 # test that profile_only=True works.
138 self.god.stub_function(self.test, 'drop_caches_between_iterations')
139 for _ in xrange(3):
140 self.test.drop_caches_between_iterations.expect_call()
141 self.test.run_once_profiling.expect_call(None)
142 self.test.postprocess.expect_call()
143 self.test.process_failed_constraints.expect_call()
144 self.test.job.default_profile_only = True
145 self.test.execute(iterations=3)
146 self.god.check_playback()
147
148
mbligha49c5cb2009-02-26 01:01:09 +0000149 def test_execute_postprocess_profiled_false(self):
150 # test that postprocess_profiled_run=False works
mbligh4395bbd2009-03-25 19:34:17 +0000151 self.god.stub_function(self.test, '_call_run_once')
152
jadmanskia93fbca2009-08-21 15:34:04 +0000153 self.test._call_run_once.expect_call((), False, False, (), {})
mbligha49c5cb2009-02-26 01:01:09 +0000154 self.test.run_once_profiling.expect_call(False)
155 self.test.postprocess.expect_call()
mbligh32cb5b42009-05-01 23:05:09 +0000156 self.test.process_failed_constraints.expect_call()
mbligha49c5cb2009-02-26 01:01:09 +0000157
158 self.test.execute(postprocess_profiled_run=False, iterations=1)
159 self.god.check_playback()
160
161
162 def test_execute_postprocess_profiled_true(self):
163 # test that postprocess_profiled_run=True works
mbligh4395bbd2009-03-25 19:34:17 +0000164 self.god.stub_function(self.test, '_call_run_once')
165
jadmanskia93fbca2009-08-21 15:34:04 +0000166 self.test._call_run_once.expect_call((), False, True, (), {})
mbligha49c5cb2009-02-26 01:01:09 +0000167 self.test.run_once_profiling.expect_call(True)
168 self.test.postprocess.expect_call()
mbligh32cb5b42009-05-01 23:05:09 +0000169 self.test.process_failed_constraints.expect_call()
mbligha49c5cb2009-02-26 01:01:09 +0000170
171 self.test.execute(postprocess_profiled_run=True, iterations=1)
172 self.god.check_playback()
173
174
mbligh234a84f2008-11-20 19:57:43 +0000175if __name__ == '__main__':
176 unittest.main()