blob: e8aca7e98e15fd405e3c0297590168162fa80552 [file] [log] [blame]
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Server side bluetooth tests about sending bluetooth HID reports."""
from __future__ import absolute_import
import logging
import time
import common
from autotest_lib.server.cros.bluetooth import bluetooth_adapter_tests
class BluetoothAdapterHIDReportTests(
bluetooth_adapter_tests.BluetoothAdapterTests):
"""Server side bluetooth tests about sending bluetooth HID reports.
This test tries to send HID reports to a DUT and verifies if the DUT
could receive the reports correctly. For the time being, only bluetooth
mouse events are tested. Bluetooth keyboard events will be supported
later.
"""
HID_TEST_SLEEP_SECS = 5
def run_mouse_tests(self, device):
"""Run all bluetooth mouse reports tests.
@param device: the bluetooth HID device.
"""
self.test_mouse_left_click(device)
self.test_mouse_right_click(device)
self.test_mouse_move_in_x(device, 80)
self.test_mouse_move_in_y(device, -50)
self.test_mouse_move_in_xy(device, -60, 100)
self.test_mouse_scroll_down(device, 70)
self.test_mouse_scroll_up(device, 40)
self.test_mouse_click_and_drag(device, 90, 30)
def run_keyboard_tests(self, device):
"""Run all bluetooth mouse reports tests.
@param device: the bluetooth HID device.
"""
self.test_keyboard_input_from_trace(device, "simple_text")
def run_hid_reports_test(self, device,
check_connected_method=lambda device: True,
suspend_resume=False, reboot=False):
"""Running Bluetooth HID reports tests."""
logging.info("run hid reports test")
# Reset the adapter and set it pairable.
self.test_reset_on_adapter()
self.test_pairable()
# Let the adapter pair, and connect to the target device.
self.test_discover_device(device.address)
self.test_pairing(device.address, device.pin, trusted=True)
self.test_connection_by_adapter(device.address)
# Run hid test to make sure profile is connected
check_connected_method(device)
if suspend_resume:
self.suspend_resume()
time.sleep(self.HID_TEST_SLEEP_SECS)
self.test_device_is_paired(device.address)
# check if peripheral is connected after suspend resume, reconnect
# if it isn't
if not self.ignore_failure(check_connected_method, device):
logging.info("device not connected after suspend_resume")
self.test_connection_by_device(device)
else:
logging.info("device remains connected after suspend_resume")
time.sleep(self.HID_TEST_SLEEP_SECS)
check_connected_method(device)
time.sleep(self.HID_TEST_SLEEP_SECS)
self.test_device_name(device.address, device.name)
if reboot:
self.reboot()
time.sleep(self.HID_TEST_SLEEP_SECS)
# TODO(b/173146480) - Power on the adapter for now until this bug
# is resolved.
self.test_power_on_adapter()
self.test_device_is_paired(device.address)
time.sleep(self.HID_TEST_SLEEP_SECS)
self.test_connection_by_device(device)
time.sleep(self.HID_TEST_SLEEP_SECS)
self.test_device_name(device.address, device.name)
# Run HID test after suspend/reboot as well.
if suspend_resume or reboot:
check_connected_method(device)
# Disconnect the device, and remove the pairing.
self.test_disconnection_by_adapter(device.address)
self.test_remove_pairing(device.address)