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

# To run the A2DP playback and connect test.
#
# This test first plays the audio stream and then selects the BT device as
# output node, checking if the stream has routed to the BT device. After
# that, disconnect the BT device and also check whether the stream closes
# on it gracefully.
#
# Purpose: Run the A2DP playback and connect test

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

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterAUHealth.au_a2dp_playback_and_connect_test.floss'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Pass audio chunk testing before and after the BT device connects',
    'hw_agnostic': False,
    'requirements': ['bt-audPath-0006-v01']
}


ATTRIBUTES = 'suite:bluetooth_floss'
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, test_name=NAME.split('.')[1], tag='.'.join(NAME.split('.')[1:]), floss=True)

parallel_simple(run, machines)
