Revert "[autotest] Remove create_parameterized_test() RPC, et seq."
This reverts commit 7983b635dd5c4db5106bf5092174d716a3d1dd63.
Change-Id: I966beaf4b9660d234bd197357da2ebf3b970bfd2
Reviewed-on: https://chromium-review.googlesource.com/344350
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Reviewed-by: Shuqian Zhao <shuqianz@chromium.org>
Commit-Queue: Shuqian Zhao <shuqianz@chromium.org>
Tested-by: Shuqian Zhao <shuqianz@chromium.org>
diff --git a/frontend/afe/rpc_interface.py b/frontend/afe/rpc_interface.py
index 387bff0..f7c8dcb 100644
--- a/frontend/afe/rpc_interface.py
+++ b/frontend/afe/rpc_interface.py
@@ -1,4 +1,4 @@
-# pylint: disable=C0111
+# pylint: disable-msg=C0111
"""\
Functions to expose over the RPC interface.
@@ -802,6 +802,91 @@
return cf_info
+def create_parameterized_job(name, priority, test, parameters, kernel=None,
+ label=None, profilers=(), profiler_parameters=None,
+ use_container=False, profile_only=None,
+ upload_kernel_config=False, hosts=(),
+ meta_hosts=(), one_time_hosts=(),
+ atomic_group_name=None, synch_count=None,
+ is_template=False, timeout=None,
+ timeout_mins=None, max_runtime_mins=None,
+ run_verify=False, email_list='', dependencies=(),
+ reboot_before=None, reboot_after=None,
+ parse_failed_repair=None, hostless=False,
+ keyvals=None, drone_set=None, run_reset=True,
+ require_ssp=None):
+ """
+ Creates and enqueues a parameterized job.
+
+ Most parameters a combination of the parameters for generate_control_file()
+ and create_job(), with the exception of:
+
+ @param test name or ID of the test to run
+ @param parameters a map of parameter name ->
+ tuple of (param value, param type)
+ @param profiler_parameters a dictionary of parameters for the profilers:
+ key: profiler name
+ value: dict of param name -> tuple of
+ (param value,
+ param type)
+ """
+ # Save the values of the passed arguments here. What we're going to do with
+ # them is pass them all to rpc_utils.get_create_job_common_args(), which
+ # will extract the subset of these arguments that apply for
+ # rpc_utils.create_job_common(), which we then pass in to that function.
+ args = locals()
+
+ # Set up the parameterized job configs
+ test_obj = models.Test.smart_get(test)
+ control_type = test_obj.test_type
+
+ try:
+ label = models.Label.smart_get(label)
+ except models.Label.DoesNotExist:
+ label = None
+
+ kernel_objs = models.Kernel.create_kernels(kernel)
+ profiler_objs = [models.Profiler.smart_get(profiler)
+ for profiler in profilers]
+
+ parameterized_job = models.ParameterizedJob.objects.create(
+ test=test_obj, label=label, use_container=use_container,
+ profile_only=profile_only,
+ upload_kernel_config=upload_kernel_config)
+ parameterized_job.kernels.add(*kernel_objs)
+
+ for profiler in profiler_objs:
+ parameterized_profiler = models.ParameterizedJobProfiler.objects.create(
+ parameterized_job=parameterized_job,
+ profiler=profiler)
+ profiler_params = profiler_parameters.get(profiler.name, {})
+ for name, (value, param_type) in profiler_params.iteritems():
+ models.ParameterizedJobProfilerParameter.objects.create(
+ parameterized_job_profiler=parameterized_profiler,
+ parameter_name=name,
+ parameter_value=value,
+ parameter_type=param_type)
+
+ try:
+ for parameter in test_obj.testparameter_set.all():
+ if parameter.name in parameters:
+ param_value, param_type = parameters.pop(parameter.name)
+ parameterized_job.parameterizedjobparameter_set.create(
+ test_parameter=parameter, parameter_value=param_value,
+ parameter_type=param_type)
+
+ if parameters:
+ raise Exception('Extra parameters remain: %r' % parameters)
+
+ return rpc_utils.create_job_common(
+ parameterized_job=parameterized_job.id,
+ control_type=control_type,
+ **rpc_utils.get_create_job_common_args(args))
+ except:
+ parameterized_job.delete()
+ raise
+
+
def create_job_page_handler(name, priority, control_file, control_type,
image=None, hostless=False, firmware_rw_build=None,
firmware_ro_build=None, test_source_build=None,