# 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"
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 0

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)
