# Copyright 2012 The ChromiumOS Authors
# 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 = "ChromeOS Team"
NAME = "firmware_UpdateKernelDataKeyVersion"
METADATA = {
        "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
        "bug_component": "b:792402", # ChromeOS > Platform > Enablement > Firmware > FAFT
        "criteria": "Servo based kernel update test which checks the kernel data key version",
        "requirements": ["sys-fw-0021-v01", "sys-fw-0024-v01", "sys-fw-0025-v01"],
}
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_lv5"
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_TYPE = "server"
JOB_RETRIES = 0

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)

parallel_simple(run_updatekerneldatakeyversion, machines)
