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/models.py b/frontend/afe/models.py
index 79c0dec..68e0239 100644
--- a/frontend/afe/models.py
+++ b/frontend/afe/models.py
@@ -1,4 +1,4 @@
-# pylint: disable=C0111
+# pylint: disable-msg=C0111
import logging
from datetime import datetime
@@ -1036,6 +1036,51 @@
return unicode(self.name)
+class Kernel(dbmodels.Model):
+ """
+ A kernel configuration for a parameterized job
+ """
+ version = dbmodels.CharField(max_length=255)
+ cmdline = dbmodels.CharField(max_length=255, blank=True)
+
+ @classmethod
+ def create_kernels(cls, kernel_list):
+ """Creates all kernels in the kernel list.
+
+ @param cls: Implicit class object.
+ @param kernel_list: A list of dictionaries that describe the kernels,
+ in the same format as the 'kernel' argument to
+ rpc_interface.generate_control_file.
+ @return A list of the created kernels.
+ """
+ if not kernel_list:
+ return None
+ return [cls._create(kernel) for kernel in kernel_list]
+
+
+ @classmethod
+ def _create(cls, kernel_dict):
+ version = kernel_dict.pop('version')
+ cmdline = kernel_dict.pop('cmdline', '')
+
+ if kernel_dict:
+ raise Exception('Extraneous kernel arguments remain: %r'
+ % kernel_dict)
+
+ kernel, _ = cls.objects.get_or_create(version=version,
+ cmdline=cmdline)
+ return kernel
+
+
+ class Meta:
+ """Metadata for class Kernel."""
+ db_table = 'afe_kernels'
+ unique_together = ('version', 'cmdline')
+
+ def __unicode__(self):
+ return u'%s %s' % (self.version, self.cmdline)
+
+
class ParameterizedJob(dbmodels.Model):
"""
Auxiliary configuration for a parameterized job.
@@ -1046,6 +1091,8 @@
profile_only = dbmodels.BooleanField(default=False)
upload_kernel_config = dbmodels.BooleanField(default=False)
+ kernels = dbmodels.ManyToManyField(
+ Kernel, db_table='afe_parameterized_job_kernels')
profilers = dbmodels.ManyToManyField(
Profiler, through='ParameterizedJobProfiler')
@@ -1090,6 +1137,46 @@
unique_together = ('parameterized_job', 'profiler')
+class ParameterizedJobProfilerParameter(dbmodels.Model):
+ """
+ A parameter for a profiler in a parameterized job
+ """
+ parameterized_job_profiler = dbmodels.ForeignKey(ParameterizedJobProfiler)
+ parameter_name = dbmodels.CharField(max_length=255)
+ parameter_value = dbmodels.TextField()
+ parameter_type = dbmodels.CharField(
+ max_length=8, choices=model_attributes.ParameterTypes.choices())
+
+ class Meta:
+ """Metadata for class ParameterizedJobProfilerParameter."""
+ db_table = 'afe_parameterized_job_profiler_parameters'
+ unique_together = ('parameterized_job_profiler', 'parameter_name')
+
+ def __unicode__(self):
+ return u'%s - %s' % (self.parameterized_job_profiler.profiler.name,
+ self.parameter_name)
+
+
+class ParameterizedJobParameter(dbmodels.Model):
+ """
+ Parameters for a parameterized job
+ """
+ parameterized_job = dbmodels.ForeignKey(ParameterizedJob)
+ test_parameter = dbmodels.ForeignKey(TestParameter)
+ parameter_value = dbmodels.TextField()
+ parameter_type = dbmodels.CharField(
+ max_length=8, choices=model_attributes.ParameterTypes.choices())
+
+ class Meta:
+ """Metadata for class ParameterizedJobParameter."""
+ db_table = 'afe_parameterized_job_parameters'
+ unique_together = ('parameterized_job', 'test_parameter')
+
+ def __unicode__(self):
+ return u'%s - %s' % (self.parameterized_job.job().name,
+ self.test_parameter.name)
+
+
class JobManager(model_logic.ExtendedManager):
'Custom manager to provide efficient status counts querying.'
def get_status_counts(self, job_ids):