[autotest] Delete support for parameterized jobs.

This deletes the `create_parameterized_job()` RPC endpoint and the
associated (unused!) "parameterized_jobs" config setting.  It also
garbage collects code made unreferenced by these deletions.

BUG=chromium:679903
TEST=unit tests, and run push_to_prod suite in a local instance

Change-Id: I8ed683d0c8ffa879d0e10319b0a736133d56327e
Reviewed-on: https://chromium-review.googlesource.com/436407
Commit-Ready: Richard Barnette <jrbarnette@chromium.org>
Tested-by: Richard Barnette <jrbarnette@chromium.org>
Reviewed-by: Richard Barnette <jrbarnette@google.com>
diff --git a/frontend/afe/frontend_test_utils.py b/frontend/afe/frontend_test_utils.py
index 4d7cbc8..7e7e302 100644
--- a/frontend/afe/frontend_test_utils.py
+++ b/frontend/afe/frontend_test_utils.py
@@ -1,4 +1,5 @@
-import atexit, datetime, os, tempfile, unittest
+import datetime
+
 import common
 from autotest_lib.frontend import setup_test_environment
 from autotest_lib.frontend import thread_local
@@ -7,6 +8,7 @@
 from autotest_lib.client.common_lib.test_utils import mock
 
 class FrontendTestMixin(object):
+    # pylint: disable=missing-docstring
     def _fill_in_test_data(self):
         """Populate the test database with some hosts and labels."""
         if models.DroneSet.drone_sets_enabled():
@@ -68,8 +70,6 @@
         if setup_tables:
             setup_test_environment.set_up()
         global_config.global_config.override_config_value(
-                'AUTOTEST_WEB', 'parameterized_jobs', 'False')
-        global_config.global_config.override_config_value(
                 'SERVER', 'rpc_logging', 'False')
         if fill_data and setup_tables:
             self._fill_in_test_data()
@@ -84,8 +84,7 @@
     def _create_job(self, hosts=[], metahosts=[], priority=0, active=False,
                     synchronous=False, atomic_group=None, hostless=False,
                     drone_set=None, control_file='control',
-                    parameterized_job=None, owner='autotest_system',
-                    parent_job_id=None):
+                    owner='autotest_system', parent_job_id=None):
         """
         Create a job row in the test database.
 
@@ -131,8 +130,7 @@
             synch_count=synch_count, created_on=created_on,
             reboot_before=model_attributes.RebootBefore.NEVER,
             drone_set=drone_set, control_file=control_file,
-            parameterized_job=parameterized_job, parent_job=parent_job,
-            require_ssp=None)
+            parent_job=parent_job, require_ssp=None)
 
         # Update the job's dependencies to include the metahost.
         for metahost_label in metahosts:
diff --git a/frontend/afe/model_attributes.py b/frontend/afe/model_attributes.py
index 028c978..e87d10e 100644
--- a/frontend/afe/model_attributes.py
+++ b/frontend/afe/model_attributes.py
@@ -5,7 +5,3 @@
 # common enums for Job attributes
 RebootBefore = enum.Enum('Never', 'If dirty', 'Always')
 RebootAfter = enum.Enum('Never', 'If all tests passed', 'Always')
-
-
-# common enums for profiler and job parameter types
-ParameterTypes = enum.Enum('int', 'float', 'string', string_values=True)
diff --git a/frontend/afe/models.py b/frontend/afe/models.py
index 9919977..e877e8a 100644
--- a/frontend/afe/models.py
+++ b/frontend/afe/models.py
@@ -1061,145 +1061,14 @@
         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.
+
+    This stub exists merely for unit tests.  See Job.parameterized_job
+    for more details.
     """
