def testCallWriteSuccess(self, thread, iokit, cf, GetDeviceIntProperty): # pylint: disable=invalid-name init_mock_iokit(iokit) init_mock_cf(cf) init_mock_get_int_property(GetDeviceIntProperty) device = macos.MacOsHidDevice('fakepath') # Write 64 bytes to device data = bytearray(range(64)) # Write to device device.Write(data) # Validate that write calls into IOKit set_report_call_args = iokit.IOHIDDeviceSetReport.call_args self.assertIsNotNone(set_report_call_args) set_report_call_pos_args = iokit.IOHIDDeviceSetReport.call_args[0] self.assertEquals(len(set_report_call_pos_args), 5) self.assertEquals(set_report_call_pos_args[0], 'handle') self.assertEquals(set_report_call_pos_args[1], 1) self.assertEquals(set_report_call_pos_args[2], 0) self.assertEquals(set_report_call_pos_args[4], 64) report_buffer = set_report_call_pos_args[3] self.assertEqual(len(report_buffer), 64) self.assertEqual( bytearray(report_buffer), data, 'Data sent to ' 'IOHIDDeviceSetReport should match data sent to the ' 'device')
def testInitHidDevice(self, thread, iokit, cf, GetDeviceIntProperty): # pylint: disable=invalid-name init_mock_iokit(iokit) init_mock_cf(cf) init_mock_get_int_property(GetDeviceIntProperty) device = macos.MacOsHidDevice('fakepath') self.assertEquals(64, device.GetInReportDataLength()) self.assertEquals(64, device.GetOutReportDataLength())
def testCallWriteFailure(self, thread, iokit, cf, GetDeviceIntProperty): # pylint: disable=invalid-name init_mock_iokit(iokit) init_mock_cf(cf) init_mock_get_int_property(GetDeviceIntProperty) # Make set report call return failure (non-zero) iokit.IOHIDDeviceSetReport.return_value = -1 device = macos.MacOsHidDevice('fakepath') # Write 64 bytes to device data = bytearray(range(64)) # Write should throw an OsHidError exception with self.assertRaises(errors.OsHidError): device.Write(data)
def testCallReadSuccess(self, thread, iokit, cf, GetDeviceIntProperty): # pylint: disable=invalid-name init_mock_iokit(iokit) init_mock_cf(cf) init_mock_get_int_property(GetDeviceIntProperty) device = macos.MacOsHidDevice('fakepath') # Call callback for IN report report = (ctypes.c_uint8 * 64)() report[:] = range(64)[:] q = device.read_queue macos.HidReadCallback(q, None, None, None, 0, report, 64) # Device read should return the callback data read_result = device.Read() self.assertEquals( read_result, list(range(64)), 'Read data should match ' 'data passed into the callback')