brintos

brintos / linux-shallow public Read only

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