# 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 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_a2dp_test
# - au_hfp_nbs_dut_as_source_test
# - au_hfp_nbs_dut_as_sink_test
# - au_hfp_wbs_dut_as_source_test
# - au_hfp_wbs_dut_as_sink_test
# - au_hfp_wbs_dut_as_source_visqol_test
# - au_hfp_wbs_dut_as_sink_visqol_test
# - au_hfp_nbs_dut_as_source_visqol_test
# - au_hfp_nbs_dut_as_sink_visqol_test
# - au_avrcp_command_test
# - au_avrcp_media_info_test
# - au_a2dp_playback_and_connect_test
# - au_a2dp_playback_and_disconnect_test
# - au_a2dp_playback_back2back_test
# - au_a2dp_pinned_playback_test
# - au_hfp_nbs_dut_as_source_back2back_test
# - au_hfp_wbs_dut_as_source_back2back_test
# - au_a2dp_to_hfp_nbs_dut_as_source_test
# - au_a2dp_to_hfp_wbs_dut_as_source_test
# - au_hfp_nbs_to_a2dp_dut_as_source_test
# - au_hfp_wbs_to_a2dp_dut_as_source_test
#
# Purpose: Batch of Bluetooth Classic Audio health tests

# Deprecated variables:
#     TIME = 'SHORT'  # Approximately 15 mins
#     TEST_CATEGORY = 'Functional'

from autotest_lib.server import utils

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


ATTRIBUTES = '' # This control file is used to run all tests locally.
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,
                 args_dict=args_dict, floss=True)

parallel_simple(run, machines)