-    test = dbmodels.ForeignKey(Test)
-    label = dbmodels.ForeignKey(Label, null=True)
-    use_container = dbmodels.BooleanField(default=False)
-    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')
-
-
-    @classmethod
-    def smart_get(cls, id_or_name, *args, **kwargs):
-        """For compatibility with Job.add_object.
-
-        @param cls: Implicit class object.
-        @param id_or_name: The ID or name to get.
-        @param args: Non-keyword arguments.
-        @param kwargs: Keyword arguments.
-        """
-        return cls.objects.get(pk=id_or_name)
-
-
-    def job(self):
-        """Returns the job if it exists, or else None."""
-        jobs = self.job_set.all()
-        assert jobs.count() <= 1
-        return jobs and jobs[0] or None
-
-
-    class Meta:
-        """Metadata for class ParameterizedJob."""
-        db_table = 'afe_parameterized_jobs'
-
-    def __unicode__(self):
-        return u'%s (parameterized) - %s' % (self.test.name, self.job())
-
-
-class ParameterizedJobProfiler(dbmodels.Model):
-    """
-    A profiler to run on a parameterized job
-    """
-    parameterized_job = dbmodels.ForeignKey(ParameterizedJob)
-    profiler = dbmodels.ForeignKey(Profiler)
-
-    class Meta:
-        """Metedata for class ParameterizedJobProfiler."""
-        db_table = 'afe_parameterized_jobs_profilers'
-        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)
+    pass
 
 
 class JobManager(model_logic.ExtendedManager):
@@ -1404,6 +1273,13 @@
     max_runtime_mins = dbmodels.IntegerField(default=DEFAULT_MAX_RUNTIME_MINS)
     drone_set = dbmodels.ForeignKey(DroneSet, null=True, blank=True)
 
+    # TODO(jrbarnette)  We have to keep `parameterized_job` around or it
+    # breaks the scheduler_models unit tests (and fixing the unit tests
+    # will break the scheduler, so don't do that).
+    #
+    # The ultimate fix is to delete the column from the database table
+    # at which point, you _must_ delete this.  Until you're ready to do
+    # that, DON'T MUCK WITH IT.
     parameterized_job = dbmodels.ForeignKey(ParameterizedJob, null=True,
                                             blank=True)
 
@@ -1442,41 +1318,6 @@
 
 
     @classmethod
-    def parameterized_jobs_enabled(cls):
-        """Returns whether parameterized jobs are enabled.
-
-        @param cls: Implicit class object.
-        """
-        return global_config.global_config.get_config_value(
-                'AUTOTEST_WEB', 'parameterized_jobs', type=bool)
-
-
-    @classmethod
-    def check_parameterized_job(cls, control_file, parameterized_job):
-        """Checks that the job is valid given the global config settings.
-
-        First, either control_file must be set, or parameterized_job must be
-        set, but not both. Second, parameterized_job must be set if and only if
-        the parameterized_jobs option in the global config is set to True.
-
-        @param cls: Implict class object.
-        @param control_file: A control file.
-        @param parameterized_job: A parameterized job.
-        """
-        if not (bool(control_file) ^ bool(parameterized_job)):
-            raise Exception('Job must have either control file or '
-                            'parameterization, but not both')
-
-        parameterized_jobs_enabled = cls.parameterized_jobs_enabled()
-        if control_file and parameterized_jobs_enabled:
-            raise Exception('Control file specified, but parameterized jobs '
-                            'are enabled')
-        if parameterized_job and not parameterized_jobs_enabled:
-            raise Exception('Parameterized job specified, but parameterized '
-                            'jobs are not enabled')
-
-
-    @classmethod
     def create(cls, owner, options, hosts):
         """Creates a job.
 
@@ -1491,16 +1332,7 @@
         AclGroup.check_for_acl_violation_hosts(hosts)
 
         control_file = options.get('control_file')
-        parameterized_job = options.get('parameterized_job')
 
-        # The current implementation of parameterized jobs requires that only
-        # control files or parameterized jobs are used. Using the image
-        # parameter on autoupdate_ParameterizedJob doesn't mix pure
-        # parameterized jobs and control files jobs, it does muck enough with
-        # normal jobs by adding a parameterized id to them that this check will
-        # fail. So for now we just skip this check.
-        # cls.check_parameterized_job(control_file=control_file,
-        #                             parameterized_job=parameterized_job)
         user = User.current_user()
         if options.get('reboot_before') is None:
             options['reboot_before'] = user.get_reboot_before_display()
@@ -1530,7 +1362,6 @@
             parse_failed_repair=options.get('parse_failed_repair'),
             created_on=datetime.now(),
             drone_set=drone_set,
-            parameterized_job=parameterized_job,
             parent_job=options.get('parent_job_id'),
             test_retry=options.get('test_retry'),
             run_reset=options.get('run_reset'),
@@ -1603,18 +1434,6 @@
         return []
 
 
-    def save(self, *args, **kwargs):
-        # The current implementation of parameterized jobs requires that only
-        # control files or parameterized jobs are used. Using the image
-        # parameter on autoupdate_ParameterizedJob doesn't mix pure
-        # parameterized jobs and control files jobs, it does muck enough with
-        # normal jobs by adding a parameterized id to them that this check will
-        # fail. So for now we just skip this check.
-        # cls.check_parameterized_job(control_file=self.control_file,
-        #                             parameterized_job=self.parameterized_job)
-        super(Job, self).save(*args, **kwargs)
-
-
     def queue(self, hosts, atomic_group=None, is_template=False):
         """Enqueue a job on the given hosts.
 
