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

# Run the test, A2DP to HFP NBS, with DUT as source.
#
# HFP_NBS_MEDIUM profile is used. This test first uses A2DP profile and plays
# the audio stream on the DUT, checking if the peer receives the audio stream
# correctly. And then switch to the HFP_NBS profile and check the audio
# stream again.
#
# Purpose: Run the test, A2DP to HFP NBS, with DUT as source

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

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterAUHealth.au_a2dp_to_hfp_nbs_dut_as_source_test'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Pass all audio file checking',
    '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)
