# 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.

from autotest_lib.server import utils

AUTHOR = "Chrome OS Team"
NAME = "firmware_UpdateKernelVersion"
PURPOSE = "Servo based kernel update test which checks the kernel version."
CRITERIA = """
This test will fail if one of the following conditions is met:
1. In Normal Mode.
2. After update, device restart with KERNEL A.
3. Kernel version does not increase after update.
4. After recovery, device can't successfully restart.
5. Kernel version does not recover to original version after recovery.
"""
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_dev, suite:faft_lv5, suite:faft_bios_ec3po, suite:faft_bios_tot"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 4

DOC = """
This test 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.
"""

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run_updatekernelversion(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_UpdateKernelVersion", host=host, cmdline_args=args,
                 disable_sysinfo=True, dev_mode=True, tag="dev")

parallel_simple(run_updatekernelversion, machines)
