faft: Refactor setup_mode and restore_mode

The change moves and splits the original logic on setup_dev_mode and
restore_dev_mode to FAFTCheckers and ModeSwitcher. It is also enhanced
to support setting up all firmware modes, including recovery. They are
now methods in ModeSwitcher as they are highly related to mode
switching.

BUG=chrome-os-partner:39744
TEST=Switched DUT to normal mode and ran firmware_DevMode. Then
switched DUT to dev mode and run firmware_DevMode. Checked DUT
restored to the original mode state.

Change-Id: I16314d18b785da59473df3ef5e02f7fe8f2693b0
Reviewed-on: https://chromium-review.googlesource.com/268858
Reviewed-by: Yusuf Mohsinally <mohsinally@chromium.org>
Commit-Queue: Tom Tam <waihong@google.com>
Tested-by: Tom Tam <waihong@google.com>
diff --git a/server/cros/faft/firmware_test.py b/server/cros/faft/firmware_test.py
index 7e5c338..b1ac6bb 100644
--- a/server/cros/faft/firmware_test.py
+++ b/server/cros/faft/firmware_test.py
@@ -164,7 +164,7 @@
 
         self.faft_config = FAFTConfig(
                 self.faft_client.system.get_platform_name())
-        self.checkers = FAFTCheckers(self, self.faft_client)
+        self.checkers = FAFTCheckers(self)
         self.switcher = ModeSwitcher(self)
 
         if self.faft_config.chrome_ec:
@@ -198,7 +198,7 @@
             # Remote is not responding. Revive DUT so that subsequent tests
             # don't fail.
             self._restore_routine_from_timeout()
-        self._restore_dev_mode()
+        self.switcher.restore_mode()
         self._restore_ec_write_protect()
         self._restore_gbb_flags()
         self._start_service('update-engine')
@@ -907,44 +907,6 @@
         """Power cycle DUT AC power."""
         self._client.power_cycle(self.power_control)
 
-    def setup_dev_mode(self, dev_mode):
-        """Setup for development mode.
-
-        It makes sure the system in the requested normal/dev mode. If not, it
-        tries to do so.
-
-        @param dev_mode: True if requested in dev mode; False if normal mode.
-        """
-        if dev_mode:
-            if (not self.faft_config.keyboard_dev and
-                not self.checkers.crossystem_checker({'devsw_cur': '1'})):
-                logging.info('Dev switch is not on. Now switch it on.')
-                self.switcher.reboot_to_mode(to_mode='dev')
-            if not self.checkers.crossystem_checker({'devsw_boot': '1',
-                    'mainfw_type': 'developer'}):
-                logging.info('System is not in dev mode. Reboot into it.')
-                if self._backup_dev_mode is None:
-                    self._backup_dev_mode = False
-                self.switcher.reboot_to_mode(to_mode='dev')
-                self.wait_dev_screen_and_ctrl_d()
-        else:
-            if (not self.faft_config.keyboard_dev and
-                not self.checkers.crossystem_checker({'devsw_cur': '0'})):
-                logging.info('Dev switch is not off. Now switch it off.')
-                self.switcher.reboot_to_mode(to_mode='normal')
-            if not self.checkers.crossystem_checker({'devsw_boot': '0',
-                    'mainfw_type': 'normal'}):
-                logging.info('System is not in normal mode. Reboot into it.')
-                if self._backup_dev_mode is None:
-                    self._backup_dev_mode = True
-                self.switcher.reboot_to_mode(to_mode='normal')
-
-    def _restore_dev_mode(self):
-        """Restores original dev mode status if it has changed."""
-        if self._backup_dev_mode is not None:
-            self.setup_dev_mode(self._backup_dev_mode)
-            self._backup_dev_mode = None
-
     def setup_rw_boot(self, section='a'):
         """Make sure firmware is in RW-boot mode.
 
diff --git a/server/cros/faft/utils/faft_checkers.py b/server/cros/faft/utils/faft_checkers.py
index 79f994e..7629c79 100644
--- a/server/cros/faft/utils/faft_checkers.py
+++ b/server/cros/faft/utils/faft_checkers.py
@@ -13,9 +13,10 @@
     """Class that contains FAFT checkers."""
     version = 1
 
-    def __init__(self, faftsequence, faft_client):
-        self.faftsequence = faftsequence
-        self.faft_client = faft_client
+    def __init__(self, faft_framework):
+        self.faft_framework = faft_framework
+        self.faft_client = faft_framework.faft_client
+        self.faft_config = faft_framework.faft_config
         self.fw_vboot2 = self.faft_client.system.get_fw_vboot2()
 
     def _parse_crossystem_output(self, lines):
@@ -100,6 +101,34 @@
                 succeed = False
         return succeed
 
+    def mode_checker(self, mode):
+        """Check the current system in the given mode.
+
+        @param mode: A string of mode, one of 'normal', 'dev', or 'rec'.
+        @return: True if the system in the given mode; otherwise, False.
+        """
+        if mode == 'normal':
+            if self.faft_config.keyboard_dev:
+                return self.crossystem_checker(
+                        {'devsw_boot': '0',
+                         'mainfw_type': 'normal'})
+            else:
+                return self.crossystem_checker(
+                        {'devsw_cur': '0'})
+        elif mode == 'dev':
+            if self.faft_config.keyboard_dev:
+                return self.crossystem_checker(
+                        {'devsw_boot': '1',
+                         'mainfw_type': 'developer'})
+            else:
+                return self.crossystem_checker(
+                        {'devsw_cur': '1'})
+        elif mode == 'rec':
+            return self.crossystem_checker(
+                    {'mainfw_type': 'recovery'})
+        else:
+            raise NotImplementedError('The given mode %s not supported' % mode)
+
     def fw_tries_checker(self,
                          expected_mainfw_act,
                          expected_fw_tried=True,
@@ -177,7 +206,7 @@
             succeed = False
         if not self.crossystem_checker(crossystem_dict):
             succeed = False
-        if self.faftsequence.check_ec_capability(suppress_warning=True):
+        if self.faft_framework.check_ec_capability(suppress_warning=True):
             expected_ec = ('RW' if twostop else 'RO')
             if not self.ec_act_copy_checker(expected_ec):
                 succeed = False
@@ -202,9 +231,9 @@
                  otherwise, False.
         """
         part = self.faft_client.system.get_root_part()[-1]
