# 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_UpdateKernelDataKeyVersion"
PURPOSE = """
Servo based kernel update test which checks the kernel data key 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 datakey version does not increase after update.
4. After recovery, device can't successfully restart.
5. Kernel datakey version does not recover to original version after recovery.
"""
SUITE = "faft,faft_bios,faft_update,faft_dev"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"

DOC = """
This test should run in developer mode. On runtime, this test modifies the
kernel data key version of kernel b and modifies cgpt to reboot with kernel b.
Check kernel data key version after reboot, and then recover kernel b's data
key 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_updatekerneldatakeyversion(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_UpdateKernelDataKeyVersion", host=host,
                 cmdline_args=args, disable_sysinfo=True, dev_mode=True,
                 tag="dev")

parallel_simple(run_updatekerneldatakeyversion, machines)
