# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

AUTHOR = 'The ChromiumOS Authors'
NAME = 'tast.av-trace-perbuild'
METADATA = {
    'contacts': ['tauto-core@google.com'],
    'bug_component': 'b:1034523', # ChromeOS > Test > Harness > Tauto
    'criteria': 'Tauto wrapper for specified tast tests',
}
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
ATTRIBUTES = 'suite:av-analysis_trace_per-build'
MAX_RESULT_SIZE_KB = 1024 * 1024
PY_VERSION = 3

# tast.py uses binaries installed from autotest_server_package.tar.bz2.
REQUIRE_SSP = True

DOC = '''
Run the Tast graphics-trace test suite for screen capture analysis.

Tast is an integration-testing framework analagous to the test-running portion
of Autotest. See https://chromium.googlesource.com/chromiumos/platform/tast/ for
more information.

This test runs Tast-based graphics-trace tests against a remote DUT.

See http://go/tast-failures for information about investigating failures.
'''

def run(machine):
    host=hosts.create_host(machine)
    job.run_test('tast',
                 host=hosts.create_host(machine),
                 test_exprs=['("group:graphics" && graphics_perbuild && graphics_trace && graphics_av_analysis)'],
                 # 3 means reboot at start and between every graphics tests.
                 varslist=["graphics.rebootLevel=3"],
                 ignore_test_failures=True, max_run_sec=10500,
                 command_args=args,
                 clear_tpm=False)

parallel_simple(run, machines)
