factory_VPD: Allow assigning individual task to run.

When overriding VPD values, or when designing factory flow, it is possible that
partner want to hard-code fixed VPD values (ex, region), and still able to input
volatile values (ex, serial number).

To support that, add a new "task_list" param to specify which task to perform.

BUG=none
TEST=Manually verified factory_VPD in factory UI.

Change-Id: I6e40f977c0e456654a93871a4f6181c3c5296e7f
Reviewed-on: https://gerrit.chromium.org/gerrit/23613
Reviewed-by: Jon Salz <jsalz@chromium.org>
Tested-by: Hung-Te Lin <hungte@chromium.org>
diff --git a/client/site_tests/factory_VPD/factory_VPD.py b/client/site_tests/factory_VPD/factory_VPD.py
index 9196a4f..040343f 100644
--- a/client/site_tests/factory_VPD/factory_VPD.py
+++ b/client/site_tests/factory_VPD/factory_VPD.py
@@ -78,7 +78,11 @@
 class factory_VPD(test.test):
     version = 5
 
-    def run_once(self, override_vpd=None):
+    SERIAL_TASK_NAME = 'serial'
+    REGION_TASK_NAME = 'region'
+
+    def run_once(self, override_vpd=None,
+                 task_list=[SERIAL_TASK_NAME, REGION_TASK_NAME]):
         factory.log('%s run_once' % self.__class__)
         self.tasks = []
         self.vpd = override_vpd or {'ro': {}, 'rw': {}}
@@ -87,8 +91,10 @@
             if shopfloor.is_enabled():
                 self.tasks += [ShopFloorVpdTask(self.vpd)]
             else:
-                self.tasks += [serial_task.SerialNumberTask(self.vpd),
-                               region_task.SelectRegionTask(self.vpd)]
+                if self.SERIAL_TASK_NAME in task_list:
+                    self.tasks += [serial_task.SerialNumberTask(self.vpd)]
+                if self.REGION_TASK_NAME in task_list:
+                    self.tasks += [region_task.SelectRegionTask(self.vpd)]
         self.tasks += [WriteVpdTask(self.vpd)]
         task.run_factory_tasks(self.job, self.tasks)