-        if self.faftsequence.ROOTFS_MAP[expected_part] != part:
+        if self.faft_framework.ROOTFS_MAP[expected_part] != part:
             logging.info("Expected root part %s but got %s",
-                         self.faftsequence.ROOTFS_MAP[expected_part], part)
+                         self.faft_framework.ROOTFS_MAP[expected_part], part)
             return False
         return True
 
diff --git a/server/cros/faft/utils/mode_switcher.py b/server/cros/faft/utils/mode_switcher.py
index eeb2747..81c391b 100644
--- a/server/cros/faft/utils/mode_switcher.py
+++ b/server/cros/faft/utils/mode_switcher.py
@@ -14,6 +14,35 @@
         self.faft_client = faft_framework.faft_client
         self.servo = faft_framework.servo
         self.faft_config = faft_framework.faft_config
+        self.checkers = faft_framework.checkers
+        self._backup_mode = None
+
+
+    def setup_mode(self, mode):
+        """Setup for the requested mode.
+
+        It makes sure the system in the requested mode. If not, it tries to
+        do so.
+
+        @param mode: A string of mode, one of 'normal', 'dev', or 'rec'.
+        """
+        if not self.checkers.mode_checker(mode):
+            logging.info('System not in expected %s mode. Reboot into it.',
+                         mode)
+            if self._backup_mode is None:
+                # Only resume to normal/dev mode after test, not recovery.
+                self._backup_mode = 'dev' if mode == 'normal' else 'normal'
+            self.reboot_to_mode(mode)
+            if mode == 'dev':
+                self.faft_framework.wait_dev_screen_and_ctrl_d()
+
+
+    def restore_mode(self):
+        """Restores original dev mode status if it has changed."""
+        if self._backup_mode is not None:
+            self.reboot_to_mode(self._backup_mode)
+            if self._backup_mode == 'dev':
+                self.faft_framework.wait_dev_screen_and_ctrl_d()
 
 
     def reboot_to_mode(self, to_mode, from_mode=None):
diff --git a/server/site_tests/firmware_CgptState/firmware_CgptState.py b/server/site_tests/firmware_CgptState/firmware_CgptState.py
index 69f4206..caa55ac 100644
--- a/server/site_tests/firmware_CgptState/firmware_CgptState.py
+++ b/server/site_tests/firmware_CgptState/firmware_CgptState.py
@@ -44,7 +44,7 @@
         super(firmware_CgptState, self).initialize(host, cmdline_args)
         self.host = host
         self.backup_cgpt_attributes()
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
         self.setup_usbkey(usbkey=False)
         self.setup_kernel('a')
 
diff --git a/server/site_tests/firmware_CgptStress/firmware_CgptStress.py b/server/site_tests/firmware_CgptStress/firmware_CgptStress.py
index 7d31da4..4736697 100644
--- a/server/site_tests/firmware_CgptStress/firmware_CgptStress.py
+++ b/server/site_tests/firmware_CgptStress/firmware_CgptStress.py
@@ -21,7 +21,7 @@
         self.faft_iterations = int(dict_args.get('faft_iterations', 1))
         super(firmware_CgptStress, self).initialize(host, cmdline_args)
         self.backup_cgpt_attributes()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
         self.setup_kernel('a')
 
diff --git a/server/site_tests/firmware_ConsecutiveBoot/firmware_ConsecutiveBoot.py b/server/site_tests/firmware_ConsecutiveBoot/firmware_ConsecutiveBoot.py
index 49c2749..d62593b 100644
--- a/server/site_tests/firmware_ConsecutiveBoot/firmware_ConsecutiveBoot.py
+++ b/server/site_tests/firmware_ConsecutiveBoot/firmware_ConsecutiveBoot.py
@@ -27,7 +27,7 @@
         dict_args = utils.args_to_dict(cmdline_args)
         self.faft_iterations = int(dict_args.get('faft_iterations', 1))
         super(firmware_ConsecutiveBoot, self).initialize(host, cmdline_args)
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
 
     def shutdown_power_on(self):
diff --git a/server/site_tests/firmware_ConsecutiveBootPowerButton/firmware_ConsecutiveBootPowerButton.py b/server/site_tests/firmware_ConsecutiveBootPowerButton/firmware_ConsecutiveBootPowerButton.py
index e342d63..d70ea95 100644
--- a/server/site_tests/firmware_ConsecutiveBootPowerButton/firmware_ConsecutiveBootPowerButton.py
+++ b/server/site_tests/firmware_ConsecutiveBootPowerButton/firmware_ConsecutiveBootPowerButton.py
@@ -26,7 +26,7 @@
         self.faft_iterations = int(dict_args.get('faft_iterations', 1))
         super(firmware_ConsecutiveBootPowerButton,
               self).initialize(host, cmdline_args)
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
 
 
diff --git a/server/site_tests/firmware_CorruptBothFwBodyAB/firmware_CorruptBothFwBodyAB.py b/server/site_tests/firmware_CorruptBothFwBodyAB/firmware_CorruptBothFwBodyAB.py
index d0a9310..70769f2 100644
--- a/server/site_tests/firmware_CorruptBothFwBodyAB/firmware_CorruptBothFwBodyAB.py
+++ b/server/site_tests/firmware_CorruptBothFwBodyAB/firmware_CorruptBothFwBodyAB.py
@@ -30,9 +30,9 @@
         if (self.faft_client.bios.get_preamble_flags('a') &
                 vboot.PREAMBLE_USE_RO_NORMAL):
             self.use_ro = True
-            self.setup_dev_mode(dev_mode)
+            self.switcher.setup_mode('dev' if dev_mode else 'normal')
         else:
