# 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 = 'Chromium OS team'
NAME = 'tast.informational-chrome'
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
ATTRIBUTES = 'suite:bvt-tast-informational, suite:chrome-informational'
MAX_RESULT_SIZE_KB = 1024 * 1024
JOB_RETRIES = 0  # Do not retry informational tests.

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

DOC = '''
Run the Tast informational Chrome test suite.

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 Chrome-dependent Tast-based informational tests against a remote
DUT. It only reports failure if the tast process itself (rather than individual
Tast tests) fails.

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

def run(machine):
    # TODO(crbug.com/992303): Fix android condition.
    job.run_test('tast',
                 host=hosts.create_host(machine),
                 test_exprs=['('
                             '"group:mainline" && '
                             'informational && '
                             '!"name:crostini.*" && '
                             '!"dep:plugin_vm" && '
                             '"dep:chrome" && '
                             '!"dep:android*"'
                             ')'],
                 ignore_test_failures=True,
                 max_run_sec=3*60*60,
                 command_args=args,
                 clear_tpm=True)

parallel_simple(run, machines)
