# Copyright (c) 2013 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_FMap.dev"
PURPOSE = "Check the existence of BIOS and EC FMap and the required FMap areas"
CRITERIA = "This test will fail if the required FMap areas not existed"
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_dev, suite:faft_lv1, 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 = 4

DOC = """
This test checks the active BIOS and EC firmware contains the required
FMap areas and verifies their hierarchies. It relies on flashrom to dump
the active BIOS and EC firmware and dump_fmap to decode them.
"""

from autotest_lib.client.common_lib import utils

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

def run_fmap(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test('firmware_FMap', host=host, cmdline_args=args,
                 dev_mode=True, tag="dev")

parallel_simple(run_fmap, machines)
