# 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_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_dev, suite:faft_lv5, suite:faft_bios_tot"
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 0
PY_VERSION = 3

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)
