Begin adding support for parameterized jobs.
This will allow test developers to specify certain parameters that a test
control file may take, so that users can then easily set those parameters
on job create. Enabling this feature removes the ability to edit the
control file directly on job creation.
Feature is currently INCOMPLETE. Do not attempt to use. This feature will
be committed in small pieces for the sake of having smaller code reviews.
Signed-off-by: James Ren <jamesren@google.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@4720 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/frontend/afe/rpc_interface_unittest.py b/frontend/afe/rpc_interface_unittest.py
index 900f46c..6385a90 100755
--- a/frontend/afe/rpc_interface_unittest.py
+++ b/frontend/afe/rpc_interface_unittest.py
@@ -6,7 +6,8 @@
from autotest_lib.frontend.afe import frontend_test_utils
from django.db import connection
from autotest_lib.frontend.afe import models, rpc_interface, frontend_test_utils
-from autotest_lib.frontend.afe import model_logic
+from autotest_lib.frontend.afe import model_logic, model_attributes
+from autotest_lib.client.common_lib import global_config
_hqe_status = models.HostQueueEntry.Status
@@ -313,6 +314,55 @@
self.assertEquals(task['requested_by'], 'autotest_system')
+ def test_parameterized_job(self):
+ global_config.global_config.override_config_value(
+ 'AUTOTEST_WEB', 'parameterized_jobs', 'True')
+
+ string_type = model_attributes.ParameterTypes.STRING
+
+ test = models.Test.objects.create(
+ name='test', test_type=model_attributes.TestTypes.SERVER)
+ test_parameter = test.testparameter_set.create(name='key')
+ profiler = models.Profiler.objects.create(name='profiler')
+
+ kernels = ({'version': 'version', 'cmdline': 'cmdline'},)
+ profilers = ('profiler',)
+ profiler_parameters = {'profiler': {'key': ('value', string_type)}}
+ job_parameters = {'key': ('value', string_type)}
+
+ job_id = rpc_interface.create_parameterized_job(
+ name='job', priority=models.Job.Priority.MEDIUM, test='test',
+ parameters=job_parameters, kernel=kernels, label='label1',
+ profilers=profilers, profiler_parameters=profiler_parameters,
+ profile_only=False, hosts=('host1',))
+ parameterized_job = models.Job.smart_get(job_id).parameterized_job
+
+ self.assertEqual(parameterized_job.test, test)
+ self.assertEqual(parameterized_job.label, self.labels[0])
+ self.assertEqual(parameterized_job.kernels.count(), 1)
+ self.assertEqual(parameterized_job.profilers.count(), 1)
+
+ kernel = models.Kernel.objects.get(**kernels[0])
+ self.assertEqual(parameterized_job.kernels.all()[0], kernel)
+ self.assertEqual(parameterized_job.profilers.all()[0], profiler)
+
+ parameterized_profiler = models.ParameterizedJobProfiler.objects.get(
+ parameterized_job=parameterized_job, profiler=profiler)
+ profiler_parameters_obj = (
+ models.ParameterizedJobProfilerParameter.objects.get(
+ parameterized_job_profiler=parameterized_profiler))
+ self.assertEqual(profiler_parameters_obj.parameter_name, 'key')
+ self.assertEqual(profiler_parameters_obj.parameter_value, 'value')
+ self.assertEqual(profiler_parameters_obj.parameter_type, string_type)
+
+ self.assertEqual(
+ parameterized_job.parameterizedjobparameter_set.count(), 1)
+ parameters_obj = (
+ parameterized_job.parameterizedjobparameter_set.all()[0])
+ self.assertEqual(parameters_obj.test_parameter, test_parameter)
+ self.assertEqual(parameters_obj.parameter_value, 'value')
+ self.assertEqual(parameters_obj.parameter_type, string_type)
+
if __name__ == '__main__':
unittest.main()