diff --git a/frontend/afe/models_test.py b/frontend/afe/models_test.py
index a4eabfd..62f2423 100755
--- a/frontend/afe/models_test.py
+++ b/frontend/afe/models_test.py
@@ -1,13 +1,12 @@
 #!/usr/bin/python
+# pylint: disable=missing-docstring
 
-import datetime
 import unittest
+
 import common
 from autotest_lib.frontend import setup_django_environment
 from autotest_lib.frontend.afe import frontend_test_utils
-from autotest_lib.frontend.afe import models, model_attributes, model_logic
-from autotest_lib.client.common_lib import global_config
-from autotest_lib.client.common_lib import control_data
+from autotest_lib.frontend.afe import models, model_logic
 
 
 class AclGroupTest(unittest.TestCase,
@@ -229,95 +228,6 @@
         self.assertEqual(0, models.Job.objects.all().count())
 
 
-class KernelTest(unittest.TestCase, frontend_test_utils.FrontendTestMixin):
-    def setUp(self):
-        self._frontend_common_setup()
-
-
-    def tearDown(self):
-        self._frontend_common_teardown()
-
-
-    def test_create_kernels_none(self):
-        self.assertEqual(None, models.Kernel.create_kernels(None))
-
-
-    def test_create_kernels(self):
-        self.god.stub_function(models.Kernel, '_create')
-
-        num_kernels = 3
-        kernel_list = [object() for _ in range(num_kernels)]
-        result = [object() for _ in range(num_kernels)]
-
-        for kernel, response in zip(kernel_list, result):
-            models.Kernel._create.expect_call(kernel).and_return(response)
-        self.assertEqual(result, models.Kernel.create_kernels(kernel_list))
-        self.god.check_playback()
-
-
-    def test_create(self):
-        kernel = models.Kernel._create({'version': 'version'})
-        self.assertEqual(kernel.version, 'version')
-        self.assertEqual(kernel.cmdline, '')
-        self.assertEqual(kernel, models.Kernel._create({'version': 'version'}))
-
-
-class ParameterizedJobTest(unittest.TestCase,
-                           frontend_test_utils.FrontendTestMixin):
-    def setUp(self):
-        self._frontend_common_setup()
-
-
-    def tearDown(self):
-        self._frontend_common_teardown()
-
-
-    def test_job(self):
-        global_config.global_config.override_config_value(
-                'AUTOTEST_WEB', 'parameterized_jobs', 'True')
-
-        test = models.Test.objects.create(
-                name='name', author='author', test_class='class',
-                test_category='category',
-                test_type=control_data.CONTROL_TYPE.SERVER, path='path')
-        parameterized_job = models.ParameterizedJob.objects.create(test=test)
-        job = self._create_job(hosts=[1], control_file=None,
-                               parameterized_job=parameterized_job)
-
-        self.assertEqual(job, parameterized_job.job())
-
-
-class JobTest(unittest.TestCase, frontend_test_utils.FrontendTestMixin):
-    def setUp(self):
-        self._frontend_common_setup()
-
-
-    def tearDown(self):
-        self._frontend_common_teardown()
-
-
-    def test_check_parameterized_jobs_no_args(self):
-        self.assertRaises(Exception, models.Job.check_parameterized_job,
-                          control_file=None, parameterized_job=None)
-
-
-    def test_check_parameterized_jobs_both_args(self):
-        self.assertRaises(Exception, models.Job.check_parameterized_job,
-                          control_file=object(), parameterized_job=object())
-
-
-    def test_check_parameterized_jobs_disabled(self):
-        self.assertRaises(Exception, models.Job.check_parameterized_job,
-                          control_file=None, parameterized_job=object())
-
-
-    def test_check_parameterized_jobs_enabled(self):
-        global_config.global_config.override_config_value(
-                'AUTOTEST_WEB', 'parameterized_jobs', 'True')
-        self.assertRaises(Exception, models.Job.check_parameterized_job,
-                          control_file=object(), parameterized_job=None)
-
-
 class SerializationTest(unittest.TestCase,
                         frontend_test_utils.FrontendTestMixin):
     def setUp(self):
diff --git a/frontend/afe/rpc_interface.py b/frontend/afe/rpc_interface.py
index c6e4882..e3fa0c1 100644
--- a/frontend/afe/rpc_interface.py
+++ b/frontend/afe/rpc_interface.py
@@ -75,16 +75,6 @@
 
 # Relevant CrosDynamicSuiteExceptions are defined in client/common_lib/error.py.
 
-def get_parameterized_autoupdate_image_url(job):
-    """Get the parameterized autoupdate image url from a parameterized job."""
-    known_test_obj = models.Test.smart_get('autoupdate_ParameterizedJob')
-    image_parameter = known_test_obj.testparameter_set.get(test=known_test_obj,
-                                                           name='image')
-    para_set = job.parameterized_job.parameterizedjobparameter_set
-    job_test_para = para_set.get(test_parameter=image_parameter)
-    return job_test_para.parameter_value
-
-
 # labels
 
 def modify_label(id, **data):
@@ -791,125 +781,6 @@
     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)
