# Copyright 2021 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 = 'Chrome OS Team'
NAME = 'tast.pvs-audio'
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
ATTRIBUTES = 'suite:pvs-audio'
MAX_RESULT_SIZE_KB = 1024 * 1024
PY_VERSION = 3

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

DOC = '''
This test suite is part of the Platform Validation Suite (go/cros-pvs)
and includes a collection of tast.audio tests that require no
special hardware to run.
'''
def run(machine):
    job.run_test('tast',
                 host=hosts.create_host(machine),
                 test_exprs=['audio.ALSAConformance',
                             'audio.CrasPlay',
                             'audio.CrasRecord',
                             'audio.CrasRecordQuality',
                             'audio.DevicePlay',
                             'audio.DeviceRecord',
                             'audio.Microphone'],
                 ignore_test_failures=False, max_run_sec=3600,
                 command_args=args,
		 clear_tmp=True)
parallel_simple(run, machines)