blob: d4a9192841f0de2b566cb6bd8c4107b0a9f4bc81 [file] [log] [blame]
# 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.faft_classes import FAFTSequence
from autotest_lib.client.common_lib import error
class firmware_UpdateKernelVersion(FAFTSequence):
"""
This is a servod 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 sccuess, 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.setup_dev_mode(dev_mode)
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):
self.register_faft_sequence((
{ # Step 1, Update Kernel Version.
'state_checker': (self.check_root_part_on_non_recovery, 'a'),
'userspace_action': (
self.modify_kernel_b_and_set_cgpt_priority, (1, 'b')),
'reboot_action': self.warm_reboot,
},
{ # Step 2, Check kernel version and rollback.
'state_checker': (self.check_root_part_on_non_recovery, 'b'),
'userspace_action': (
self.modify_kernel_b_and_set_cgpt_priority, (-1, 'b')),
'reboot_action': self.warm_reboot,
},
{ # Step 3, Boot with rollback kernel and change boot priority.
'state_checker': (self.check_root_part_on_non_recovery, 'b'),
'userspace_action':(
self.modify_kernel_b_and_set_cgpt_priority, (0, 'a')),
'reboot_action': self.warm_reboot,
},
{ # Step 4, Check rollback version.
'state_checker': (self.check_root_part_on_non_recovery, 'a'),
'userspace_action': (self.check_kernel_version,
self._update_version - 1)
}
))
self.run_faft_sequence()