[autotest] Add serialization functionality including dependencies
In order to send hosts and jobs to shards it's necessary to
serialize them including their dependencies.
This changelist adds functionality to find an object's dependencies
and to serialize it into lists and dicts, so it can be converted
to json.
TEST=Ran suites.
DEPLOY=apache
Change-Id: Icc158de1f23c7483ebc22b6ca3482b7ffccdd5c4
Reviewed-on: https://chromium-review.googlesource.com/215998
Tested-by: Jakob Jülich <jakobjuelich@chromium.org>
Reviewed-by: Alex Miller <milleral@chromium.org>
Commit-Queue: Jakob Jülich <jakobjuelich@chromium.org>
diff --git a/frontend/afe/models_test.py b/frontend/afe/models_test.py
index 04d265c..555243f 100755
--- a/frontend/afe/models_test.py
+++ b/frontend/afe/models_test.py
@@ -1,5 +1,6 @@
#!/usr/bin/python
+import datetime
import unittest
import common
from autotest_lib.frontend import setup_django_environment
@@ -304,5 +305,113 @@
control_file=object(), parameterized_job=None)
+class SerializationTest(unittest.TestCase,
+ frontend_test_utils.FrontendTestMixin):
+ def setUp(self):
+ self._frontend_common_setup()
+
+
+ def tearDown(self):
+ self._frontend_common_teardown()
+
+
+ def test_serialize(self):
+ platform_label = models.Label.objects.get(platform=True)
+
+ suite_job = self._create_job(hostless=True)
+ job1 = self._create_job(parent_job_id=suite_job.id,
+ metahosts=[platform_label.id]
+ )
+ job2 = self._create_job(parent_job_id=suite_job.id,
+ metahosts=[platform_label.id])
+
+ host1, host2 = models.Host.objects.all()[:2]
+
+ job1_serialized = job1.serialize()
+ host1_serialized = host1.serialize()
+
+ self.assertEqual(
+ job1_serialized,
+ {'control_file': 'control',
+ 'control_type': 2,
+ 'created_on': datetime.datetime(2008, 1, 1, 0, 0),
+ 'dependency_labels': [{u'id': 10,
+ 'invalid': False,
+ 'kernel_config': u'',
+ 'name': u'myplatform',
+ 'only_if_needed': False,
+ 'platform': True}],
+ 'email_list': u'',
+ 'hostqueueentry_set': [{'aborted': False,
+ 'active': False,
+ 'complete': False,
+ 'deleted': False,
+ 'execution_subdir': u'',
+ 'finished_on': None,
+ u'id': 2,
+ 'meta_host': {u'id': 10,
+ 'invalid': False,
+ 'kernel_config': u'',
+ 'name': u'myplatform',
+ 'only_if_needed': False,
+ 'platform': True},
+ 'started_on': None,
+ 'status': u'Queued'}],
+ u'id': 2,
+ 'jobkeyval_set': [],
+ 'max_runtime_hrs': 72,
+ 'max_runtime_mins': u'1440',
+ 'name': 'test',
+ 'owner': 'autotest_system',
+ 'parse_failed_repair': True,
+ 'priority': 0,
+ 'reboot_after': 0,
+ 'reboot_before': 0,
+ 'run_reset': True,
+ 'run_verify': False,
+ 'shard': None,
+ 'synch_count': 1,
+ 'test_retry': 0,
+ 'timeout': u'24',
+ 'timeout_mins': u'1440'}
+ )
+ self.assertEqual(
+ host1_serialized,
+ {'aclgroup_set': [{'description': u'',
+ u'id': 2,
+ 'name': u'my_acl',
+ 'users': [{'access_level': 100,
+ u'id': 1,
+ 'login': u'autotest_system',
+ 'reboot_after': 0,
+ 'reboot_before': 1,
+ 'show_experimental': False}]}],
+ 'dirty': True,
+ 'hostattribute_set': [],
+ 'hostname': u'host1',
+ u'id': 1,
+ 'invalid': False,
+ 'labels': [{u'id': 1,
+ 'invalid': False,
+ 'kernel_config': u'',
+ 'name': u'label1',
+ 'only_if_needed': False,
+ 'platform': False},
+ {u'id': 10,
+ 'invalid': False,
+ 'kernel_config': u'',
+ 'name': u'myplatform',
+ 'only_if_needed': False,
+ 'platform': True}],
+ 'leased': True,
+ 'lock_time': None,
+ 'locked': False,
+ 'protection': 0,
+ 'shard': None,
+ 'status': u'Ready',
+ 'synch_id': None}
+ )
+
+
if __name__ == '__main__':
unittest.main()