# 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 test image.

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.
"""
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_normal, suite:faft_lv5, suite:faft_bios_ec3po, suite:faft_bios_tot"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"

DOC = """
This test requires a USB test image plugged in. 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)
