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

# This test verifies that the DUT reconnects to multiple classic HID devices
# after suspend/resume.
#
# Steps:
# 1. The DUT pairs and connects to an classic keyboard and mouse.
# 2. Suspend the DUT then resume it.
# 3. Expect the DUT reconnects to both HID devices.
#
# Purpose: Verify the DUT reconnects to multiple classic HID devices after
# suspend/resume

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

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterSRHealth.sr_reconnect_multiple_classic_hid'
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:2'


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)