-            self.setup_dev_mode(dev_mode)
+            self.switcher.setup_mode('dev' if dev_mode else 'normal')
             self.setup_usbkey(usbkey=True, host=False)
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_CorruptBothFwSigAB/firmware_CorruptBothFwSigAB.py b/server/site_tests/firmware_CorruptBothFwSigAB/firmware_CorruptBothFwSigAB.py
index ad20825..c9a7442 100644
--- a/server/site_tests/firmware_CorruptBothFwSigAB/firmware_CorruptBothFwSigAB.py
+++ b/server/site_tests/firmware_CorruptBothFwSigAB/firmware_CorruptBothFwSigAB.py
@@ -23,7 +23,7 @@
     def initialize(self, host, cmdline_args, dev_mode=False):
         super(firmware_CorruptBothFwSigAB, self).initialize(host, cmdline_args)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=True, host=False)
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_CorruptBothKernelAB/firmware_CorruptBothKernelAB.py b/server/site_tests/firmware_CorruptBothKernelAB/firmware_CorruptBothKernelAB.py
index 12693a6..e7f2115 100644
--- a/server/site_tests/firmware_CorruptBothKernelAB/firmware_CorruptBothKernelAB.py
+++ b/server/site_tests/firmware_CorruptBothKernelAB/firmware_CorruptBothKernelAB.py
@@ -38,7 +38,7 @@
         super(firmware_CorruptBothKernelAB, self).initialize(host, cmdline_args)
         self.backup_kernel()
         self.backup_cgpt_attributes()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=True, host=False)
         self.setup_kernel('a')
 
diff --git a/server/site_tests/firmware_CorruptFwBodyA/firmware_CorruptFwBodyA.py b/server/site_tests/firmware_CorruptFwBodyA/firmware_CorruptFwBodyA.py
index 70178d5..81360ec 100644
--- a/server/site_tests/firmware_CorruptFwBodyA/firmware_CorruptFwBodyA.py
+++ b/server/site_tests/firmware_CorruptFwBodyA/firmware_CorruptFwBodyA.py
@@ -23,7 +23,7 @@
     def initialize(self, host, cmdline_args, dev_mode=False):
         super(firmware_CorruptFwBodyA, self).initialize(host, cmdline_args)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_CorruptFwBodyB/firmware_CorruptFwBodyB.py b/server/site_tests/firmware_CorruptFwBodyB/firmware_CorruptFwBodyB.py
index a25afbf..0322df2 100644
--- a/server/site_tests/firmware_CorruptFwBodyB/firmware_CorruptFwBodyB.py
+++ b/server/site_tests/firmware_CorruptFwBodyB/firmware_CorruptFwBodyB.py
@@ -23,7 +23,7 @@
     def initialize(self, host, cmdline_args, dev_mode=False):
         super(firmware_CorruptFwBodyB, self).initialize(host, cmdline_args)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_CorruptFwSigA/firmware_CorruptFwSigA.py b/server/site_tests/firmware_CorruptFwSigA/firmware_CorruptFwSigA.py
index b6cb7f5..5ef442a 100644
--- a/server/site_tests/firmware_CorruptFwSigA/firmware_CorruptFwSigA.py
+++ b/server/site_tests/firmware_CorruptFwSigA/firmware_CorruptFwSigA.py
@@ -16,7 +16,7 @@
     def initialize(self, host, cmdline_args, dev_mode=False):
         super(firmware_CorruptFwSigA, self).initialize(host, cmdline_args)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_CorruptFwSigB/firmware_CorruptFwSigB.py b/server/site_tests/firmware_CorruptFwSigB/firmware_CorruptFwSigB.py
index c748810..d23d680 100644
--- a/server/site_tests/firmware_CorruptFwSigB/firmware_CorruptFwSigB.py
+++ b/server/site_tests/firmware_CorruptFwSigB/firmware_CorruptFwSigB.py
@@ -16,7 +16,7 @@
     def initialize(self, host, cmdline_args, dev_mode=False):
         super(firmware_CorruptFwSigB, self).initialize(host, cmdline_args)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_CorruptKernelA/firmware_CorruptKernelA.py b/server/site_tests/firmware_CorruptKernelA/firmware_CorruptKernelA.py
index be0ef7f..e242148 100644
--- a/server/site_tests/firmware_CorruptKernelA/firmware_CorruptKernelA.py
+++ b/server/site_tests/firmware_CorruptKernelA/firmware_CorruptKernelA.py
@@ -20,7 +20,7 @@
         super(firmware_CorruptKernelA, self).initialize(host, cmdline_args)
         self.backup_kernel()
         self.backup_cgpt_attributes()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
         self.setup_kernel('a')
 
diff --git a/server/site_tests/firmware_CorruptKernelB/firmware_CorruptKernelB.py b/server/site_tests/firmware_CorruptKernelB/firmware_CorruptKernelB.py
index 4500395..908c7de 100644
--- a/server/site_tests/firmware_CorruptKernelB/firmware_CorruptKernelB.py
+++ b/server/site_tests/firmware_CorruptKernelB/firmware_CorruptKernelB.py
@@ -21,7 +21,7 @@
         super(firmware_CorruptKernelB, self).initialize(host, cmdline_args)
         self.backup_kernel()
         self.backup_cgpt_attributes()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
         self.setup_kernel('a')
 
diff --git a/server/site_tests/firmware_DevBootUSB/firmware_DevBootUSB.py b/server/site_tests/firmware_DevBootUSB/firmware_DevBootUSB.py
index 4191293..5c38518 100644
--- a/server/site_tests/firmware_DevBootUSB/firmware_DevBootUSB.py
+++ b/server/site_tests/firmware_DevBootUSB/firmware_DevBootUSB.py
@@ -24,7 +24,7 @@
     def initialize(self, host, cmdline_args, ec_wp=None):
         super(firmware_DevBootUSB, self).initialize(host, cmdline_args,
                                                     ec_wp=ec_wp)
