Home | History | Annotate | Download | only in firmware_CorruptKernelB
      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