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

# This test verifies that the DUT reconnects to multiple Classic HID devices
# after suspend/resume, including role switches.
#
# Steps:
# 1. The DUT pairs and connects to an classic keyboard and mouse.
# 2. Suspend the DUT then resume it.
# 3. Expect the DUT reconnects to both HID devices.
#
# Purpose: Verify the DUT reconnects to multiple Classic HID devices after
# suspend/resume

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

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterSRHealth.sr_reconnect_multiple_classic_hid.role_switch.floss'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Pass test',
    'hw_agnostic': False,
    'variant_category': '{"name": "BT_Chipset_Kernel"}',
    'requirements': ['bt-phy-0010-v01']
}


ATTRIBUTES = 'suite:bluetooth_floss_flaky'
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_AdapterSRHealth', host=host, num_iterations=1,
                 args_dict=args_dict, test_name=NAME.split('.')[1], tag='.'.join(NAME.split('.')[1:]), floss=True,
                 floss_lm_quirk=True)

parallel_simple(run, machines)
