blob: b8d81914a641b4a11db7ded714ae3af637796858 [file] [log] [blame]
Allen Li0f261de2017-02-01 17:11:06 -08001#!/usr/bin/python
2
3#pylint: disable=missing-docstring
4
5import unittest
6
7import common
8from autotest_lib.frontend import setup_django_environment
9from autotest_lib.frontend.afe import models
10from autotest_lib.scheduler import monitor_db_unittest
11
12_DEBUG = False
13
14
15class OnlyIfNeededTest(monitor_db_unittest.DispatcherSchedulingTest):
16
17 def _setup_test_only_if_needed_labels(self):
18 # apply only_if_needed label3 to host1
19 models.Host.smart_get('host1').labels.add(self.label3)
20 return self._create_job_simple([1], use_metahost=True)
21
22
23 def test_only_if_needed_labels_avoids_host(self):
24 job = self._setup_test_only_if_needed_labels()
25 # if the job doesn't depend on label3, there should be no scheduling
26 self._run_scheduler()
27 self._check_for_extra_schedulings()
28
29
30 def test_only_if_needed_labels_schedules(self):
31 job = self._setup_test_only_if_needed_labels()
32 job.dependency_labels.add(self.label3)
33 self._run_scheduler()
34 self._assert_job_scheduled_on(1, 1)
35 self._check_for_extra_schedulings()
36
37
38 def test_only_if_needed_labels_via_metahost(self):
39 job = self._setup_test_only_if_needed_labels()
40 job.dependency_labels.add(self.label3)
41 # should also work if the metahost is the only_if_needed label
42 self._do_query('DELETE FROM afe_jobs_dependency_labels')
43 self._create_job(metahosts=[3])
44 self._run_scheduler()
45 self._assert_job_scheduled_on(2, 1)
46 self._check_for_extra_schedulings()
47
48
49 def test_metahosts_obey_blocks(self):
50 """
51 Metahosts can't get scheduled on hosts already scheduled for
52 that job.
53 """
54 self._create_job(metahosts=[1], hosts=[1])
55 # make the nonmetahost entry complete, so the metahost can try
56 # to get scheduled
57 self._update_hqe(set='complete = 1', where='host_id=1')
58 self._run_scheduler()
59 self._check_for_extra_schedulings()
60
61
62if __name__ == '__main__':
63 unittest.main()
64