# Copyright 2021 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Test the speed of a LE HID device reconnect to DUT
#
# Specifically, the following subtests are executed in this autotest.
#     - test_reset_on_adapter
#     - test_pairable
#     - test_discover_device
#     - test_pairing
#     - test_device_is_connected
#     - test_hid_device_created
#     - test_device_set_discoverable
#     - test_disconnection_by_device
#     - iteration start
#     - test_device_is_not_connected
#     - test_device_set_discoverable
#     - test_device_is_connected
#     - test_hid_device_created_speed
#     - test_device_set_discoverable
#     - test_disconnection_by_device
#     - iteration end
#     - test_remove_pairing
#     - test_hid_device_reconnect_time
#
# Purpose: Test the speed of a LE HID device reconnect to DUT.

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

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterLEHealth.le_hid_reconnect_speed'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'LE HID device should reconnect fast.',
    'hw_agnostic': False,
    'variant_category': '{"name": "BT_Chipset_Kernel"}',
    'life_cycle_stage': 'owner_monitored',
    'requirements': ['bt-gen-0001-v01'],
}


# TODO: Remove ['Quick Health'] flag from AdapterLEHealth when moving to stable.
ATTRIBUTES = 'suite:bluetooth_flaky'
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_AdapterLEHealth', host=host,
                 num_iterations=1, args_dict=args_dict,
                 tag='.'.join(NAME.split('.')[1:]),
                 test_name=NAME.split('.')[1])

parallel_simple(run, machines)
