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

AUTHOR = "Chrome OS Team"
NAME = "graphics"
PURPOSE = "Test graphics functionality."

TIME = "MEDIUM"
TEST_CATEGORY = "Graphics"
TEST_CLASS = "suite"
TEST_TYPE = "Server"

DOC = """
This is the graphics test suite. It should consist of functional and stressful
graphics tests. In general we don't want these tests to hang the system,
although this may happen especially with piglit. For functionality contact
suite owners: ihf|sabercrombie|marcheu@chromium.org

Tests should be run in order of increasing likeness of hanging the system
graphics_GLAPICheck                     < 1 minute runtime
graphics_Sanity                         < 1 minute
graphics_SanAngeles                       3 minutes
graphics_GLBench                          5 minutes
graphics_Piglit                      10..15 minutes on OpenGL/Intel only

The machine should reboot after finishing the suite or timing out.

@param build: The name of the image to test.
              Ex: x86-mario-release/R17-1412.33.0-a1-b29
@param board: The board to test on.  Ex: x86-mario
@param pool: The pool of machines to utilize for scheduling. If pool=None
             board is used.
@param check_hosts: require appropriate live hosts to exist in the lab.
@param SKIP_IMAGE: (optional) If present and True, don't re-image devices.
"""

import common
from autotest_lib.server.cros.dynamic_suite import dynamic_suite

args_dict['max_runtime_mins'] = 240
args_dict['add_experimental'] = True
args_dict['name'] = 'graphics'
args_dict['job'] = job

dynamic_suite.reimage_and_run(**args_dict)
