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

# Verify that DiscoverableTimeout Property works as expected
#
# - Set and Read back DiscoverableTimeout and make sure the values match
# - Set discoverable
# - Check that adapter is discoverable till DiscoverableTimeout and then it
#   is not discoverable
# - Set DiscoverableTimeout to default value at the end of the test.
#
#
# Purpose: Test DiscoverableTimout Property

# Deprecated variables:
#     TIME = 'MEDIUM' # 6 minutes on EVE
#     TEST_CATEGORY = 'Functional'

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterSAHealth.sa_adapter_discoverable_timeout_test.floss'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Controller should become not discoverable after timeout',
    'hw_agnostic': False,
    'requirements': ['bt-gen-0001-v01'],
}


ATTRIBUTES = 'suite:bluetooth_floss_sa'
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth_state:NORMAL'


args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)
    job.run_test('bluetooth_AdapterSAHealth', host=host,
                 tag='.'.join(NAME.split('.')[1:]),
                 num_iterations=1, test_name=NAME.split('.')[1], floss=True)

parallel_simple(run, machines)
