Exemple #1
0
    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.assertEqual(len(set_report_call_pos_args), 5)
        self.assertEqual(set_report_call_pos_args[0], 'handle')
        self.assertEqual(set_report_call_pos_args[1], 1)
        self.assertEqual(set_report_call_pos_args[2], 0)
        self.assertEqual(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')
Exemple #2
0
    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.assertEqual(64, device.GetInReportDataLength())
        self.assertEqual(64, device.GetOutReportDataLength())
Exemple #3
0
    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(OSError):
            device.Write(data)
Exemple #4
0
  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('1')

    # 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.assertEqual(read_result, list(range(64)), 'Read data should match data '
                      'passed into the callback')