-        self.setup_dev_mode(dev_mode=True)
+        self.switcher.setup_mode('dev')
         self.setup_usbkey(usbkey=True, host=False)
 
         self.original_dev_boot_usb = self.faft_client.system.get_dev_boot_usb()
diff --git a/server/site_tests/firmware_DevMode/firmware_DevMode.py b/server/site_tests/firmware_DevMode/firmware_DevMode.py
index fcf11da..e54c754 100644
--- a/server/site_tests/firmware_DevMode/firmware_DevMode.py
+++ b/server/site_tests/firmware_DevMode/firmware_DevMode.py
@@ -16,13 +16,9 @@
     def initialize(self, host, cmdline_args, ec_wp=None):
         super(firmware_DevMode, self).initialize(host, cmdline_args,
                                                  ec_wp=ec_wp)
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
         self.setup_usbkey(usbkey=False)
 
-    def cleanup(self):
-        self.setup_dev_mode(dev_mode=False)
-        super(firmware_DevMode, self).cleanup()
-
     def run_once(self):
         logging.info("Enable dev mode.")
         self.check_state((self.checkers.crossystem_checker, {
diff --git a/server/site_tests/firmware_DevModeStress/firmware_DevModeStress.py b/server/site_tests/firmware_DevModeStress/firmware_DevModeStress.py
index 3a4c3e9..016a8cd 100644
--- a/server/site_tests/firmware_DevModeStress/firmware_DevModeStress.py
+++ b/server/site_tests/firmware_DevModeStress/firmware_DevModeStress.py
@@ -57,7 +57,7 @@
         dict_args = utils.args_to_dict(cmdline_args)
         self.faft_iterations = int(dict_args.get('faft_iterations', 1))
         super(firmware_DevModeStress, self).initialize(host, cmdline_args)
-        self.setup_dev_mode(dev_mode=True)
+        self.switcher.setup_mode('dev')
         self.setup_usbkey(usbkey=False)
 
     def run_once(self):
diff --git a/server/site_tests/firmware_DevScreenTimeout/firmware_DevScreenTimeout.py b/server/site_tests/firmware_DevScreenTimeout/firmware_DevScreenTimeout.py
index 0997b53..5fc32f5 100644
--- a/server/site_tests/firmware_DevScreenTimeout/firmware_DevScreenTimeout.py
+++ b/server/site_tests/firmware_DevScreenTimeout/firmware_DevScreenTimeout.py
@@ -81,7 +81,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_DevScreenTimeout, self).initialize(host, cmdline_args)
         # This test is run on developer mode only.
-        self.setup_dev_mode(dev_mode=True)
+        self.switcher.setup_mode('dev')
         self.setup_usbkey(usbkey=False)
 
     def run_once(self):
diff --git a/server/site_tests/firmware_DevTriggerRecovery/firmware_DevTriggerRecovery.py b/server/site_tests/firmware_DevTriggerRecovery/firmware_DevTriggerRecovery.py
index dc160ac..f93a42f 100644
--- a/server/site_tests/firmware_DevTriggerRecovery/firmware_DevTriggerRecovery.py
+++ b/server/site_tests/firmware_DevTriggerRecovery/firmware_DevTriggerRecovery.py
@@ -60,7 +60,7 @@
 
     def initialize(self, host, cmdline_args):
         super(firmware_DevTriggerRecovery, self).initialize(host, cmdline_args)
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
         self.setup_usbkey(usbkey=True, host=False)
 
     def run_once(self):
diff --git a/server/site_tests/firmware_ECBattery/firmware_ECBattery.py b/server/site_tests/firmware_ECBattery/firmware_ECBattery.py
index 0f7de5c..7aaa75e 100644
--- a/server/site_tests/firmware_ECBattery/firmware_ECBattery.py
+++ b/server/site_tests/firmware_ECBattery/firmware_ECBattery.py
@@ -39,7 +39,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECBattery, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
         self.ec.send_command("chan 0")
 
 
diff --git a/server/site_tests/firmware_ECBootTime/firmware_ECBootTime.py b/server/site_tests/firmware_ECBootTime/firmware_ECBootTime.py
index 88f19ec..66cb20c 100644
--- a/server/site_tests/firmware_ECBootTime/firmware_ECBootTime.py
+++ b/server/site_tests/firmware_ECBootTime/firmware_ECBootTime.py
@@ -17,7 +17,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECBootTime, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
 
     def check_boot_time(self):
         """Check EC and AP boot times"""
diff --git a/server/site_tests/firmware_ECCharging/firmware_ECCharging.py b/server/site_tests/firmware_ECCharging/firmware_ECCharging.py
index d2452cc..d2038e00 100644
--- a/server/site_tests/firmware_ECCharging/firmware_ECCharging.py
+++ b/server/site_tests/firmware_ECCharging/firmware_ECCharging.py
@@ -19,7 +19,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECCharging, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
         self.ec.send_command("chan 0")
 
 
diff --git a/server/site_tests/firmware_ECHash/firmware_ECHash.py b/server/site_tests/firmware_ECHash/firmware_ECHash.py
index 1cc51b8..7a9ef92 100644
--- a/server/site_tests/firmware_ECHash/firmware_ECHash.py
+++ b/server/site_tests/firmware_ECHash/firmware_ECHash.py
@@ -24,7 +24,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECHash, self).initialize(host, cmdline_args)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
         self.setup_usbkey(usbkey=False)
         self.setup_rw_boot()
 
diff --git a/server/site_tests/firmware_ECKeyboard/firmware_ECKeyboard.py b/server/site_tests/firmware_ECKeyboard/firmware_ECKeyboard.py
index 3858bd6..86db2ba 100644
--- a/server/site_tests/firmware_ECKeyboard/firmware_ECKeyboard.py
+++ b/server/site_tests/firmware_ECKeyboard/firmware_ECKeyboard.py
@@ -21,7 +21,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECKeyboard, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
 
     def switch_tty2(self):
         """Switch to tty2 console."""
diff --git a/server/site_tests/firmware_ECKeyboardReboot/firmware_ECKeyboardReboot.py b/server/site_tests/firmware_ECKeyboardReboot/firmware_ECKeyboardReboot.py
index 6be09fc..9e43ca3 100644
--- a/server/site_tests/firmware_ECKeyboardReboot/firmware_ECKeyboardReboot.py
+++ b/server/site_tests/firmware_ECKeyboardReboot/firmware_ECKeyboardReboot.py
@@ -27,7 +27,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECKeyboardReboot, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
         self.host = host
 
     def confirm_dut_off(self):
diff --git a/server/site_tests/firmware_ECLidSwitch/firmware_ECLidSwitch.py b/server/site_tests/firmware_ECLidSwitch/firmware_ECLidSwitch.py
index eff165a..3daaaef 100644
--- a/server/site_tests/firmware_ECLidSwitch/firmware_ECLidSwitch.py
+++ b/server/site_tests/firmware_ECLidSwitch/firmware_ECLidSwitch.py
@@ -40,7 +40,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECLidSwitch, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
 
     def _open_lid(self):
         """Open lid by servo."""
diff --git a/server/site_tests/firmware_ECPowerButton/firmware_ECPowerButton.py b/server/site_tests/firmware_ECPowerButton/firmware_ECPowerButton.py
index b27b04b..23b57bf 100644
--- a/server/site_tests/firmware_ECPowerButton/firmware_ECPowerButton.py
+++ b/server/site_tests/firmware_ECPowerButton/firmware_ECPowerButton.py
@@ -35,7 +35,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECPowerButton, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
 
     def kill_powerd(self):
         """Stop powerd on client."""
diff --git a/server/site_tests/firmware_ECPowerG3/firmware_ECPowerG3.py b/server/site_tests/firmware_ECPowerG3/firmware_ECPowerG3.py
index 675d9c8..e8ebf56 100644
--- a/server/site_tests/firmware_ECPowerG3/firmware_ECPowerG3.py
+++ b/server/site_tests/firmware_ECPowerG3/firmware_ECPowerG3.py
@@ -23,7 +23,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECPowerG3, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
         self.ec.send_command("chan 0")
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_ECSharedMem/firmware_ECSharedMem.py b/server/site_tests/firmware_ECSharedMem/firmware_ECSharedMem.py
index 1474c29..4fae89f 100644
--- a/server/site_tests/firmware_ECSharedMem/firmware_ECSharedMem.py
+++ b/server/site_tests/firmware_ECSharedMem/firmware_ECSharedMem.py
@@ -18,7 +18,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECSharedMem, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
         self.ec.send_command("chan 0")
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_ECUsbPorts/firmware_ECUsbPorts.py b/server/site_tests/firmware_ECUsbPorts/firmware_ECUsbPorts.py
index aefc0e8..7d22cf5 100644
--- a/server/site_tests/firmware_ECUsbPorts/firmware_ECUsbPorts.py
+++ b/server/site_tests/firmware_ECUsbPorts/firmware_ECUsbPorts.py
@@ -34,7 +34,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECUsbPorts, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
         self.ec.send_command("chan 0")
 
 
diff --git a/server/site_tests/firmware_ECWakeSource/firmware_ECWakeSource.py b/server/site_tests/firmware_ECWakeSource/firmware_ECWakeSource.py
index 0445d93..67d229f 100644
--- a/server/site_tests/firmware_ECWakeSource/firmware_ECWakeSource.py
+++ b/server/site_tests/firmware_ECWakeSource/firmware_ECWakeSource.py
@@ -40,7 +40,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECWakeSource, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
 
     @delayed(WAKE_DELAY)
     def wake_by_power_button(self):
diff --git a/server/site_tests/firmware_ECWatchdog/firmware_ECWatchdog.py b/server/site_tests/firmware_ECWatchdog/firmware_ECWatchdog.py
index a0a4b02..9ba0ecb 100644
--- a/server/site_tests/firmware_ECWatchdog/firmware_ECWatchdog.py
+++ b/server/site_tests/firmware_ECWatchdog/firmware_ECWatchdog.py
@@ -25,7 +25,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_ECWatchdog, self).initialize(host, cmdline_args)
         # Only run in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
 
 
     def reboot_by_watchdog(self):
