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

from autotest_lib.client.common_lib import utils

AUTHOR = 'Chromium OS team'
NAME = 'tast.informational'
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
DEPENDENCIES = 'servo_state:WORKING'
ATTRIBUTES = 'suite:bvt-tast-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 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.
'''

args_dict = utils.args_to_dict(args)
assert 'servo_state:WORKING' in DEPENDENCIES
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run(machine):
    job.run_test('tast',
                 host=hosts.create_host(machine, servo_args=servo_args),
                 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)
