Add Planner RPC utils unit tests
Signed-off-by: James Ren <[email protected]>
--- autotest/frontend/planner/planner_test_utils.py 2010-03-24
12:39:54.000000000 -0700
+++ autotest/frontend/planner/planner_test_utils.py 2010-03-24
12:39:54.000000000 -0700
@@ -1,11 +1,14 @@
import common
from autotest_lib.frontend.afe import frontend_test_utils
from autotest_lib.frontend.afe import models as afe_models
+from autotest_lib.frontend.tko import models as tko_models
from autotest_lib.frontend.planner import models
from autotest_lib.client.common_lib import utils
class PlannerTestMixin(frontend_test_utils.FrontendTestMixin):
_PLAN_NAME = 'plan'
+ GOOD_STATUS_WORD = 'GOOD'
+ RUNNING_STATUS_WORD = 'RUNNING'
def _planner_common_setup(self):
self._frontend_common_setup()
@@ -24,3 +27,50 @@
def _planner_common_teardown(self):
self._plan.delete()
self._frontend_common_teardown()
+
+
+ def _setup_active_plan(self):
+ """
+ Create an active test plan
+
+ Sets up all the infrastructure for a active test plan. Stores the
+ following in self:
+
+ _hostname: hostname of the machine under test
+ _control: the models.ControlFile object
+ _test_config: the models.TestConfig object
+ _afe_job: the AFE job started by the plan
+ _planner_host: the models.Host object
+ _planner_job: the models.Job object
+ _tko_machine: the TKO machine (as a tko_models.Machine object) for the
+ results
+ _tko_job: the TKO job (as a tko_models.Job object) for the results
+ _tko_kernel: the TKO kernel (as a tko_models.Kernel object) associated
+ with the TKO machine
+ _running_status: the TKO status (as a tko_models.Status object) that
+ indicates a running TKO test
+ _good_status: the TKO status (as a tko_models.Status object) that
+ indicates a completed and passed TKO test
+ """
+ self._hostname = self.hosts[0].hostname
+ self._control, _ = models.ControlFile.objects.get_or_create(
+ contents='test_control')
+ self._test_config = models.TestConfig.objects.create(
+ plan=self._plan, alias='config', control_file=self._control,
+ execution_order=1, estimated_runtime=1)
+ self._afe_job = self._create_job(hosts=(1,))
+ self._planner_host = models.Host.objects.create(plan=self._plan,
+ host=self.hosts[0])
+ self._planner_job = models.Job.objects.create(
+ plan=self._plan, test_config=self._test_config,
+ afe_job=self._afe_job)
+ self._tko_machine = tko_models.Machine.objects.create(
+ hostname=self._hostname)
+ self._tko_job = tko_models.Job.objects.create(
+ tag='job', machine=self._tko_machine,
+ afe_job_id=self._afe_job.id)
+ self._tko_kernel = tko_models.Kernel.objects.create()
+ self._running_status = tko_models.Status.objects.create(
+ word=self.RUNNING_STATUS_WORD)
+ self._good_status = tko_models.Status.objects.create(
+ word=self.GOOD_STATUS_WORD)
--- autotest/frontend/planner/rpc_interface_unittest.py 2010-03-24
12:39:54.000000000 -0700
+++ autotest/frontend/planner/rpc_interface_unittest.py 2010-03-24
12:39:54.000000000 -0700
@@ -99,82 +99,58 @@
def test_update_test_runs(self):
- GOOD_STATUS_WORD = 'GOOD'
- RUNNING_STATUS_WORD = 'RUNNING'
- hostname = self.hosts[0].hostname
+ self._setup_active_plan()
self.god.stub_function(rpc_utils, 'compute_test_run_status')
self.god.stub_function(rpc_utils, 'add_test_run')
- control, _ = models.ControlFile.objects.get_or_create(
- contents='test_control')
- test_config = models.TestConfig.objects.create(plan=self._plan,
- alias='config',
- control_file=control,
- execution_order=1,
- estimated_runtime=1)
- afe_job = self._create_job(hosts=(1,))
- planner_host = models.Host.objects.create(plan=self._plan,
- host=self.hosts[0])
- planner_job = models.Job.objects.create(plan=self._plan,
- test_config=test_config,
- afe_job=afe_job)
- tko_machine = tko_models.Machine.objects.create(hostname=hostname)
- tko_job = tko_models.Job.objects.create(tag='job',
- machine=tko_machine,
- afe_job_id=afe_job.id)
- tko_kernel = tko_models.Kernel.objects.create()
- running_status = tko_models.Status.objects.create(
- word=RUNNING_STATUS_WORD)
- good_status = tko_models.Status.objects.create(word=GOOD_STATUS_WORD)
-
# No TKO tests
self.assertEqual([], rpc_interface.update_test_runs(self._plan.id))
self.god.check_playback()
# active TKO test
- tko_test = tko_models.Test.objects.create(job=tko_job,
- machine=tko_machine,
- kernel=tko_kernel,
- status=running_status)
+ tko_test = tko_models.Test.objects.create(job=self._tko_job,
+ machine=self._tko_machine,
+ kernel=self._tko_kernel,
+ status=self._running_status)
rpc_utils.compute_test_run_status.expect_call(
- RUNNING_STATUS_WORD).and_return(
+ self.RUNNING_STATUS_WORD).and_return(
model_attributes.TestRunStatus.ACTIVE)
rpc_utils.add_test_run.expect_call(
- self._plan, planner_job, tko_test, hostname,
+ self._plan, self._planner_job, tko_test, self._hostname,
model_attributes.TestRunStatus.ACTIVE)
self.assertEqual(rpc_interface.update_test_runs(self._plan.id),
[{'status': model_attributes.TestRunStatus.ACTIVE,
'tko_test_idx': tko_test.test_idx,
- 'hostname': hostname}])
+ 'hostname': self._hostname}])
self.god.check_playback()
test_run = models.TestRun.objects.create(
- plan=self._plan, test_job=planner_job,
- tko_test=tko_test, host=planner_host,
+ plan=self._plan, test_job=self._planner_job,
+ tko_test=tko_test, host=self._planner_host,
status=model_attributes.TestRunStatus.ACTIVE)
# no change to TKO test
rpc_utils.compute_test_run_status.expect_call(
- RUNNING_STATUS_WORD).and_return(
+ self.RUNNING_STATUS_WORD).and_return(
model_attributes.TestRunStatus.ACTIVE)
self.assertEqual([], rpc_interface.update_test_runs(self._plan.id))
self.god.check_playback()
# TKO test is now complete, passed
- tko_test.status = good_status
+ tko_test.status = self._good_status
tko_test.save()
rpc_utils.compute_test_run_status.expect_call(
- GOOD_STATUS_WORD).and_return(
+ self.GOOD_STATUS_WORD).and_return(
model_attributes.TestRunStatus.PASSED)
rpc_utils.add_test_run.expect_call(
- self._plan, planner_job, tko_test, hostname,
+ self._plan, self._planner_job, tko_test, self._hostname,
model_attributes.TestRunStatus.PASSED)
self.assertEqual(rpc_interface.update_test_runs(self._plan.id),
[{'status': model_attributes.TestRunStatus.PASSED,
'tko_test_idx': tko_test.test_idx,
- 'hostname': hostname}])
+ 'hostname': self._hostname}])
self.god.check_playback()
--- autotest/frontend/planner/rpc_utils_unittest.py 2010-03-24
12:39:54.000000000 -0700
+++ autotest/frontend/planner/rpc_utils_unittest.py 2010-03-24
12:39:54.000000000 -0700
@@ -7,7 +7,7 @@
from autotest_lib.frontend.afe import model_logic, models as afe_models
from autotest_lib.frontend.afe import rpc_interface as afe_rpc_interface
from autotest_lib.frontend.planner import models, rpc_utils
-from autotest_lib.client.common_lib import utils
+from autotest_lib.client.common_lib import utils, host_queue_entry_states
class RpcUtilsTest(unittest.TestCase,
@@ -65,5 +65,73 @@
self.god.check_playback()
+ def test_update_hosts_table(self):
+ label = self.labels[3]
+ default_hosts = set(self._plan.hosts.all())
+
+ rpc_utils.update_hosts_table(self._plan)
+ self.assertEqual(default_hosts, set(self._plan.hosts.all()))
+ self.assertEqual(set(), self._get_added_by_label_hosts())
+
+ self._plan.host_labels.add(label)
+ rpc_utils.update_hosts_table(self._plan)
+ self.assertEqual(default_hosts.union(label.host_set.all()),
+ set(self._plan.hosts.all()))
+ self.assertEqual(set(label.host_set.all()),
+ self._get_added_by_label_hosts())
+
+ self._plan.host_labels.remove(label)
+ rpc_utils.update_hosts_table(self._plan)
+ self.assertEqual(default_hosts, set(self._plan.hosts.all()))
+ self.assertEqual(set(), self._get_added_by_label_hosts())
+
+
+ def _get_added_by_label_hosts(self):
+ return set(host.host for host in models.Host.objects.filter(
+ plan=self._plan, added_by_label=True))
+
+
+ def test_compute_next_test_config(self):
+ self._setup_active_plan()
+ test_config = models.TestConfig.objects.create(
+ plan=self._plan, alias='config2', control_file=self._control,
+ execution_order=2, estimated_runtime=1)
+
+ self.assertEqual(1, self._afe_job.hostqueueentry_set.count())
+ self.assertEqual(
+ None, rpc_utils.compute_next_test_config(self._plan,
+ self._planner_host))
+ self.assertFalse(self._planner_host.complete)
+
+ hqe = self._afe_job.hostqueueentry_set.all()[0]
+ hqe.status = host_queue_entry_states.Status.COMPLETED
+ hqe.save()
+
+ self.assertEqual(
+ test_config.id,
+ rpc_utils.compute_next_test_config(self._plan,
+ self._planner_host))
+ self.assertFalse(self._planner_host.complete)
+
+ afe_job = self._create_job(hosts=(1,))
+ planner_job = models.Job.objects.create(plan=self._plan,
+ test_config=test_config,
+ afe_job=afe_job)
+
+ self.assertEqual(
+ None, rpc_utils.compute_next_test_config(self._plan,
+ self._planner_host))
+ self.assertFalse(self._planner_host.complete)
+
+ hqe = afe_job.hostqueueentry_set.all()[0]
+ hqe.status = host_queue_entry_states.Status.COMPLETED
+ hqe.save()
+
+ self.assertEqual(
+ None, rpc_utils.compute_next_test_config(self._plan,
+ self._planner_host))
+ self.assertTrue(self._planner_host.complete)
+
+
if __name__ == '__main__':
unittest.main()
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest