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

# The test verifies that an LE HID device should wake the DUT up and the DUT
# will reconnect all paired LE HID devices.
#
# Steps:
# 1. The DUT pairs and connects to two LE HID devices.
# 2. Suspend the DUT.
# 3. Use one HID device to try waking up the DUT.
# 4. Expect the DUT resumes in time.
# 5. Expect the DUT reconnects to another LE HID device.
#
# Note: It can discover the issue of unable to pair more than one LE devices
# after suspend-resume (b/219952140).
#
# Purpose: Verify that the DUT can be waken by an LE HID device then the DUT
# reconnects to another paired HID device

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

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterSRHealth.sr_peer_wake_le_hid_reconnect_le_hid'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Pass test',
    'hw_agnostic': False,
    'life_cycle_stage': 'owner_monitored',
    'requirements': ['bt-phy-0010-v01', 'bt-drv-0013-v01', 'bt-drv-0014-v01']
}


ATTRIBUTES = 'suite:bluetooth, suite:bluetooth_core'
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:]))

parallel_simple(run, machines)
