# Copyright 2019 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 the bluetooth adapter of the DUT could receive HID reports
# sent from a connected bluetooth device correctly.
#
# Specifically, the following subtests are executed in this autotest.
#     - test_reset_on_adapter
#     - test_pairable
#     - test_discover_device
#     - test_connection_by_adapter
#     - test_device_is_paired
#     - test_connection_by_adapter
#     - test_device_name
#     - test_mouse_left_click
#     - test_mouse_right_click
#     - test_mouse_move_in_x
#     - test_mouse_move_in_y
#     - test_mouse_move_in_xy
#     - test_mouse_scroll_down
#     - test_mouse_scroll_up
#     - test_mouse_click_and_drag
#     - test_disconnection_by_adapter
#     - test_remove_pairing
#
# Purpose: Test bluetooth adapter receiving reports from bluetooth HID devices.

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

from autotest_lib.server import utils

NAME = 'bluetooth_AdapterCLHealth.cl_HID_reports_suspend_resume_test'
METADATA = {
    'contacts': ['chromeos-bt-team@google.com'],
    # ChromeOS > Platform > Connectivity > Bluetooth
    'bug_component': 'b:167317',
    'criteria': 'Adapter should receive HID events correctly after a suspend resume.',
    'hw_agnostic': False,
    'life_cycle_stage': 'owner_monitored',
    'requirements': ['bt-drv-0013-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_AdapterCLHealth', host=host,
                 num_iterations=1, args_dict=args_dict,
                 test_name=NAME.split('.')[1], tag='.'.join(NAME.split('.')[1:]))

parallel_simple(run, machines)