-    """
-    # 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(
-                name=name,
-                priority=priority,
-                control_type=control_type,
-                hosts=hosts,
-                meta_hosts=meta_hosts,
-                one_time_hosts=one_time_hosts,
-                atomic_group_name=atomic_group_name,
-                synch_count=synch_count,
-                is_template=is_template,
-                timeout=timeout,
-                timeout_mins=timeout_mins,
-                max_runtime_mins=max_runtime_mins,
-                run_verify=run_verify,
-                email_list=email_list,
-                dependencies=dependencies,
-                reboot_before=reboot_before,
-                reboot_after=reboot_after,
-                parse_failed_repair=parse_failed_repair,
-                hostless=hostless,
-                keyvals=keyvals,
-                drone_set=drone_set,
-                parameterized_job=parameterized_job.id,
-                run_reset=run_reset,
-                require_ssp=require_ssp)
-    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,
@@ -1228,8 +1099,6 @@
                                             for label in job.dependencies)
         job_dict['keyvals'] = dict((keyval.key, keyval.value)
                                    for keyval in job.keyvals)
-        if job.parameterized_job:
-            job_dict['image'] = get_parameterized_autoupdate_image_url(job)
         job_dicts.append(job_dict)
     return rpc_utils.prepare_for_serialization(job_dicts)
 
@@ -1320,48 +1189,42 @@
 
 
 def _get_image_for_job(job, hostless):
-    """ Gets the image used for a job.
+    """Gets the image used for a job.
 
-    Gets the image used for an AFE job. If the job is a parameterized job, get
-    the image from the job parameter; otherwise, tries to get the image from
-    the job's keyvals 'build' or 'builds'. As a last resort, if the job is a
-    hostless job, tries to get the image from its control file attributes
-    'build' or 'builds'.
+    Gets the image used for an AFE job from the job's keyvals 'build' or
+    'builds'. If that fails, and the job is a hostless job, tries to
+    get the image from its control file attributes 'build' or 'builds'.
 
     TODO(ntang): Needs to handle FAFT with two builds for ro/rw.
 
     @param job      An AFE job object.
-    @param hostless Boolean on of the job is hostless.
+    @param hostless Boolean indicating whether the job is hostless.
 
     @returns The image build used for the job.
     """
-    image = None
-    if job.parameterized_job:
-        image = get_parameterized_autoupdate_image_url(job)
-    else:
-        keyvals = job.keyval_dict()
-        image = keyvals.get('build')
-        if not image:
-            value = keyvals.get('builds')
-            builds = None
-            if isinstance(value, dict):
-                builds = value
-            elif isinstance(value, basestring):
-                builds = ast.literal_eval(value)
-            if builds:
+    keyvals = job.keyval_dict()
+    image = keyvals.get('build')
+    if not image:
+        value = keyvals.get('builds')
+        builds = None
+        if isinstance(value, dict):
+            builds = value
+        elif isinstance(value, basestring):
+            builds = ast.literal_eval(value)
+        if builds:
+            image = builds.get('cros-version')
+    if not image and hostless and job.control_file:
+        try:
+            control_obj = control_data.parse_control_string(
+                    job.control_file)
+            if hasattr(control_obj, 'build'):
+                image = getattr(control_obj, 'build')
+            if not image and hasattr(control_obj, 'builds'):
+                builds = getattr(control_obj, 'builds')
                 image = builds.get('cros-version')
