# 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_CgptState"
PURPOSE = "Servo based executing the CgptState test on client side."
CRITERIA = "This test will fail if cgpt mis-behaves"
SUITE = "faft,faft_bios,faft_normal,faft_lv4"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"

DOC = """
This test triggers the CgptState test on client side. In the client
CgptState test, it set kernels A and B with different cgpt states
(priority, tries, successful) and checks their boot results.

The test items and logic are now handled in client. This FAFT test
just handles the reboot logic.
See /usr/local/sbin/firmware/saft/cgpt_state.py for more detail.
"""

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

def run_cgptstate(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_CgptState", host=host, cmdline_args=args,
                 use_faft=True, disable_sysinfo=True,
                 dev_mode=False, tag="normal")

parallel_simple(run_cgptstate, machines)
