# 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.

# Tests Sender role capability during HID Use
#
#       This test verifies that the DUT can handle the Sender role while already
#       connected to a HID device.
#
#
# Purpose: Tests controller can perform Sender role while already connected to
# a HID device with LL privacy turned on

# Deprecated variables:
#     TIME = 'SHORT'
#     TEST_CATEGORY = 'Functional'

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterLLPrivacyHealth.le_role_sender_during_hid'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Pass the test',
    'hw_agnostic': False,
    'life_cycle_stage': 'owner_monitored',
}


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


args_dict = utils.args_to_dict(args)

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

parallel_simple(run, machines)
