diff --git a/providers/base/bin/zapper_keyboard_test.py b/providers/base/bin/zapper_keyboard_test.py index 0aec015c2f..a9290762c9 100755 --- a/providers/base/bin/zapper_keyboard_test.py +++ b/providers/base/bin/zapper_keyboard_test.py @@ -9,11 +9,20 @@ import struct import sys import threading +import time from enum import Enum from pathlib import Path from checkbox_support.scripts.zapper_proxy import zapper_run # noqa: E402 +ROBOT_INIT = """ +*** Settings *** +Library libraries/ZapperHid.py + +*** Test Cases *** +Do nothing + Log Re-configure HID device +""" ROBOT_TESTCASE_COMBO = """ *** Settings *** @@ -124,8 +133,12 @@ def get_zapper_kbd_device(): """ zapper_kbd = "usb-Canonical_Zapper_main_board_123456*-event-kbd" - for file_path in Path("/dev/input/by-id/").glob(zapper_kbd): - return str(file_path) + start = time.time() + for _ in range(5): + for file_path in Path("/dev/input/by-id/").glob(zapper_kbd): + print(time.time() - start) + return str(file_path) + time.sleep(1) raise FileNotFoundError("Cannot find Zapper Keyboard.") @@ -138,6 +151,9 @@ def main(argv): if len(argv) != 2: raise SystemExit("Usage: {} ".format(argv[0])) + # A simple robot-run to initialize the Zapper HID device + zapper_run(argv[1], "robot_run", ROBOT_INIT.encode(), {}, {}) + try: zapper_kbd = get_zapper_kbd_device() except FileNotFoundError as exc: @@ -150,7 +166,6 @@ def main(argv): listener = KeyboardListener(zapper_kbd, events.append) listener.start() - zapper_run(argv[1], "reset_hid_state") try: assert_key_combo(argv[1], events) assert_type_string(argv[1], events) diff --git a/providers/base/tests/test_zapper_keyboard.py b/providers/base/tests/test_zapper_keyboard.py index 35ff03196c..65a2c1bdba 100644 --- a/providers/base/tests/test_zapper_keyboard.py +++ b/providers/base/tests/test_zapper_keyboard.py @@ -60,6 +60,7 @@ def test_main_no_args(self): with self.assertRaises(SystemExit): zapper_keyboard_test.main([1]) + @patch("time.sleep", Mock()) @patch("zapper_keyboard_test.Path") def test_get_zapper_kbd_device(self, mock_path): """ @@ -67,11 +68,17 @@ def test_get_zapper_kbd_device(self, mock_path): keyboard device when it's the only Zapper HID device. """ - mock_path.return_value.glob.return_value = [ - Path( - "/dev/input/by-id/" - "usb-Canonical_Zapper_main_board_123456-event-kbd", - ) + mock_path.return_value.glob.side_effect = [ + [], + [], + [], + [], + [ + Path( + "/dev/input/by-id/" + "usb-Canonical_Zapper_main_board_123456-event-kbd", + ) + ], ] device = zapper_keyboard_test.get_zapper_kbd_device() self.assertEqual( @@ -80,6 +87,7 @@ def test_get_zapper_kbd_device(self, mock_path): "usb-Canonical_Zapper_main_board_123456-event-kbd", ) + @patch("time.sleep", Mock()) @patch("zapper_keyboard_test.Path") def test_get_zapper_kbd_device_if01(self, mock_path): """ @@ -100,6 +108,7 @@ def test_get_zapper_kbd_device_if01(self, mock_path): "usb-Canonical_Zapper_main_board_123456-if01-event-kbd", ) + @patch("time.sleep", Mock()) @patch("zapper_keyboard_test.Path") def test_get_zapper_kbd_device_not_found(self, mock_path): """ @@ -111,6 +120,7 @@ def test_get_zapper_kbd_device_not_found(self, mock_path): with self.assertRaises(FileNotFoundError): zapper_keyboard_test.get_zapper_kbd_device() + @patch("zapper_keyboard_test.zapper_run", Mock()) @patch("zapper_keyboard_test.get_zapper_kbd_device") def test_main_no_keyboard(self, mock_get_dev): """Check main exits with failure if Zapper keyboard is missing.""" @@ -118,6 +128,7 @@ def test_main_no_keyboard(self, mock_get_dev): with self.assertRaises(SystemExit): zapper_keyboard_test.main([1, 2]) + @patch("zapper_keyboard_test.zapper_run", Mock()) @patch("zapper_keyboard_test.get_zapper_kbd_device") @patch("os.access") def test_main_no_file_or_permission(self, mock_access, mock_get_dev): @@ -154,7 +165,13 @@ def test_main( mock_key.return_value.start.assert_called_once_with() mock_key.return_value.stop.assert_called_once_with() mock_key.return_value.join.assert_called_once_with() - mock_run.assert_called_once_with("127.0.0.1", "reset_hid_state") + mock_run.assert_called_once_with( + "127.0.0.1", + "robot_run", + zapper_keyboard_test.ROBOT_INIT.encode(), + {}, + {}, + ) mock_combo.side_effect = None mock_type.side_effect = AssertionError