# 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.
#
# Steps:
# 1. The DUT pairs and connects to an LE HID device.
# 2. Suspend the DUT.
# 3. Use the HID device to try waking up the DUT.
# 4. Expect the DUT resumes in time.
#
# Purpose: Verify that an LE HID peer device can wake the DUT up

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

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterSRHealth.sr_peer_wake_le_hid.floss'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Pass test',
    'hw_agnostic': False,
    'requirements': ['bt-phy-0005-v01', 'bt-phy-0007-v01', 'bt-phy-0008-v01',
                     'bt-phy-0010-v01', 'bt-drv-0014-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_AdapterSRHealth', 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)
