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/migrations/063_parameterized_tests.py b/frontend/migrations/063_parameterized_tests.py
new file mode 100644
index 0000000..83ad3b0
--- /dev/null
+++ b/frontend/migrations/063_parameterized_tests.py
@@ -0,0 +1,144 @@
+UP_SQL = """
+CREATE TABLE afe_test_parameters (
+  id INT PRIMARY KEY AUTO_INCREMENT,
+  test_id INT NOT NULL,
+  name VARCHAR(255) NOT NULL
+) ENGINE = InnoDB;
+
+ALTER TABLE afe_test_parameters
+ADD CONSTRAINT afe_test_parameters_test_ibfk
+FOREIGN KEY (test_id) REFERENCES afe_autotests (id);
+
+ALTER TABLE afe_test_parameters
+ADD CONSTRAINT afe_test_parameters_unique
+UNIQUE KEY (test_id, name);
+
+
+CREATE TABLE afe_parameterized_jobs (
+  id INT PRIMARY KEY AUTO_INCREMENT,
+  test_id INT NOT NULL,
+  label_id INT DEFAULT NULL,
+  use_container TINYINT(1) DEFAULT 0,
+  profile_only TINYINT(1) DEFAULT 0,
+  upload_kernel_config TINYINT(1) DEFAULT 0
+) ENGINE = InnoDB;
+
+ALTER TABLE afe_parameterized_jobs
+ADD CONSTRAINT afe_parameterized_jobs_test_ibfk
+FOREIGN KEY (test_id) REFERENCES afe_autotests (id);
+
+ALTER TABLE afe_parameterized_jobs
+ADD CONSTRAINT afe_parameterized_jobs_label_ibfk
+FOREIGN KEY (label_id) REFERENCES afe_labels (id);
+
+
+CREATE TABLE afe_kernels (
+  id INT PRIMARY KEY AUTO_INCREMENT,
+  version VARCHAR(255) NOT NULL,
+  cmdline VARCHAR(255) DEFAULT ''
+) ENGINE = InnoDB;
+
+ALTER TABLE afe_kernels
+ADD CONSTRAINT afe_kernals_unique
+UNIQUE KEY (version, cmdline);
+
+
+CREATE TABLE afe_parameterized_jobs_kernels (
+  parameterized_job_id INT NOT NULL,
+  kernel_id INT NOT NULL,
+  PRIMARY KEY (parameterized_job_id, kernel_id)
+) ENGINE = InnoDB;
+
+ALTER TABLE afe_parameterized_jobs_kernels
+ADD CONSTRAINT afe_parameterized_jobs_kernels_parameterized_job_ibfk
+FOREIGN KEY (parameterized_job_id) REFERENCES afe_parameterized_jobs (id);
+
+
+CREATE TABLE afe_parameterized_jobs_profilers (
+  id INT PRIMARY KEY AUTO_INCREMENT,
+  parameterized_job_id INT NOT NULL,
+  profiler_id INT NOT NULL
+) ENGINE = InnoDB;
+
+ALTER TABLE afe_parameterized_jobs_profilers
+ADD CONSTRAINT afe_parameterized_jobs_profilers_parameterized_job_ibfk
+FOREIGN KEY (parameterized_job_id) REFERENCES afe_parameterized_jobs (id);
+
+ALTER TABLE afe_parameterized_jobs_profilers
+ADD CONSTRAINT afe_parameterized_jobs_profilers_profile_ibfk
+FOREIGN KEY (profiler_id) REFERENCES afe_profilers (id);
+
+ALTER TABLE afe_parameterized_jobs_profilers
+ADD CONSTRAINT afe_parameterized_jobs_profilers_unique
+UNIQUE KEY (parameterized_job_id, profiler_id);
+
+
+CREATE TABLE afe_parameterized_job_profiler_parameters (
+  id INT PRIMARY KEY AUTO_INCREMENT,
+  parameterized_job_profiler_id INT NOT NULL,
+  parameter_name VARCHAR(255) NOT NULL,
+  parameter_value TEXT NOT NULL,
+  parameter_type ENUM('int', 'float', 'string')
+) ENGINE = InnoDB;
+
+ALTER TABLE afe_parameterized_job_profiler_parameters
+ADD CONSTRAINT afe_parameterized_job_profiler_parameters_ibfk
+FOREIGN KEY (parameterized_job_profiler_id)
+  REFERENCES afe_parameterized_jobs_profilers (id);
+
+ALTER TABLE afe_parameterized_job_profiler_parameters
+ADD CONSTRAINT afe_parameterized_job_profiler_parameters_unique
+UNIQUE KEY (parameterized_job_profiler_id, parameter_name);
+
+
+CREATE TABLE afe_parameterized_job_parameters (
+  id INT PRIMARY KEY AUTO_INCREMENT,
+  parameterized_job_id INT NOT NULL,
+  test_parameter_id INT NOT NULL,
+  parameter_value TEXT NOT NULL,
+  parameter_type ENUM('int', 'float', 'string')
+) ENGINE = InnoDB;
+
+ALTER TABLE afe_parameterized_job_parameters
+ADD CONSTRAINT afe_parameterized_job_parameters_job_ibfk
+FOREIGN KEY (parameterized_job_id) REFERENCES afe_parameterized_jobs (id);
+
+ALTER TABLE afe_parameterized_job_parameters
+ADD CONSTRAINT afe_parameterized_job_parameters_test_parameter_ibfk
+FOREIGN KEY (test_parameter_id) REFERENCES afe_test_parameters (id);
+
+ALTER TABLE afe_parameterized_job_parameters
+ADD CONSTRAINT afe_parameterized_job_parameters_unique
+UNIQUE KEY (parameterized_job_id, test_parameter_id);
+
+
+ALTER TABLE afe_jobs
+MODIFY COLUMN control_file TEXT DEFAULT NULL;
+
+ALTER TABLE afe_jobs
+ADD COLUMN parameterized_job_id INT DEFAULT NULL;
+
+ALTER TABLE afe_jobs
+ADD CONSTRAINT afe_jobs_parameterized_job_ibfk
+FOREIGN KEY (parameterized_job_id) REFERENCES afe_parameterized_jobs (id);
+"""
+
+
+DOWN_SQL = """
+ALTER TABLE afe_jobs
+DROP FOREIGN KEY afe_jobs_parameterized_job_ibfk;
+
+ALTER TABLE afe_jobs
+DROP COLUMN parameterized_job_id;
+
+ALTER TABLE afe_jobs
+MODIFY COLUMN control_file TEXT;
+
+DROP TABLE afe_parameterized_job_parameters;
+DROP TABLE afe_parameterized_job_profiler_parameters;
+DROP TABLE afe_parameterized_jobs_profilers;
+DROP TABLE afe_parameterized_jobs_kernels;
+DROP TABLE afe_kernels;
+DROP TABLE afe_parameterized_jobs;
+DROP TABLE afe_test_parameters;
+"""