# Copyright 2018 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.

AUTHOR = "jwerner"
NAME = "firmware_Bmpblk"
PURPOSE = "Check that the firmware screens have been correctly configured"
CRITERIA = "This test will fail if firmware screens have not been explicitly scaled for this device"
ATTRIBUTES = "suite:faft_bios, suite:faft_bios_ro_qual, suite:faft_bios_rw_qual, suite:faft_normal, suite:faft_lv4, 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 whether the BIOS was built with a correctly configured bmpblk
to ensure crisp firmware screen images and text. The bmpblk for every device
needs to be explicitly configured for the device's screen resolution to ensure
optimal quality. Relies on flashrom and cbfstool to inspect the BIOS image.
"""

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_bmpblk(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test('firmware_Bmpblk', host=host, cmdline_args=args)

parallel_simple(run_bmpblk, machines)
