# 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 before and after a
# reboot.
#
# Specifically, the following subtests are executed in this autotest.
#     - test_reset_on_adapter
#     - test_pairable
#     - test_discover_device
#     - test_pairing
#     - test_device_is_paired
#     - test_connection_by_device
#     - 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
# after a reboot.

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

from autotest_lib.server import utils

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

parallel_simple(run, machines)