-        if not image and hostless and job.control_file:
-            try:
-                control_obj = control_data.parse_control_string(
-                        job.control_file)
-                if hasattr(control_obj, 'build'):
-                    image = getattr(control_obj, 'build')
-                if not image and hasattr(control_obj, 'builds'):
-                    builds = getattr(control_obj, 'builds')
-                    image = builds.get('cros-version')
-            except:
-                logging.warning('Failed to parse control file for job: %s',
-                                job.name)
+        except:
+            logging.warning('Failed to parse control file for job: %s',
+                            job.name)
     return image
 
 
@@ -1709,7 +1572,6 @@
     result['motd'] = rpc_utils.get_motd()
     result['drone_sets_enabled'] = models.DroneSet.drone_sets_enabled()
     result['drone_sets'] = drone_sets
-    result['parameterized_jobs'] = models.Job.parameterized_jobs_enabled()
 
     result['status_dictionary'] = {"Aborted": "Aborted",
                                    "Verifying": "Verifying Host",
diff --git a/frontend/afe/rpc_interface_unittest.py b/frontend/afe/rpc_interface_unittest.py
index 89a7144..06f0c86 100755
--- a/frontend/afe/rpc_interface_unittest.py
+++ b/frontend/afe/rpc_interface_unittest.py
@@ -14,7 +14,6 @@
 from autotest_lib.client.common_lib.test_utils import mock
 from autotest_lib.frontend import setup_django_environment
 from autotest_lib.frontend.afe import frontend_test_utils
-from autotest_lib.frontend.afe import model_attributes
 from autotest_lib.frontend.afe import model_logic
 from autotest_lib.frontend.afe import models
 from autotest_lib.frontend.afe import rpc_interface
@@ -397,56 +396,6 @@
         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=control_data.CONTROL_TYPE.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=priorities.Priority.DEFAULT, 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)
-
-
     def _modify_host_helper(self, on_shard=False, host_on_shard=False):
         shard_hostname = 'shard1'
         if on_shard:
@@ -640,21 +589,6 @@
         self.god.check_playback()
 
 
-    def test_get_image_for_job_parameterized(self):
-        test = models.Test.objects.create(
-            name='name', author='author', test_class='class',
-            test_category='category',
-            test_type=control_data.CONTROL_TYPE.SERVER, path='path')
-        parameterized_job = models.ParameterizedJob.objects.create(test=test)
-        job = self._create_job(hosts=[1])
-        job.parameterized_job = parameterized_job
-        self.god.stub_function_to_return(rpc_interface,
-                'get_parameterized_autoupdate_image_url', 'cool-image')
-        image = rpc_interface._get_image_for_job(job, True)
-        self.assertEquals('cool-image', image)
-        self.god.check_playback()
-
-
     def test_get_image_for_job_with_keyval_build(self):
         keyval_dict = {'build': 'cool-image'}
         job_id = rpc_interface.create_job(name='test',
diff --git a/frontend/afe/rpc_utils.py b/frontend/afe/rpc_utils.py
index b98ecc0..92643be 100644
--- a/frontend/afe/rpc_utils.py
+++ b/frontend/afe/rpc_utils.py
@@ -898,7 +898,6 @@
         hostless=False,
         keyvals=None,
         drone_set=None,
-        parameterized_job=None,
         parent_job_id=None,
         test_retry=0,
         run_reset=True,
@@ -990,7 +989,6 @@
                    parse_failed_repair=parse_failed_repair,
                    keyvals=keyvals,
                    drone_set=drone_set,
-                   parameterized_job=parameterized_job,
                    parent_job_id=parent_job_id,
                    test_retry=test_retry,
                    run_reset=run_reset,
diff --git a/frontend/frontend_unittest.py b/frontend/frontend_unittest.py
index 4d1d902..22e38a0 100755
--- a/frontend/frontend_unittest.py
+++ b/frontend/frontend_unittest.py
@@ -1,4 +1,5 @@
 #!/usr/bin/python
+# pylint: disable=missing-docstring
 
 import unittest, os
 import common
@@ -13,8 +14,6 @@
     def setUp(self):
         setup_test_environment.set_up()
         global_config.global_config.override_config_value(
-                'AUTOTEST_WEB', 'parameterized_jobs', 'False')
-        global_config.global_config.override_config_value(
                 'SERVER', 'rpc_logging', 'False')