Initial implementation of Test Planner Test View.

Trying again because generated patch was malformed.

Signed-off-by: James Ren <jamesren@google.com>


git-svn-id: http://test.kernel.org/svn/autotest/trunk@4556 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/frontend/planner/rpc_interface_unittest.py b/frontend/planner/rpc_interface_unittest.py
index f36d458..30366bf 100644
--- a/frontend/planner/rpc_interface_unittest.py
+++ b/frontend/planner/rpc_interface_unittest.py
@@ -164,28 +164,6 @@
         self.god.check_playback()
 
 
-    def test_generate_test_config(self):
-        control = {'control_file': object(),
-                   'is_server': object()}
-        test = 'test'
-        alias = 'test alias'
-        estimated_runtime = object()
-
-        self.god.stub_function(afe_rpc_interface, 'generate_control_file')
-        afe_rpc_interface.generate_control_file.expect_call(
-                tests=[test]).and_return(control)
-
-        result = rpc_interface.generate_test_config(
-                alias=alias, afe_test_name=test,
-                estimated_runtime=estimated_runtime)
-
-        self.assertEqual(result['alias'], 'test_alias')
-        self.assertEqual(result['control_file'], control['control_file'])
-        self.assertEqual(result['is_server'], control['is_server'])
-        self.assertEqual(result['estimated_runtime'], estimated_runtime)
-        self.god.check_playback()
-
-
     def test_get_machine_view_data(self):
         self._setup_active_plan()
 
@@ -232,12 +210,34 @@
         self.assertEqual(sorted(actual), sorted(expected))
 
 
+    def test_generate_test_config(self):
+        control = {'control_file': object(),
+                   'is_server': object()}
+        test = 'test'
+        alias = 'test alias'
+        estimated_runtime = object()
+
+        self.god.stub_function(afe_rpc_interface, 'generate_control_file')
+        afe_rpc_interface.generate_control_file.expect_call(
+                tests=[test]).and_return(control)
+
+        result = rpc_interface.generate_test_config(
+                alias=alias, afe_test_name=test,
+                estimated_runtime=estimated_runtime)
+
+        self.assertEqual(result['alias'], 'test_alias')
+        self.assertEqual(result['control_file'], control['control_file'])
+        self.assertEqual(result['is_server'], control['is_server'])
+        self.assertEqual(result['estimated_runtime'], estimated_runtime)
+        self.god.check_playback()
+
+
     def _test_get_overview_data_helper(self, stage):
         self._setup_active_plan()
-        self.god.stub_function(rpc_utils, 'compute_passed')
-        rpc_utils.compute_passed.expect_call(
+        self.god.stub_function(rpc_utils, 'compute_test_config_status')
+        rpc_utils.compute_test_config_status.expect_call(
                 self._plan.host_set.get(host=self.hosts[0])).and_return(None)
-        rpc_utils.compute_passed.expect_call(
+        rpc_utils.compute_test_config_status.expect_call(
                 self._plan.host_set.get(host=self.hosts[1])).and_return(None)
 
         data = {'test_configs': [{'complete': 0, 'estimated_runtime': 1}],
@@ -257,7 +257,7 @@
         test_run = self._plan.testrun_set.create(test_job=self._planner_job,
                                                  tko_test=tko_test,
                                                  host=self._planner_host)
-        self._afe_job.hostqueueentry_set.update(status='Completed')
+        self._afe_job.hostqueueentry_set.update(complete=True)
         self._planner_host.complete = True
         self._planner_host.save()
         test_run.bugs.create(external_uid='bug')
@@ -279,5 +279,53 @@
         self.god.check_playback()
 
 
+    def _test_get_test_view_data_helper(self, stage):
+        self._setup_active_plan()
+        self.god.stub_function(rpc_utils, 'compute_test_config_status')
+        hosts = self._plan.host_set.filter(host__in=self.hosts[0:2])
+        rpc_utils.compute_test_config_status.expect_call(
+                hosts[0], self._test_config).and_return(None)
+
+        data = {'total_machines': 2,
+                'machine_status': {'host1': None,
+                                   'host2': None},
+                'total_runs': 1,
+                'total_passes': 0,
+                'bugs': []}
+        if stage < 1:
+            rpc_utils.compute_test_config_status.expect_call(
+                    hosts[1], self._test_config).and_return(None)
+            return {self._test_config.alias: data}
+
+        fail_status = rpc_utils.ComputeTestConfigStatusResult.FAIL
+        rpc_utils.compute_test_config_status.expect_call(
+                hosts[1], self._test_config).and_return(fail_status)
+        tko_test = self._tko_job.test_set.create(kernel=self._tko_kernel,
+                                                 machine=self._tko_machine,
+                                                 status=self._fail_status)
+        test_run = self._plan.testrun_set.create(test_job=self._planner_job,
+                                                 tko_test=tko_test,
+                                                 host=self._planner_host)
+        self._afe_job.hostqueueentry_set.update(complete=True)
+
+        test_run.bugs.create(external_uid='bug')
+
+        data['machine_status']['host2'] = fail_status
+        data['bugs'] = ['bug']
+        return {self._test_config.alias: data}
+
+
+    def test_get_test_view_data_no_progress(self):
+        self.assertEqual(self._test_get_test_view_data_helper(0),
+                         rpc_interface.get_test_view_data(self._plan.id))
+        self.god.check_playback()
+
+
+    def test_get_test_view_data_one_failed_with_bug(self):
+        self.assertEqual(self._test_get_test_view_data_helper(1),
+                         rpc_interface.get_test_view_data(self._plan.id))
+        self.god.check_playback()
+
+
 if __name__ == '__main__':
     unittest.main()