# Copyright 2020 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-parallels'
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
# TODO(crbug.com/1154072): Remove from 'suite:bvt-tast-informational' once the
# parallels suite is scheduled.
ATTRIBUTES = 'suite:bvt-tast-informational, suite:bvt-tast-parallels-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 Parallels 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 Parallels-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 && '
                             '"dep:plugin_vm"'
                             ')'],
                 ignore_test_failures=True,
                 max_run_sec=3*60*60,
                 command_args=args,
                 clear_tpm=True)

parallel_simple(run, machines)
