blob: 04d265cbcd02d7015a6cd8738ef2dddbbcbeb136 [file] [log] [blame]
showarded2afea2009-07-07 20:54:07 +00001#!/usr/bin/python
2
3import unittest
4import common
5from autotest_lib.frontend import setup_django_environment
6from autotest_lib.frontend.afe import frontend_test_utils
jamesren4a41e012010-07-16 22:33:48 +00007from autotest_lib.frontend.afe import models, model_attributes, model_logic
8from autotest_lib.client.common_lib import global_config
Aviv Keshet3dd8beb2013-05-13 17:36:04 -07009from autotest_lib.client.common_lib import control_data
showarded2afea2009-07-07 20:54:07 +000010
showarda5288b42009-07-28 20:06:08 +000011
12class AclGroupTest(unittest.TestCase,
13 frontend_test_utils.FrontendTestMixin):
14 def setUp(self):
15 self._frontend_common_setup()
16
17
18 def tearDown(self):
19 self._frontend_common_teardown()
20
21
22 def _check_acls(self, host, acl_name_list):
23 actual_acl_names = [acl_group.name for acl_group
24 in host.aclgroup_set.all()]
25 self.assertEquals(set(actual_acl_names), set(acl_name_list))
26
27
28 def test_on_host_membership_change(self):
29 host1, host2 = self.hosts[1:3]
30 everyone_acl = models.AclGroup.objects.get(name='Everyone')
31
32 host1.aclgroup_set.clear()
33 self._check_acls(host1, [])
34 host2.aclgroup_set.add(everyone_acl)
35 self._check_acls(host2, ['Everyone', 'my_acl'])
36
37 models.AclGroup.on_host_membership_change()
38
39 self._check_acls(host1, ['Everyone'])
40 self._check_acls(host2, ['my_acl'])
41
42
showardafd97de2009-10-01 18:45:09 +000043class HostTest(unittest.TestCase,
44 frontend_test_utils.FrontendTestMixin):
45 def setUp(self):
46 self._frontend_common_setup()
47
48
49 def tearDown(self):
50 self._frontend_common_teardown()
51
52
53 def test_add_host_previous_one_time_host(self):
54 # ensure that when adding a host which was previously used as a one-time
55 # host, the status isn't reset, since this can interfere with the
56 # scheduler.
57 host = models.Host.create_one_time_host('othost')
58 self.assertEquals(host.invalid, True)
59 self.assertEquals(host.status, models.Host.Status.READY)
60
61 host.status = models.Host.Status.RUNNING
62 host.save()
63
64 host2 = models.Host.add_object(hostname='othost')
65 self.assertEquals(host2.id, host.id)
66 self.assertEquals(host2.status, models.Host.Status.RUNNING)
67
68
showarded2afea2009-07-07 20:54:07 +000069class SpecialTaskUnittest(unittest.TestCase,
70 frontend_test_utils.FrontendTestMixin):
71 def setUp(self):
72 self._frontend_common_setup()
73
74
75 def tearDown(self):
76 self._frontend_common_teardown()
77
78
showardc0ac3a72009-07-08 21:14:45 +000079 def _create_task(self):
80 return models.SpecialTask.objects.create(
jamesren76fcf192010-04-21 20:39:50 +000081 host=self.hosts[0], task=models.SpecialTask.Task.VERIFY,
82 requested_by=models.User.current_user())
showarded2afea2009-07-07 20:54:07 +000083
showardc0ac3a72009-07-08 21:14:45 +000084
85 def test_execution_path(self):
86 task = self._create_task()
showarded2afea2009-07-07 20:54:07 +000087 self.assertEquals(task.execution_path(), 'hosts/host1/1-verify')
88
89
showardc0ac3a72009-07-08 21:14:45 +000090 def test_status(self):
91 task = self._create_task()
92 self.assertEquals(task.status, 'Queued')
93
94 task.update_object(is_active=True)
95 self.assertEquals(task.status, 'Running')
96
showarde60e44e2009-11-13 20:45:38 +000097 task.update_object(is_active=False, is_complete=True, success=True)
showardc0ac3a72009-07-08 21:14:45 +000098 self.assertEquals(task.status, 'Completed')
99
showarde60e44e2009-11-13 20:45:38 +0000100 task.update_object(success=False)
101 self.assertEquals(task.status, 'Failed')
102
showardc0ac3a72009-07-08 21:14:45 +0000103
showard97446882009-07-20 22:37:28 +0000104 def test_activate(self):
105 task = self._create_task()
106 task.activate()
107 self.assertTrue(task.is_active)
108 self.assertFalse(task.is_complete)
109
110
111 def test_finish(self):
112 task = self._create_task()
113 task.activate()
showarde60e44e2009-11-13 20:45:38 +0000114 task.finish(True)
showard97446882009-07-20 22:37:28 +0000115 self.assertFalse(task.is_active)
116 self.assertTrue(task.is_complete)
showarde60e44e2009-11-13 20:45:38 +0000117 self.assertTrue(task.success)
showard97446882009-07-20 22:37:28 +0000118
119
showard9bb960b2009-11-19 01:02:11 +0000120 def test_requested_by_from_queue_entry(self):
121 job = self._create_job(hosts=[0])
122 task = models.SpecialTask.objects.create(
123 host=self.hosts[0], task=models.SpecialTask.Task.VERIFY,
124 queue_entry=job.hostqueueentry_set.all()[0])
showardfd8b89f2010-01-20 19:06:30 +0000125 self.assertEquals(task.requested_by.login, 'autotest_system')
showard9bb960b2009-11-19 01:02:11 +0000126
127
showardd1195652009-12-08 22:21:02 +0000128class HostQueueEntryUnittest(unittest.TestCase,
129 frontend_test_utils.FrontendTestMixin):
130 def setUp(self):
131 self._frontend_common_setup()
132
133
134 def tearDown(self):
135 self._frontend_common_teardown()
136
137
138 def test_execution_path(self):
139 entry = self._create_job(hosts=[1]).hostqueueentry_set.all()[0]
140 entry.execution_subdir = 'subdir'
141 entry.save()
142
showardfd8b89f2010-01-20 19:06:30 +0000143 self.assertEquals(entry.execution_path(), '1-autotest_system/subdir')
showardd1195652009-12-08 22:21:02 +0000144
145
jamesrene3656232010-03-02 00:00:30 +0000146class ModelWithInvalidTest(unittest.TestCase,
147 frontend_test_utils.FrontendTestMixin):
148 def setUp(self):
149 self._frontend_common_setup()
150
151
152 def tearDown(self):
153 self._frontend_common_teardown()
154
155
156 def test_model_with_invalid_delete(self):
157 self.assertFalse(self.hosts[0].invalid)
158 self.hosts[0].delete()
159 self.assertTrue(self.hosts[0].invalid)
160 self.assertTrue(models.Host.objects.get(id=self.hosts[0].id))
161
162
163 def test_model_with_invalid_delete_queryset(self):
164 for host in self.hosts:
165 self.assertFalse(host.invalid)
166
167 hosts = models.Host.objects.all()
168 hosts.delete()
169 self.assertEqual(hosts.count(), len(self.hosts))
170
171 for host in hosts:
172 self.assertTrue(host.invalid)
173
174
175 def test_cloned_queryset_delete(self):
176 """
177 Make sure that a cloned queryset maintains the custom delete()
178 """
179 to_delete = ('host1', 'host2')
180
181 for host in self.hosts:
182 self.assertFalse(host.invalid)
183
184 hosts = models.Host.objects.all().filter(hostname__in=to_delete)
185 hosts.delete()
186 all_hosts = models.Host.objects.all()
187 self.assertEqual(all_hosts.count(), len(self.hosts))
188
189 for host in all_hosts:
190 if host.hostname in to_delete:
191 self.assertTrue(
192 host.invalid,
193 '%s.invalid expected to be True' % host.hostname)
194 else:
195 self.assertFalse(
196 host.invalid,
197 '%s.invalid expected to be False' % host.hostname)
198
199
200 def test_normal_delete(self):
201 job = self._create_job(hosts=[1])
202 self.assertEqual(1, models.Job.objects.all().count())
203
204 job.delete()
205 self.assertEqual(0, models.Job.objects.all().count())
206
207
208 def test_normal_delete_queryset(self):
209 self._create_job(hosts=[1])
210 self._create_job(hosts=[2])
211
212 self.assertEqual(2, models.Job.objects.all().count())
213
214 models.Job.objects.all().delete()
215 self.assertEqual(0, models.Job.objects.all().count())
216
217
jamesren4a41e012010-07-16 22:33:48 +0000218class KernelTest(unittest.TestCase, frontend_test_utils.FrontendTestMixin):
219 def setUp(self):
220 self._frontend_common_setup()
221
222
223 def tearDown(self):
224 self._frontend_common_teardown()
225
226
227 def test_create_kernels_none(self):
228 self.assertEqual(None, models.Kernel.create_kernels(None))
229
230
231 def test_create_kernels(self):
232 self.god.stub_function(models.Kernel, '_create')
233
234 num_kernels = 3
235 kernel_list = [object() for _ in range(num_kernels)]
236 result = [object() for _ in range(num_kernels)]
237
238 for kernel, response in zip(kernel_list, result):
239 models.Kernel._create.expect_call(kernel).and_return(response)
240 self.assertEqual(result, models.Kernel.create_kernels(kernel_list))
241 self.god.check_playback()
242
243
244 def test_create(self):
245 kernel = models.Kernel._create({'version': 'version'})
246 self.assertEqual(kernel.version, 'version')
247 self.assertEqual(kernel.cmdline, '')
248 self.assertEqual(kernel, models.Kernel._create({'version': 'version'}))
249
250
251class ParameterizedJobTest(unittest.TestCase,
252 frontend_test_utils.FrontendTestMixin):
253 def setUp(self):
254 self._frontend_common_setup()
255
256
257 def tearDown(self):
258 self._frontend_common_teardown()
259
260
261 def test_job(self):
262 global_config.global_config.override_config_value(
263 'AUTOTEST_WEB', 'parameterized_jobs', 'True')
264
265 test = models.Test.objects.create(
266 name='name', author='author', test_class='class',
267 test_category='category',
Aviv Keshet3dd8beb2013-05-13 17:36:04 -0700268 test_type=control_data.CONTROL_TYPE.SERVER, path='path')
jamesren4a41e012010-07-16 22:33:48 +0000269 parameterized_job = models.ParameterizedJob.objects.create(test=test)
270 job = self._create_job(hosts=[1], control_file=None,
271 parameterized_job=parameterized_job)
272
273 self.assertEqual(job, parameterized_job.job())
274
275
276class JobTest(unittest.TestCase, frontend_test_utils.FrontendTestMixin):
277 def setUp(self):
278 self._frontend_common_setup()
279
280
281 def tearDown(self):
282 self._frontend_common_teardown()
283
284
285 def test_check_parameterized_jobs_no_args(self):
286 self.assertRaises(Exception, models.Job.check_parameterized_job,
287 control_file=None, parameterized_job=None)
288
289
290 def test_check_parameterized_jobs_both_args(self):
291 self.assertRaises(Exception, models.Job.check_parameterized_job,
292 control_file=object(), parameterized_job=object())
293
294
295 def test_check_parameterized_jobs_disabled(self):
296 self.assertRaises(Exception, models.Job.check_parameterized_job,
297 control_file=None, parameterized_job=object())
298
299
300 def test_check_parameterized_jobs_enabled(self):
301 global_config.global_config.override_config_value(
302 'AUTOTEST_WEB', 'parameterized_jobs', 'True')
303 self.assertRaises(Exception, models.Job.check_parameterized_job,
304 control_file=object(), parameterized_job=None)
305
306
showarded2afea2009-07-07 20:54:07 +0000307if __name__ == '__main__':
308 unittest.main()