xref: /aosp_15_r20/external/autotest/server/site_tests/firmware_TryFwB/firmware_TryFwB.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import logging
6from autotest_lib.server.cros.faft.firmware_test import FirmwareTest
7
8
9class firmware_TryFwB(FirmwareTest):
10    """
11    Servo based RW firmware B boot test.
12    """
13    version = 1
14
15    def initialize(self, host, cmdline_args, dev_mode=False, ec_wp=None):
16        super(firmware_TryFwB, self).initialize(host, cmdline_args, ec_wp=ec_wp)
17        self.switcher.setup_mode('dev' if dev_mode else 'normal',
18                                 allow_gbb_force=True)
19        self.setup_usbkey(usbkey=False)
20        if not self.fw_vboot2:
21            self.setup_tried_fwb(tried_fwb=False)
22
23    def cleanup(self):
24        try:
25            self.setup_tried_fwb(tried_fwb=False)
26        except Exception as e:
27            logging.error("Caught exception: %s", str(e))
28        super(firmware_TryFwB, self).cleanup()
29
30    def run_once(self):
31        """Runs a single iteration of the test."""
32        logging.info("Set fwb_tries flag")
33        self.check_state((self.checkers.fw_tries_checker, 'A'))
34        self.try_fwb()
35        self.switcher.mode_aware_reboot()
36
37        logging.info("Expected firmware B boot, reboot")
38        self.check_state((self.checkers.fw_tries_checker, 'B'))
39        self.switcher.mode_aware_reboot()
40
41        expected_slot = 'B' if self.fw_vboot2 else 'A'
42        logging.info("Expected firmware %s boot, done", expected_slot)
43        self.check_state((self.checkers.fw_tries_checker, expected_slot))
44