Add framework for Test Planner execution engine, and the supporting RPC
interfaces

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


git-svn-id: http://test.kernel.org/svn/autotest/trunk@4260 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/frontend/planner/rpc_utils_unittest.py b/frontend/planner/rpc_utils_unittest.py
new file mode 100644
index 0000000..d168c05
--- /dev/null
+++ b/frontend/planner/rpc_utils_unittest.py
@@ -0,0 +1,69 @@
+#!/usr/bin/python
+
+import unittest
+import common
+from autotest_lib.frontend import setup_django_environment
+from autotest_lib.frontend.planner import planner_test_utils
+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
+
+
+class RpcUtilsTest(unittest.TestCase,
+                   planner_test_utils.PlannerTestMixin):
+    def setUp(self):
+        self._planner_common_setup()
+
+
+    def tearDown(self):
+        self._planner_common_teardown()
+
+
+    def test_create_plan_label(self):
+        label, group = self._create_label_helper()
+
+        label.delete()
+        group.invalid = True
+        group.save()
+
+        label, group = self._create_label_helper()
+
+        self.assertRaises(model_logic.ValidationError,
+                          rpc_utils.create_plan_label, self._plan)
+
+
+    def _create_label_helper(self):
+        label = rpc_utils.create_plan_label(self._plan)
+        group = afe_models.AtomicGroup.objects.get(
+                name=rpc_utils.PLANNER_ATOMIC_GROUP_NAME)
+        self.assertFalse(group.invalid)
+        self.assertEqual(label.atomic_group, group)
+
+        return (label, group)
+
+
+    def test_lazy_load(self):
+        self.god.stub_function(utils, 'read_file')
+
+        DUMMY_PATH_1 = object()
+        DUMMY_PATH_2 = object()
+        DUMMY_FILE_1 = object()
+        DUMMY_FILE_2 = object()
+
+        utils.read_file.expect_call(DUMMY_PATH_1).and_return(DUMMY_FILE_1)
+        self.assertEqual(DUMMY_FILE_1, rpc_utils.lazy_load(DUMMY_PATH_1))
+        self.god.check_playback()
+
+        # read_file should not be called again for this path
+        self.assertEqual(DUMMY_FILE_1, rpc_utils.lazy_load(DUMMY_PATH_1))
+        self.god.check_playback()
+
+        # new file; read_file must be called again
+        utils.read_file.expect_call(DUMMY_PATH_2).and_return(DUMMY_FILE_2)
+        self.assertEqual(DUMMY_FILE_2, rpc_utils.lazy_load(DUMMY_PATH_2))
+        self.god.check_playback()
+
+
+if __name__ == '__main__':
+    unittest.main()