blob: 3eec0d6426c237542e330ff1468988cfe36c5ab1 [file] [log] [blame]
jamesrenc3940222010-02-19 21:57:37 +00001#!/usr/bin/python
2
3import unittest
4import common
5from autotest_lib.frontend import setup_django_environment
6from autotest_lib.frontend.planner import planner_test_utils
7from autotest_lib.frontend.afe import model_logic, models as afe_models
8from autotest_lib.frontend.afe import rpc_interface as afe_rpc_interface
9from autotest_lib.frontend.planner import models, rpc_utils
jamesren8d0d3d52010-03-25 20:39:13 +000010from autotest_lib.client.common_lib import utils, host_queue_entry_states
jamesrenc3940222010-02-19 21:57:37 +000011
12
13class RpcUtilsTest(unittest.TestCase,
14 planner_test_utils.PlannerTestMixin):
15 def setUp(self):
16 self._planner_common_setup()
17
18
19 def tearDown(self):
20 self._planner_common_teardown()
21
22
23 def test_create_plan_label(self):
24 label, group = self._create_label_helper()
25
26 label.delete()
27 group.invalid = True
28 group.save()
29
30 label, group = self._create_label_helper()
31
32 self.assertRaises(model_logic.ValidationError,
33 rpc_utils.create_plan_label, self._plan)
34
35
36 def _create_label_helper(self):
37 label = rpc_utils.create_plan_label(self._plan)
38 group = afe_models.AtomicGroup.objects.get(
39 name=rpc_utils.PLANNER_ATOMIC_GROUP_NAME)
40 self.assertFalse(group.invalid)
41 self.assertEqual(label.atomic_group, group)
42
43 return (label, group)
44
45
46 def test_lazy_load(self):
47 self.god.stub_function(utils, 'read_file')
48
49 DUMMY_PATH_1 = object()
50 DUMMY_PATH_2 = object()
51 DUMMY_FILE_1 = object()
52 DUMMY_FILE_2 = object()
53
54 utils.read_file.expect_call(DUMMY_PATH_1).and_return(DUMMY_FILE_1)
55 self.assertEqual(DUMMY_FILE_1, rpc_utils.lazy_load(DUMMY_PATH_1))
56 self.god.check_playback()
57
58 # read_file should not be called again for this path
59 self.assertEqual(DUMMY_FILE_1, rpc_utils.lazy_load(DUMMY_PATH_1))
60 self.god.check_playback()
61
62 # new file; read_file must be called again
63 utils.read_file.expect_call(DUMMY_PATH_2).and_return(DUMMY_FILE_2)
64 self.assertEqual(DUMMY_FILE_2, rpc_utils.lazy_load(DUMMY_PATH_2))
65 self.god.check_playback()
66
67
jamesren8d0d3d52010-03-25 20:39:13 +000068 def test_update_hosts_table(self):
69 label = self.labels[3]
70 default_hosts = set(self._plan.hosts.all())
71
72 rpc_utils.update_hosts_table(self._plan)
73 self.assertEqual(default_hosts, set(self._plan.hosts.all()))
74 self.assertEqual(set(), self._get_added_by_label_hosts())
75
76 self._plan.host_labels.add(label)
77 rpc_utils.update_hosts_table(self._plan)
78 self.assertEqual(default_hosts.union(label.host_set.all()),
79 set(self._plan.hosts.all()))
80 self.assertEqual(set(label.host_set.all()),
81 self._get_added_by_label_hosts())
82
83 self._plan.host_labels.remove(label)
84 rpc_utils.update_hosts_table(self._plan)
85 self.assertEqual(default_hosts, set(self._plan.hosts.all()))
86 self.assertEqual(set(), self._get_added_by_label_hosts())
87
88
89 def _get_added_by_label_hosts(self):
90 return set(host.host for host in models.Host.objects.filter(
91 plan=self._plan, added_by_label=True))
92
93
94 def test_compute_next_test_config(self):
95 self._setup_active_plan()
96 test_config = models.TestConfig.objects.create(
97 plan=self._plan, alias='config2', control_file=self._control,
98 execution_order=2, estimated_runtime=1)
99
100 self.assertEqual(1, self._afe_job.hostqueueentry_set.count())
101 self.assertEqual(
102 None, rpc_utils.compute_next_test_config(self._plan,
103 self._planner_host))
104 self.assertFalse(self._planner_host.complete)
105
106 hqe = self._afe_job.hostqueueentry_set.all()[0]
107 hqe.status = host_queue_entry_states.Status.COMPLETED
108 hqe.save()
109
110 self.assertEqual(
jamesrendbeebf82010-04-08 22:58:26 +0000111 test_config,
jamesren8d0d3d52010-03-25 20:39:13 +0000112 rpc_utils.compute_next_test_config(self._plan,
113 self._planner_host))
114 self.assertFalse(self._planner_host.complete)
115
116 afe_job = self._create_job(hosts=(1,))
117 planner_job = models.Job.objects.create(plan=self._plan,
118 test_config=test_config,
119 afe_job=afe_job)
120
121 self.assertEqual(
122 None, rpc_utils.compute_next_test_config(self._plan,
123 self._planner_host))
124 self.assertFalse(self._planner_host.complete)
125
126 hqe = afe_job.hostqueueentry_set.all()[0]
127 hqe.status = host_queue_entry_states.Status.COMPLETED
128 hqe.save()
129
130 self.assertEqual(
131 None, rpc_utils.compute_next_test_config(self._plan,
132 self._planner_host))
133 self.assertTrue(self._planner_host.complete)
134
135
jamesrenc3940222010-02-19 21:57:37 +0000136if __name__ == '__main__':
137 unittest.main()