diff --git a/server/site_tests/firmware_ECWriteProtect/firmware_ECWriteProtect.py b/server/site_tests/firmware_ECWriteProtect/firmware_ECWriteProtect.py
index bbfd6e1..6d82dbf 100644
--- a/server/site_tests/firmware_ECWriteProtect/firmware_ECWriteProtect.py
+++ b/server/site_tests/firmware_ECWriteProtect/firmware_ECWriteProtect.py
@@ -34,7 +34,7 @@
         super(firmware_ECWriteProtect, self).initialize(host, cmdline_args,
                                                         ec_wp=False)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.ec.send_command("chan 0")
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_EventLog/firmware_EventLog.py b/server/site_tests/firmware_EventLog/firmware_EventLog.py
index 203b247..1335993 100644
--- a/server/site_tests/firmware_EventLog/firmware_EventLog.py
+++ b/server/site_tests/firmware_EventLog/firmware_EventLog.py
@@ -18,7 +18,7 @@
 
     def initialize(self, host, cmdline_args):
         super(firmware_EventLog, self).initialize(host, cmdline_args)
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
 
     def _has_event(self, pattern):
         return bool(filter(re.compile(pattern).search, self._events))
diff --git a/server/site_tests/firmware_FWtries/firmware_FWtries.py b/server/site_tests/firmware_FWtries/firmware_FWtries.py
index 9a7ffdf..3d5813f 100644
--- a/server/site_tests/firmware_FWtries/firmware_FWtries.py
+++ b/server/site_tests/firmware_FWtries/firmware_FWtries.py
@@ -48,7 +48,7 @@
         dict_args = utils.args_to_dict(cmdline_args)
         super(firmware_FWtries, self).initialize(host, cmdline_args)
         # Set device in normal mode
