blob: bbed3112ac1922a77104f97e19cf6979841fe741 [file] [log] [blame]
mbligh5bba5ca2008-06-10 16:27:26 +00001#!/usr/bin/python
2
3import os, unittest, pickle, shutil, sys
4import common
5from autotest_lib.client.bin import job, boottool, config, sysinfo, harness
6from autotest_lib.client.common_lib import utils
7from autotest_lib.client.common_lib.test_utils import mock
8
9
10class TestBaseJob(unittest.TestCase):
11 def setUp(self):
12 # make god
13 self.god = mock.mock_god()
14
15 # need to set some environ variables
16 self.autodir = "autodir"
17 os.environ['AUTODIR'] = self.autodir
18
19 # set up some variables
20 self.control = "control"
21 self.jobtag = "jobtag"
22
23 # stub out some stuff
24 self.god.stub_function(os.path, 'exists')
mblighc1f8ced2008-06-13 21:43:28 +000025 self.god.stub_function(os.path, 'isdir')
mbligh5bba5ca2008-06-10 16:27:26 +000026 self.god.stub_function(os, 'mkdir')
27 self.god.stub_function(shutil, 'copyfile')
28 self.god.stub_function(job, 'open')
29 self.god.stub_function(utils, 'system')
30 self.god.stub_function(harness, 'select')
31 self.god.stub_function(sysinfo, 'log_per_reboot_data')
32 self.god.stub_function(pickle, 'load')
33 self.god.stub_function(sysinfo, 'log_per_reboot_data')
34
35 self.god.stub_class(config, 'config')
36 self.god.stub_class(boottool, 'boottool')
37
38
39 def tearDown(self):
40 self.god.unstub_all()
41
42
43 def construct_job(self, cont):
44 # will construct class instance using __new__
45 self.job = job.base_job.__new__(job.base_job)
46
47 # now some specific stubs
48 self.god.stub_function(self.job, '_load_state')
49 self.god.stub_function(self.job, '_init_group_level')
50 self.god.stub_function(self.job, 'config_get')
51 self.god.stub_function(self.job, 'record')
52 self.god.stub_function(self.job, '_increment_group_level')
53 self.god.stub_function(self.job, 'get_state')
54
55 # other setup
56 tmpdir = os.path.join(self.autodir, 'tmp')
57 results = os.path.join(self.autodir, 'results')
58 download = os.path.join(self.autodir, 'tests', 'download')
59 resultdir = os.path.join(self.autodir, 'results', self.jobtag)
60 sysinfodir = os.path.join(resultdir, 'sysinfo')
61
62 # record
63 self.job._load_state.expect_call()
64 if not cont:
65 os.path.exists.expect_call(tmpdir).and_return(False)
66 os.mkdir.expect_call(tmpdir)
67 os.path.exists.expect_call(results).and_return(False)
68 os.mkdir.expect_call(results)
69 os.path.exists.expect_call(download).and_return(False)
70 os.mkdir.expect_call(download)
71 os.path.exists.expect_call(resultdir).and_return(True)
72 utils.system.expect_call('rm -rf ' + resultdir)
73 os.mkdir.expect_call(resultdir)
74 os.mkdir.expect_call(sysinfodir)
75 os.mkdir.expect_call(os.path.join(resultdir, 'debug'))
76 os.mkdir.expect_call(os.path.join(resultdir,
77 'analysis'))
78 shutil.copyfile.expect_call(mock.is_string_comparator(),
79 os.path.join(resultdir, 'control'))
80
81 self.job._init_group_level.expect_call()
82 self.config = config.config.expect_new(self.job)
83 my_harness = self.god.create_mock_class(harness.harness,
84 'my_harness')
85 harness.select.expect_call(None,
86 self.job).and_return(my_harness)
87 self.job.config_get.expect_call(
88 'boottool.executable').and_return(None)
89 bootloader = boottool.boottool.expect_new(None)
90 sysinfo.log_per_reboot_data.expect_call(sysinfodir)
91 if not cont:
92 self.job.record.expect_call('START', None, None)
93 self.job._increment_group_level.expect_call()
94
95 my_harness.run_start.expect_call()
96 self.job.get_state.expect_call('__monitor_disk',
97 default=0.0).and_return(0.0)
98
99 # finish constructor
100 self.job.__init__(self.control, self.jobtag, cont)
101
102 # check
103 self.god.check_playback()
104
mblighc1f8ced2008-06-13 21:43:28 +0000105
mbligh5bba5ca2008-06-10 16:27:26 +0000106 def test_constructor(self):
107 self.construct_job(False)
108
109
110 def test_monitor_disk_usage(self):
111 self.construct_job(True)
112
113 # setup
114 self.god.stub_function(self.job, 'set_state')
115
116 # record
117 max_rate = 10.0
118 self.job.set_state.expect_call('__monitor_disk', max_rate)
119
120 # test
121 self.job.monitor_disk_usage(max_rate)
122 self.god.check_playback()
123
124
mblighc1f8ced2008-06-13 21:43:28 +0000125 def test_relitive_path(self):
126 self.construct_job(True)
127 dummy = "asdf"
128 ret = self.job.relative_path(os.path.join(self.job.resultdir, dummy))
129 self.assertEquals(ret, dummy)
130
131
132 def test_control_functions(self):
133 self.construct_job(True)
134 control_file = "blah"
135 self.job.control_set(control_file)
136 self.assertEquals(self.job.control_get(), os.path.abspath(control_file))
137
138
mbligh5bba5ca2008-06-10 16:27:26 +0000139 def test_harness_select(self):
140 self.construct_job(True)
141
142 # record
143 which = "which"
144 harness.select.expect_call(which, self.job).and_return(None)
145
146 # run and test
147 self.job.harness_select(which)
148 self.god.check_playback()
149
150
151 def test_config_set(self):
152 self.construct_job(True)
153
154 # record
155 name = "foo"
156 val = 10
157 self.config.set.expect_call(name, val)
158
159 # run and test
160 self.job.config_set(name, val)
161 self.god.check_playback()
162
163
164 def test_config_get(self):
165 self.construct_job(True)
166
167 # unstub config_get
168 self.god.unstub(self.job, 'config_get')
169 # record
170 name = "foo"
171 val = 10
172 self.config.get.expect_call(name).and_return(val)
173
174 # run and test
175 self.job.config_get(name)
176 self.god.check_playback()
177
178
mblighc1f8ced2008-06-13 21:43:28 +0000179 def test_setup_dirs_raise(self):
180 self.construct_job(True)
181
182 # setup
183 results_dir = 'foo'
184 tmp_dir = 'bar'
185
186 # record
187 os.path.exists.expect_call(tmp_dir).and_return(True)
188 os.path.isdir.expect_call(tmp_dir).and_return(False)
189
190 # test
191 self.assertRaises(ValueError, self.job.setup_dirs, results_dir, tmp_dir)
192 self.god.check_playback()
193
194
195 def test_setup_dirs(self):
196 self.construct_job(True)
197
198 # setup
199 results_dir1 = os.path.join(self.job.resultdir, 'build')
200 results_dir2 = os.path.join(self.job.resultdir, 'build.2')
201 results_dir3 = os.path.join(self.job.resultdir, 'build.3')
202 tmp_dir = 'bar'
203
204 # record
205 os.path.exists.expect_call(tmp_dir).and_return(False)
206 os.mkdir.expect_call(tmp_dir)
207 os.path.isdir.expect_call(tmp_dir).and_return(True)
208 os.path.exists.expect_call(results_dir1).and_return(True)
209 os.path.exists.expect_call(results_dir2).and_return(True)
210 os.path.exists.expect_call(results_dir3).and_return(False)
211 os.path.exists.expect_call(results_dir3).and_return(False)
212 os.mkdir.expect_call(results_dir3)
213
214 # test
215 self.assertEqual(self.job.setup_dirs(None, tmp_dir),
216 (results_dir3, tmp_dir))
217 self.god.check_playback()
218
219
mbligh5bba5ca2008-06-10 16:27:26 +0000220if __name__ == "__main__":
221 unittest.main()