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

# Verify the DUT's discoverable behavior during suspend and after resume.
#
# Steps:
# 1. Set the DUT to discoverable and use a peer device to verify.
# 2. Suspend the DUT.
# 3. Expect the peer device cannot discover the suspended DUT.
# 4. Resume the DUT.
# 5. Expect the peer device can discover the DUT.
# 6. Set the DUT to undiscoverable and use the peer device to verify.
#
# Purpose: Verify the DUT's discoverable behavior during suspend and after
# resume

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

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterSRHealth.sr_while_advertising'
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']
}


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

parallel_simple(run, machines)
