# 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.
"""
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_au_1, suite:faft_bios_au_2, suite:faft_bios_au_3, 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 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)
