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 5 import logging 6 7 from autotest_lib.server.cros.faft.firmware_test import FirmwareTest 8 9 10 class firmware_CorruptKernelB(FirmwareTest): 11 """ 12 Servo based kernel B corruption test. 13 14 This test sets kernel B boot and then corrupts kernel B. The firmware 15 verifies kernel B failed so falls back to kernel A boot. This test will 16 fail if kernel verification mis-behaved. 17 """ 18 version = 1 19 20 def initialize(self, host, cmdline_args, dev_mode=False): 21 super(firmware_CorruptKernelB, self).initialize(host, cmdline_args) 22 self.backup_kernel() 23 self.backup_cgpt_attributes() 24 self.switcher.setup_mode('dev' if dev_mode else 'normal') 25 self.setup_usbkey(usbkey=False) 26 self.setup_kernel('a') 27 28 def cleanup(self): 29 try: 30 self.restore_cgpt_attributes() 31 self.restore_kernel() 32 except Exception as e: 33 logging.error("Caught exception: %s", str(e)) 34 super(firmware_CorruptKernelB, self).cleanup() 35 36 def run_once(self, dev_mode=False): 37 logging.info("Prioritize kernel B.") 38 self.check_state((self.checkers.root_part_checker, 'a')) 39 self.reset_and_prioritize_kernel('b') 40 self.switcher.mode_aware_reboot() 41 42 logging.info("Expected kernel B boot and corrupt kernel B.") 43 self.check_state((self.checkers.root_part_checker, 'b')) 44 self.faft_client.kernel.corrupt_sig('b') 45 self.switcher.mode_aware_reboot() 46 47 logging.info("Expected kernel A boot and restore kernel B.") 48 self.check_state((self.checkers.root_part_checker, 'a')) 49 self.faft_client.kernel.restore_sig('b') 50 self.switcher.mode_aware_reboot() 51 52 logging.info("Expected kernel B boot and prioritize kerenl A.") 53 self.check_state((self.checkers.root_part_checker, 'b')) 54 self.reset_and_prioritize_kernel('a') 55 self.switcher.mode_aware_reboot() 56 57 logging.info("Expected kernel A boot.") 58 self.check_state((self.checkers.root_part_checker, 'a')) 59