-        self.setup_dev_mode(False)
+        self.switcher.setup_mode('normal')
 
     def run_once(self, host):
         self.check_state((self.checkers.fw_tries_checker, ('A', True, 0)))
diff --git a/server/site_tests/firmware_FWupdate/firmware_FWupdate.py b/server/site_tests/firmware_FWupdate/firmware_FWupdate.py
index 780d0eb..1ad0ac2 100644
--- a/server/site_tests/firmware_FWupdate/firmware_FWupdate.py
+++ b/server/site_tests/firmware_FWupdate/firmware_FWupdate.py
@@ -57,9 +57,9 @@
         if 'mode' in dict_args:
           self.mode = dict_args['mode']
           if self.mode == 'recovery':
-            self.setup_dev_mode(False)  # Set device to normal mode
+            self.switcher.setup_mode('normal')  # Set device to normal mode
           elif self.mode == 'factory':
-            self.setup_dev_mode(True)   # Set device to dev mode
+            self.switcher.setup_mode('dev')   # Set device to dev mode
           else:
             raise error.TestError('Unknown mode:%s' % self.mode)
 
diff --git a/server/site_tests/firmware_FwScreenCloseLid/firmware_FwScreenCloseLid.py b/server/site_tests/firmware_FwScreenCloseLid/firmware_FwScreenCloseLid.py
index cb753f1..81bfce0 100644
--- a/server/site_tests/firmware_FwScreenCloseLid/firmware_FwScreenCloseLid.py
+++ b/server/site_tests/firmware_FwScreenCloseLid/firmware_FwScreenCloseLid.py
@@ -38,7 +38,7 @@
         super(firmware_FwScreenCloseLid, self).initialize(host, cmdline_args)
         if self.faft_config.has_lid:
             self.assert_test_image_in_usb_disk()
-            self.setup_dev_mode(dev_mode=True)
+            self.switcher.setup_mode('dev')
             self.servo.switch_usbkey('host')
             usb_dev = self.servo.probe_host_usb_dev()
             # Corrupt the kernel of USB stick. It is needed for triggering a
diff --git a/server/site_tests/firmware_FwScreenPressPower/firmware_FwScreenPressPower.py b/server/site_tests/firmware_FwScreenPressPower/firmware_FwScreenPressPower.py
index 247ed86..27cc095 100644
--- a/server/site_tests/firmware_FwScreenPressPower/firmware_FwScreenPressPower.py
+++ b/server/site_tests/firmware_FwScreenPressPower/firmware_FwScreenPressPower.py
@@ -36,7 +36,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_FwScreenPressPower, self).initialize(host, cmdline_args)
         self.assert_test_image_in_usb_disk()
-        self.setup_dev_mode(dev_mode=True)
+        self.switcher.setup_mode('dev')
         self.servo.switch_usbkey('host')
         usb_dev = self.servo.probe_host_usb_dev()
         # Corrupt the kernel of USB stick. It is needed for triggering a
diff --git a/server/site_tests/firmware_InvalidUSB/firmware_InvalidUSB.py b/server/site_tests/firmware_InvalidUSB/firmware_InvalidUSB.py
index a273a66..f16814a 100644
--- a/server/site_tests/firmware_InvalidUSB/firmware_InvalidUSB.py
+++ b/server/site_tests/firmware_InvalidUSB/firmware_InvalidUSB.py
@@ -33,7 +33,7 @@
         usb_dev = self.servo.probe_host_usb_dev()
         self.assert_test_image_in_usb_disk(usb_dev)
         self.corrupt_usb_kernel(usb_dev)
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
         self.servo.switch_usbkey('dut')
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_LegacyRecovery/firmware_LegacyRecovery.py b/server/site_tests/firmware_LegacyRecovery/firmware_LegacyRecovery.py
index d325328..e7502f9 100644
--- a/server/site_tests/firmware_LegacyRecovery/firmware_LegacyRecovery.py
+++ b/server/site_tests/firmware_LegacyRecovery/firmware_LegacyRecovery.py
@@ -23,7 +23,7 @@
     def initialize(self, host, cmdline_args):
         super(firmware_LegacyRecovery, self).initialize(host, cmdline_args)
         self.setup_usbkey(usbkey=True, host=False)
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
 
     def cleanup(self):
         super(firmware_LegacyRecovery, self).cleanup()
diff --git a/server/site_tests/firmware_Mosys/firmware_Mosys.py b/server/site_tests/firmware_Mosys/firmware_Mosys.py
index 42029dd..8273048 100644
--- a/server/site_tests/firmware_Mosys/firmware_Mosys.py
+++ b/server/site_tests/firmware_Mosys/firmware_Mosys.py
@@ -30,7 +30,7 @@
         # Parse arguments from command line
         dict_args = utils.args_to_dict(cmdline_args)
         super(firmware_Mosys, self).initialize(host, cmdline_args)
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         # a list contain failed execution.
         self.failed_command = []
         # Get a list of available mosys commands.
diff --git a/server/site_tests/firmware_RONormalBoot/firmware_RONormalBoot.py b/server/site_tests/firmware_RONormalBoot/firmware_RONormalBoot.py
index 1490a1c..53a3437 100644
--- a/server/site_tests/firmware_RONormalBoot/firmware_RONormalBoot.py
+++ b/server/site_tests/firmware_RONormalBoot/firmware_RONormalBoot.py
@@ -26,7 +26,7 @@
         super(firmware_RONormalBoot, self).initialize(host, cmdline_args,
                                                       ec_wp=ec_wp)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_RecoveryButton/firmware_RecoveryButton.py b/server/site_tests/firmware_RecoveryButton/firmware_RecoveryButton.py
