# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# A Batch of Bluetooth audio health tests. This test is written
# as a batch of tests in order to reduce test time, since auto-test ramp
# up time is costly. The batch is using BluetoothAdapterQuickTests wrapper
# methods to start and end a test and a batch of tests.
#
# This class can be called to run the entire test batch or to run a
# specific test only
#
# Currently, the batch contains the following tests:
# - au_avrcp_media_info_test
#
# Purpose: Batch of Bluetooth Classic Audio health tests

# Deprecated variables:
#     TIME = 'SHORT'  # Approximately 1 min
#     TEST_CATEGORY = 'Functional'

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterAUHealth.au_avrcp_media_info_test'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Pass all health test',
    'hw_agnostic': False,
    'life_cycle_stage': 'owner_monitored',
    'requirements': ['bt-gen-0001-v01'],
}


ATTRIBUTES = 'suite:bluetooth, suite:bluetooth_core'
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth_state:NORMAL, working_bluetooth_btpeer:1'


args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)
    job.run_test('bluetooth_AdapterAUHealth', host=host, num_iterations=1,
                 tag='.'.join(NAME.split('.')[1:]),
                 args_dict=args_dict, test_name=NAME.split('.')[1])

parallel_simple(run, machines)
