diff --git a/devices/src/usb/keyboard.rs b/devices/src/usb/keyboard.rs index cc05e241b6347264158606b3afd0199953106579..2f07580eb5ad412e74a112c383b20dd7af244b39 100644 --- a/devices/src/usb/keyboard.rs +++ b/devices/src/usb/keyboard.rs @@ -30,6 +30,7 @@ use super::{ use machine_manager::config::valid_id; use ui::input::{register_keyboard, unregister_keyboard, KeyboardOpts}; use util::gen_base_func; +static KEYBOARD_TEST_ENABLED: OnceCell = OnceCell::new(); /// Keyboard device descriptor static DESC_DEVICE_KEYBOARD: Lazy> = Lazy::new(|| { @@ -176,6 +177,9 @@ impl KeyboardOpts for UsbKeyboardAdapter { let clone_kbd = self.usb_kbd.clone(); // Wakeup endpoint. let ep_id = endpoint_number_to_id(true, 1); + if KEYBOARD_TEST_ENABLED.get().is_some() { + return Ok(()); + } notify_controller(&(clone_kbd as Arc>), ep_id) } } @@ -263,6 +267,10 @@ impl UsbDevice for UsbKeyboard { } } +pub fn set_keyboard_test_enabled() { + KEYBOARD_TEST_ENABLED.set(true); +} + #[cfg(test)] mod tests { use super::*; @@ -288,8 +296,10 @@ mod tests { }); let _ = &keyboard.reset(); - let _ = &keyboard.unrealize(); - let _ = &keyboard.get_controller(); + assert_eq!(keyboard.base.remote_wakeup, 0); + assert_eq!(keyboard.base.addr, 0); + assert!(&keyboard.unrealize().is_ok()); + assert!(&keyboard.get_controller().is_none()); let device_req = UsbDeviceRequest { request_type: USB_DEVICE_OUT_REQUEST, request: USB_REQUEST_SET_ADDRESS, @@ -315,13 +325,12 @@ mod tests { port: None, }); let _ = &keyboard.handle_control(&packet, &device_req); - let _ = &keyboard.handle_data(&packet); - let _ = &keyboard.cancel_packet(&packet); - let _ = &keyboard.realize(); + assert!(&keyboard.realize().is_ok()); } #[test] fn test_key_event() { + set_keyboard_test_enabled(); let mut usb_adapter = UsbKeyboardAdapter { usb_kbd: Arc::new(Mutex::new(UsbKeyboard::new(UsbKeyboardConfig { classtype: "usb-keyboard".to_string(), @@ -331,7 +340,7 @@ mod tests { }))), }; // 0x0057: scancode of F11 - let _ = usb_adapter.do_key_event(0x0057, true); - let _ = usb_adapter.do_key_event(0x0057, false); + assert!(usb_adapter.do_key_event(0x0057, true).is_ok()); + assert!(usb_adapter.do_key_event(0x0057, false).is_ok()); } } diff --git a/devices/src/usb/tablet.rs b/devices/src/usb/tablet.rs index a7a17bee3db62ea81f5c7f8ec1e5ee098f01a7c0..860633db80b71ccc1c842f2231b602b1659c92aa 100644 --- a/devices/src/usb/tablet.rs +++ b/devices/src/usb/tablet.rs @@ -35,6 +35,7 @@ use ui::input::{ INPUT_BUTTON_WHEEL_UP, }; use util::gen_base_func; +static TABLET_TEST_ENABLED: OnceCell = OnceCell::new(); const INPUT_COORDINATES_MAX: u32 = 0x7fff; @@ -231,6 +232,9 @@ impl PointerOpts for UsbTabletAdapter { let clone_tablet = self.tablet.clone(); // Wakeup endpoint. let ep_id = endpoint_number_to_id(true, 1); + if TABLET_TEST_ENABLED.get().is_some() { + return Ok(()); + } notify_controller(&(clone_tablet as Arc>), ep_id) } } @@ -304,6 +308,10 @@ impl UsbDevice for UsbTablet { } } +pub fn set_tablet_test_enabled() { + TABLET_TEST_ENABLED.set(true); +} + #[cfg(test)] mod tests { use super::*; @@ -330,8 +338,10 @@ mod tests { }); let _ = &tablet.reset(); - let _ = &tablet.unrealize(); - let _ = &tablet.get_controller(); + assert_eq!(tablet.base.remote_wakeup, 0); + assert_eq!(tablet.base.addr, 0); + assert!(&tablet.unrealize().is_ok()); + assert!(&tablet.get_controller().is_none()); let device_req = UsbDeviceRequest { request_type: USB_DEVICE_OUT_REQUEST, request: USB_REQUEST_SET_ADDRESS, @@ -357,13 +367,12 @@ mod tests { port: None, }); let _ = &tablet.handle_control(&packet, &device_req); - let _ = &tablet.handle_data(&packet); - let _ = &tablet.cancel_packet(&packet); - let _ = &tablet.realize(); + assert!(&tablet.realize().is_ok()); } #[test] fn test_tablet_event() { + set_tablet_test_enabled(); let mut usb_adapter = UsbTabletAdapter { tablet: Arc::new(Mutex::new(UsbTablet::new(UsbTabletConfig { classtype: "usb-tablet".to_string(), @@ -383,7 +392,7 @@ mod tests { }, key_event: KeyEvent::default(), }; - let _ = usb_adapter.update_point_state(press_button_event); + assert!(usb_adapter.update_point_state(press_button_event).is_ok()); let release_button_event = InputEvent { input_type: InputType::ButtonEvent, @@ -394,7 +403,7 @@ mod tests { }, key_event: KeyEvent::default(), }; - let _ = usb_adapter.update_point_state(release_button_event); + assert!(usb_adapter.update_point_state(release_button_event).is_ok()); // test move event let move_event = InputEvent { @@ -403,11 +412,8 @@ mod tests { button_event: ButtonEvent::default(), key_event: KeyEvent::default(), }; - let _ = usb_adapter.update_point_state(move_event); + assert!(usb_adapter.update_point_state(move_event).is_ok()); - match usb_adapter.sync() { - Ok(_) => true, - Err(_) => false, - }; + assert!(usb_adapter.sync().is_ok()); } }