# Copyright 2023 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 a paired A2DP device cannot wake the DUT up.
#
# Steps:
# 1. The DUT pairs and connects to an A2DP device.
# 2. Suspend the DUT.
# 3. Use the A2DP device to try waking up the DUT.
# 4. Expect the DUT doesn't resume.
#
# Purpose: Verify A2DP peer device cannot wake the DUT up

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

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterSRHealth.sr_peer_wake_a2dp_should_fail.floss'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'A paired A2DP device is unable to wake the DUT up',
    'hw_agnostic': False,
    'requirements': ['bt-drv-0014-v01', 'bt-drv-0015-v01', 'bt-phy-0010-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)