index 0ef1e58..90dc0c9 100644
--- a/server/site_tests/firmware_RecoveryButton/firmware_RecoveryButton.py
+++ b/server/site_tests/firmware_RecoveryButton/firmware_RecoveryButton.py
@@ -33,7 +33,7 @@
     def initialize(self, host, cmdline_args, dev_mode=False, ec_wp=None):
         super(firmware_RecoveryButton, self).initialize(host, cmdline_args,
                                                         ec_wp=ec_wp)
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=True, host=False)
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_RollbackFirmware/firmware_RollbackFirmware.py b/server/site_tests/firmware_RollbackFirmware/firmware_RollbackFirmware.py
index deab235..7de5878 100644
--- a/server/site_tests/firmware_RollbackFirmware/firmware_RollbackFirmware.py
+++ b/server/site_tests/firmware_RollbackFirmware/firmware_RollbackFirmware.py
@@ -22,7 +22,7 @@
     def initialize(self, host, cmdline_args, dev_mode=False):
         super(firmware_RollbackFirmware, self).initialize(host, cmdline_args)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=True, host=False)
 
     def cleanup(self):
diff --git a/server/site_tests/firmware_RollbackKernel/firmware_RollbackKernel.py b/server/site_tests/firmware_RollbackKernel/firmware_RollbackKernel.py
index 0e0abb5..9b3741e 100644
--- a/server/site_tests/firmware_RollbackKernel/firmware_RollbackKernel.py
+++ b/server/site_tests/firmware_RollbackKernel/firmware_RollbackKernel.py
@@ -38,7 +38,7 @@
         super(firmware_RollbackKernel, self).initialize(host, cmdline_args)
         self.backup_kernel()
         self.backup_cgpt_attributes()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=True, host=False)
         self.setup_kernel('a')
 
diff --git a/server/site_tests/firmware_SelfSignedBoot/firmware_SelfSignedBoot.py b/server/site_tests/firmware_SelfSignedBoot/firmware_SelfSignedBoot.py
index 39f8bd0..67e8c25 100644
--- a/server/site_tests/firmware_SelfSignedBoot/firmware_SelfSignedBoot.py
+++ b/server/site_tests/firmware_SelfSignedBoot/firmware_SelfSignedBoot.py
@@ -26,7 +26,7 @@
     def initialize(self, host, cmdline_args, ec_wp=None):
         super(firmware_SelfSignedBoot, self).initialize(host, cmdline_args,
                                                         ec_wp=ec_wp)
-        self.setup_dev_mode(dev_mode=True)
+        self.switcher.setup_mode('dev')
         self.setup_usbkey(usbkey=True, host=False)
 
         self.original_dev_boot_usb = self.faft_client.system.get_dev_boot_usb()
