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.