# 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_UpdateFirmwareDataKeyVersion"
PURPOSE = """
Servo based firmware update test which check firmware datakey version.
"""
CRITERIA = """
Prerequirement is as follow:
1.The fwid should matches shellball's (/usr/sbin/chromeos-firmwareupdate) fwid,
  unless this test use a given shellball.
2. A USB disk should be plugged-in, which contains a Chrome OS install shim.

This test will fail if following requrements are met:
1. fwid does not match shellball's (/usr/sbin/chromeos-firmwareupdate) fwid
2. Firmware datakey version does not match original datakey version.
"""
SUITE = "faft_update"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"

DOC = """
This test requires a USB disk plugged-in, which contains a Chrome OS
install shim (built by "build_image factory_install"). The firmware id
should matches fwid of shellball chromeos-firmwareupdate, or user can
provide a shellball to do this test. In this way, the client will be update
with the given shellball first. On runtime, this test modifies shellball
and runs autoupdate. Check firmware datakey 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_updatefirmwaredatakeyversion(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_UpdateFirmwareDataKeyVersion",
                 host=host, cmdline_args=args,
                 disable_sysinfo=True)

parallel_simple(run_updatefirmwaredatakeyversion, machines)
