hid-uclogic-core-test.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * HID driver for UC-Logic devices not fully compliant with HID standard
  4. *
  5. * Copyright (c) 2022 José Expósito <jose.exposito89@gmail.com>
  6. */
  7. #include <kunit/test.h>
  8. #include "./hid-uclogic-params.h"
  9. #define MAX_EVENT_SIZE 12
  10. struct uclogic_raw_event_hook_test {
  11. u8 event[MAX_EVENT_SIZE];
  12. size_t size;
  13. bool expected;
  14. };
  15. static struct uclogic_raw_event_hook_test hook_events[] = {
  16. {
  17. .event = { 0xA1, 0xB2, 0xC3, 0xD4 },
  18. .size = 4,
  19. },
  20. {
  21. .event = { 0x1F, 0x2E, 0x3D, 0x4C, 0x5B, 0x6A },
  22. .size = 6,
  23. },
  24. };
  25. static struct uclogic_raw_event_hook_test test_events[] = {
  26. {
  27. .event = { 0xA1, 0xB2, 0xC3, 0xD4 },
  28. .size = 4,
  29. .expected = true,
  30. },
  31. {
  32. .event = { 0x1F, 0x2E, 0x3D, 0x4C, 0x5B, 0x6A },
  33. .size = 6,
  34. .expected = true,
  35. },
  36. {
  37. .event = { 0xA1, 0xB2, 0xC3 },
  38. .size = 3,
  39. .expected = false,
  40. },
  41. {
  42. .event = { 0xA1, 0xB2, 0xC3, 0xD4, 0x00 },
  43. .size = 5,
  44. .expected = false,
  45. },
  46. {
  47. .event = { 0x2E, 0x3D, 0x4C, 0x5B, 0x6A, 0x1F },
  48. .size = 6,
  49. .expected = false,
  50. },
  51. };
  52. static void fake_work(struct work_struct *work)
  53. {
  54. }
  55. static void hid_test_uclogic_exec_event_hook_test(struct kunit *test)
  56. {
  57. struct uclogic_params p = {0, };
  58. struct uclogic_raw_event_hook *filter;
  59. bool res;
  60. int n;
  61. /* Initialize the list of events to hook */
  62. p.event_hooks = kunit_kzalloc(test, sizeof(*p.event_hooks), GFP_KERNEL);
  63. KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p.event_hooks);
  64. INIT_LIST_HEAD(&p.event_hooks->list);
  65. for (n = 0; n < ARRAY_SIZE(hook_events); n++) {
  66. filter = kunit_kzalloc(test, sizeof(*filter), GFP_KERNEL);
  67. KUNIT_ASSERT_NOT_ERR_OR_NULL(test, filter);
  68. filter->size = hook_events[n].size;
  69. filter->event = kunit_kzalloc(test, filter->size, GFP_KERNEL);
  70. KUNIT_ASSERT_NOT_ERR_OR_NULL(test, filter->event);
  71. memcpy(filter->event, &hook_events[n].event[0], filter->size);
  72. INIT_WORK(&filter->work, fake_work);
  73. list_add_tail(&filter->list, &p.event_hooks->list);
  74. }
  75. /* Test uclogic_exec_event_hook() */
  76. for (n = 0; n < ARRAY_SIZE(test_events); n++) {
  77. res = uclogic_exec_event_hook(&p, &test_events[n].event[0],
  78. test_events[n].size);
  79. KUNIT_ASSERT_EQ(test, res, test_events[n].expected);
  80. }
  81. }
  82. static struct kunit_case hid_uclogic_core_test_cases[] = {
  83. KUNIT_CASE(hid_test_uclogic_exec_event_hook_test),
  84. {}
  85. };
  86. static struct kunit_suite hid_uclogic_core_test_suite = {
  87. .name = "hid_uclogic_core_test",
  88. .test_cases = hid_uclogic_core_test_cases,
  89. };
  90. kunit_test_suite(hid_uclogic_core_test_suite);
  91. MODULE_DESCRIPTION("KUnit tests for the UC-Logic driver");
  92. MODULE_LICENSE("GPL");
  93. MODULE_AUTHOR("José Expósito <jose.exposito89@gmail.com>");