# 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'
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
ATTRIBUTES = 'suite:bvt-tast-informational'
MAX_RESULT_SIZE_KB = 1024 * 1024

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

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

Tast tests that soft-clear the TPM require encstateful to be in a reasonable
state beforehand. This test clears the TPM and reboots the remote DUT before
running the Tast tests, in case the encstateful encryption key is messed up
before this test.

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

def run(machine):
    job.run_test('tast',
                 host=hosts.create_host(machine),
                 test_exprs=['('
                             '"group:mainline" && '
                             'informational && '
                             '!"dep:chrome" && '
                             '!"dep:android*"'
                             ')'],
                 ignore_test_failures=True, max_run_sec=3*60*60,
                 command_args=args, clear_tpm=True)

parallel_simple(run, machines)
