| # Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import logging |
| from autotest_lib.server.cros.faft.firmware_test import FirmwareTest |
| from autotest_lib.client.common_lib import error |
| |
| |
| class firmware_UpdateKernelVersion(FirmwareTest): |
| """ |
| This is a server based kernel update test which should run in developer |
| mode. On runtime, this test modifies the kernel version of kernel b and |
| modifies cgpt to reboot with kernel b. Check kernel version after reboot, |
| and then recover kernel b version to original version. Here also tries to |
| reboot with kernel b after recovery. If success, reboot with kernel a. |
| """ |
| version = 1 |
| |
| def check_kernel_version(self, expected_ver): |
| actual_ver = self.faft_client.kernel.get_version('b') |
| if actual_ver != expected_ver: |
| raise error.TestFail( |
| 'Kernel Version should be %s, but got %s.' |
| % (expected_ver, actual_ver)) |
| else: |
| logging.info( |
| 'Update success, now version is %s', |
| actual_ver) |
| |
| def modify_kernel_b_and_set_cgpt_priority(self, delta, target_dev): |
| if delta == 1: |
| self.faft_client.kernel.move_version_forward('b') |
| elif delta == -1: |
| self.check_kernel_version(self._update_version) |
| self.faft_client.kernel.move_version_backward('b') |
| |
| if target_dev == 'a': |
| self.reset_and_prioritize_kernel('a') |
| else: |
| self.reset_and_prioritize_kernel('b') |
| |
| def initialize(self, host, cmdline_args, dev_mode=True): |
| super(firmware_UpdateKernelVersion, self).initialize(host, cmdline_args) |
| |
| 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) |
| |
| self._update_version = actual_ver + 1 |
| logging.info('KERN-B will update to version %s', self._update_version) |
| |
| self.setup_kernel('a') |
| |
| def cleanup(self): |
| super(firmware_UpdateKernelVersion, self).cleanup() |
| |
| def run_once(self): |
| logging.info("Update Kernel Version.") |
| self.check_state((self.check_root_part_on_non_recovery, 'a')) |
| self.modify_kernel_b_and_set_cgpt_priority(1, 'b') |
| self.switcher.mode_aware_reboot() |
| |
| logging.info("Check kernel version and rollback.") |
| self.check_state((self.check_root_part_on_non_recovery, 'b')) |
| self.modify_kernel_b_and_set_cgpt_priority(-1, 'b') |
| self.switcher.mode_aware_reboot() |
| |
| logging.info("Boot with rollback kernel and change boot priority.") |
| self.check_state((self.check_root_part_on_non_recovery, 'b')) |
| self.modify_kernel_b_and_set_cgpt_priority(0, 'a') |
| self.switcher.mode_aware_reboot() |
| |
| logging.info("Check rollback version.") |
| self.check_state((self.check_root_part_on_non_recovery, 'a')) |
| self.check_kernel_version(self._update_version - 1) |