diff --git a/server/site_tests/firmware_ShellBall/firmware_ShellBall.py b/server/site_tests/firmware_ShellBall/firmware_ShellBall.py
index 59e4c0e..faa4a0f 100644
--- a/server/site_tests/firmware_ShellBall/firmware_ShellBall.py
+++ b/server/site_tests/firmware_ShellBall/firmware_ShellBall.py
@@ -42,7 +42,7 @@
                        self._shellball_name)
         self.faft_client.system.run_shell_command('chmod +x %s' %
                                                   self._shellball_name)
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
         # Get crossystem fwid.
         [self._current_fwid] = (
             self.faft_client.system.run_shell_command_get_output(
diff --git a/server/site_tests/firmware_SoftwareSync/firmware_SoftwareSync.py b/server/site_tests/firmware_SoftwareSync/firmware_SoftwareSync.py
index bc6b46e..3156d60 100644
--- a/server/site_tests/firmware_SoftwareSync/firmware_SoftwareSync.py
+++ b/server/site_tests/firmware_SoftwareSync/firmware_SoftwareSync.py
@@ -19,7 +19,7 @@
         super(firmware_SoftwareSync, self).initialize(host, cmdline_args,
                                                       ec_wp=False)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
         self.setup_rw_boot()
         self.dev_mode = dev_mode
diff --git a/server/site_tests/firmware_TPMExtend/firmware_TPMExtend.py b/server/site_tests/firmware_TPMExtend/firmware_TPMExtend.py
index c5d07a7..435aa98 100644
--- a/server/site_tests/firmware_TPMExtend/firmware_TPMExtend.py
+++ b/server/site_tests/firmware_TPMExtend/firmware_TPMExtend.py
@@ -14,7 +14,7 @@
 
     def initialize(self, host, cmdline_args):
         super(firmware_TPMExtend, self).initialize(host, cmdline_args)
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
         self.setup_usbkey(usbkey=True, host=False)
 
     def _check_pcr(self, num, hash_obj):
diff --git a/server/site_tests/firmware_TPMKernelVersion/firmware_TPMKernelVersion.py b/server/site_tests/firmware_TPMKernelVersion/firmware_TPMKernelVersion.py
index 27d2f85..c4d3a34 100644
--- a/server/site_tests/firmware_TPMKernelVersion/firmware_TPMKernelVersion.py
+++ b/server/site_tests/firmware_TPMKernelVersion/firmware_TPMKernelVersion.py
@@ -16,7 +16,7 @@
 
     def initialize(self, host, cmdline_args):
         super(firmware_TPMKernelVersion, self).initialize(host, cmdline_args)
-        self.setup_dev_mode(True)  # Dev mode
+        self.switcher.setup_mode('dev')
         self.setup_usbkey(usbkey=True, host=False)
         self.original_dev_boot_usb = self.faft_client.system.get_dev_boot_usb()
         logging.info('Original dev_boot_usb value: %s',
diff --git a/server/site_tests/firmware_TPMVersionCheck/firmware_TPMVersionCheck.py b/server/site_tests/firmware_TPMVersionCheck/firmware_TPMVersionCheck.py
index 4922ecb..5718376 100644
--- a/server/site_tests/firmware_TPMVersionCheck/firmware_TPMVersionCheck.py
+++ b/server/site_tests/firmware_TPMVersionCheck/firmware_TPMVersionCheck.py
@@ -17,7 +17,7 @@
     def initialize(self, host, cmdline_args, dev_mode=False, ec_wp=None):
         super(firmware_TPMVersionCheck, self).initialize(host, cmdline_args,
                                                          ec_wp=ec_wp)
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
 
     def run_once(self):
diff --git a/server/site_tests/firmware_TryFwB/firmware_TryFwB.py b/server/site_tests/firmware_TryFwB/firmware_TryFwB.py
index 609b6a0..ea843e7 100644
--- a/server/site_tests/firmware_TryFwB/firmware_TryFwB.py
+++ b/server/site_tests/firmware_TryFwB/firmware_TryFwB.py
@@ -14,7 +14,7 @@
 
     def initialize(self, host, cmdline_args, dev_mode=False, ec_wp=None):
         super(firmware_TryFwB, self).initialize(host, cmdline_args, ec_wp=ec_wp)
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
         if not self.fw_vboot2:
             self.setup_tried_fwb(tried_fwb=False)
diff --git a/server/site_tests/firmware_UpdateECBin/firmware_UpdateECBin.py b/server/site_tests/firmware_UpdateECBin/firmware_UpdateECBin.py
index b240cee..7151b20 100644
--- a/server/site_tests/firmware_UpdateECBin/firmware_UpdateECBin.py
+++ b/server/site_tests/firmware_UpdateECBin/firmware_UpdateECBin.py
@@ -47,7 +47,7 @@
         logging.info('The EC image to-be-updated is: %s', self.arg_new_ec)
         super(firmware_UpdateECBin, self).initialize(host, cmdline_args)
         self.backup_firmware()
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=False)
 
         temp_path = self.faft_client.updater.get_temp_path()
diff --git a/server/site_tests/firmware_UpdateFirmwareDataKeyVersion/firmware_UpdateFirmwareDataKeyVersion.py b/server/site_tests/firmware_UpdateFirmwareDataKeyVersion/firmware_UpdateFirmwareDataKeyVersion.py
index 62a00fb..985d9e9 100644
--- a/server/site_tests/firmware_UpdateFirmwareDataKeyVersion/firmware_UpdateFirmwareDataKeyVersion.py
+++ b/server/site_tests/firmware_UpdateFirmwareDataKeyVersion/firmware_UpdateFirmwareDataKeyVersion.py
@@ -72,7 +72,7 @@
             self.wait_for_client()
 
         self.setup_usbkey(usbkey=True, host=True, install_shim=True)
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
         self._fwid = self.faft_client.updater.get_fwid()
 
         actual_ver = self.faft_client.bios.get_datakey_version('a')
diff --git a/server/site_tests/firmware_UpdateFirmwareVersion/firmware_UpdateFirmwareVersion.py b/server/site_tests/firmware_UpdateFirmwareVersion/firmware_UpdateFirmwareVersion.py
index 3005e55..6a14e0e 100644
--- a/server/site_tests/firmware_UpdateFirmwareVersion/firmware_UpdateFirmwareVersion.py
+++ b/server/site_tests/firmware_UpdateFirmwareVersion/firmware_UpdateFirmwareVersion.py
@@ -58,7 +58,7 @@
             self.wait_for_client()
 
         self.setup_usbkey(usbkey=True, host=True, install_shim=True)
-        self.setup_dev_mode(dev_mode=False)
+        self.switcher.setup_mode('normal')
         self._fwid = self.faft_client.updater.get_fwid()
 
         actual_ver = self.faft_client.bios.get_version('a')
diff --git a/server/site_tests/firmware_UpdateKernelDataKeyVersion/firmware_UpdateKernelDataKeyVersion.py b/server/site_tests/firmware_UpdateKernelDataKeyVersion/firmware_UpdateKernelDataKeyVersion.py
index a19d793..85ad849 100644
--- a/server/site_tests/firmware_UpdateKernelDataKeyVersion/firmware_UpdateKernelDataKeyVersion.py
+++ b/server/site_tests/firmware_UpdateKernelDataKeyVersion/firmware_UpdateKernelDataKeyVersion.py
@@ -64,7 +64,7 @@
         super(firmware_UpdateKernelDataKeyVersion, self).initialize(host,
                                                                 cmdline_args)
 
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
 
         actual_ver = self.faft_client.kernel.get_datakey_version('b')
         logging.info('Original Kernel Version of KERN-B is %s', actual_ver)
diff --git a/server/site_tests/firmware_UpdateKernelVersion/firmware_UpdateKernelVersion.py b/server/site_tests/firmware_UpdateKernelVersion/firmware_UpdateKernelVersion.py
index 6db6ca6..ab56516 100644
--- a/server/site_tests/firmware_UpdateKernelVersion/firmware_UpdateKernelVersion.py
+++ b/server/site_tests/firmware_UpdateKernelVersion/firmware_UpdateKernelVersion.py
@@ -43,7 +43,7 @@
     def initialize(self, host, cmdline_args, dev_mode=True):
         super(firmware_UpdateKernelVersion, self).initialize(host, cmdline_args)
 
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
 
         actual_ver = self.faft_client.kernel.get_version('b')
         logging.info('Original Kernel Version of KERN-B is %s', actual_ver)
diff --git a/server/site_tests/firmware_UserRequestRecovery/firmware_UserRequestRecovery.py b/server/site_tests/firmware_UserRequestRecovery/firmware_UserRequestRecovery.py
index 9b2d2b0..59c288c 100644
--- a/server/site_tests/firmware_UserRequestRecovery/firmware_UserRequestRecovery.py
+++ b/server/site_tests/firmware_UserRequestRecovery/firmware_UserRequestRecovery.py
@@ -33,7 +33,7 @@
     def initialize(self, host, cmdline_args, dev_mode=False, ec_wp=None):
         super(firmware_UserRequestRecovery, self).initialize(host, cmdline_args,
                                                              ec_wp=ec_wp)
-        self.setup_dev_mode(dev_mode)
+        self.switcher.setup_mode('dev' if dev_mode else 'normal')
         self.setup_usbkey(usbkey=True, host=True)
 
     def cleanup(self):