# 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_UpdateKernelSubkeyVersion"
PURPOSE = """
Servo based firmware update test, and check kernel subkey version.
"""
CRITERIA = """
This test will fail if following requrements are met:
1. fwid does not match shellball's (/usr/sbin/chromeos-firmwareupdate) fwid
2. Kernel subkey version does not match original kernel subkey version.
"""
ATTRIBUTES = "suite:faft, 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 requires firmware id matches fwid of shellball
chromeos-firmwareupdate. On runtime, this test modifies shellball and runs
autoupdate. Check kernel subkey version after boot with firmware B, and then
recover firmware A and B to original shellball.
"""

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

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

parallel_simple(run_updatekernelsubkeyversion, machines)
