mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
net: mctp-serial: Add kunit test for next_chunk_len()
Test various edge cases of inputs that contain characters that need escaping. This adds a new kunit suite for mctp-serial. Signed-off-by: Matt Johnston <matt@codeconstruct.com.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fe1910f933
commit
4fa9c5181c
@ -21,6 +21,11 @@ config MCTP_SERIAL
|
||||
Say y here if you need to connect to MCTP endpoints over serial. To
|
||||
compile as a module, use m; the module will be called mctp-serial.
|
||||
|
||||
config MCTP_SERIAL_TEST
|
||||
bool "MCTP serial tests" if !KUNIT_ALL_TESTS
|
||||
depends on MCTP_SERIAL=y && KUNIT=y
|
||||
default KUNIT_ALL_TESTS
|
||||
|
||||
config MCTP_TRANSPORT_I2C
|
||||
tristate "MCTP SMBus/I2C transport"
|
||||
# i2c-mux is optional, but we must build as a module if i2c-mux is a module
|
||||
|
@ -521,3 +521,112 @@ module_exit(mctp_serial_exit);
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_AUTHOR("Jeremy Kerr <jk@codeconstruct.com.au>");
|
||||
MODULE_DESCRIPTION("MCTP Serial transport");
|
||||
|
||||
#if IS_ENABLED(CONFIG_MCTP_SERIAL_TEST)
|
||||
#include <kunit/test.h>
|
||||
|
||||
#define MAX_CHUNKS 6
|
||||
struct test_chunk_tx {
|
||||
u8 input_len;
|
||||
u8 input[MCTP_SERIAL_MTU];
|
||||
u8 chunks[MAX_CHUNKS];
|
||||
};
|
||||
|
||||
static void test_next_chunk_len(struct kunit *test)
|
||||
{
|
||||
struct mctp_serial devx;
|
||||
struct mctp_serial *dev = &devx;
|
||||
int next;
|
||||
|
||||
const struct test_chunk_tx *params = test->param_value;
|
||||
|
||||
memset(dev, 0x0, sizeof(*dev));
|
||||
memcpy(dev->txbuf, params->input, params->input_len);
|
||||
dev->txlen = params->input_len;
|
||||
|
||||
for (size_t i = 0; i < MAX_CHUNKS; i++) {
|
||||
next = next_chunk_len(dev);
|
||||
dev->txpos += next;
|
||||
KUNIT_EXPECT_EQ(test, next, params->chunks[i]);
|
||||
|
||||
if (next == 0) {
|
||||
KUNIT_EXPECT_EQ(test, dev->txpos, dev->txlen);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
KUNIT_FAIL_AND_ABORT(test, "Ran out of chunks");
|
||||
}
|
||||
|
||||
static struct test_chunk_tx chunk_tx_tests[] = {
|
||||
{
|
||||
.input_len = 5,
|
||||
.input = { 0x00, 0x11, 0x22, 0x7e, 0x80 },
|
||||
.chunks = { 3, 1, 1, 0},
|
||||
},
|
||||
{
|
||||
.input_len = 5,
|
||||
.input = { 0x00, 0x11, 0x22, 0x7e, 0x7d },
|
||||
.chunks = { 3, 1, 1, 0},
|
||||
},
|
||||
{
|
||||
.input_len = 3,
|
||||
.input = { 0x7e, 0x11, 0x22, },
|
||||
.chunks = { 1, 2, 0},
|
||||
},
|
||||
{
|
||||
.input_len = 3,
|
||||
.input = { 0x7e, 0x7e, 0x7d, },
|
||||
.chunks = { 1, 1, 1, 0},
|
||||
},
|
||||
{
|
||||
.input_len = 4,
|
||||
.input = { 0x7e, 0x7e, 0x00, 0x7d, },
|
||||
.chunks = { 1, 1, 1, 1, 0},
|
||||
},
|
||||
{
|
||||
.input_len = 6,
|
||||
.input = { 0x7e, 0x7e, 0x00, 0x7d, 0x10, 0x10},
|
||||
.chunks = { 1, 1, 1, 1, 2, 0},
|
||||
},
|
||||
{
|
||||
.input_len = 1,
|
||||
.input = { 0x7e },
|
||||
.chunks = { 1, 0 },
|
||||
},
|
||||
{
|
||||
.input_len = 1,
|
||||
.input = { 0x80 },
|
||||
.chunks = { 1, 0 },
|
||||
},
|
||||
{
|
||||
.input_len = 3,
|
||||
.input = { 0x80, 0x80, 0x00 },
|
||||
.chunks = { 3, 0 },
|
||||
},
|
||||
{
|
||||
.input_len = 7,
|
||||
.input = { 0x01, 0x00, 0x08, 0xc8, 0x00, 0x80, 0x02 },
|
||||
.chunks = { 7, 0 },
|
||||
},
|
||||
{
|
||||
.input_len = 7,
|
||||
.input = { 0x01, 0x00, 0x08, 0xc8, 0x7e, 0x80, 0x02 },
|
||||
.chunks = { 4, 1, 2, 0 },
|
||||
},
|
||||
};
|
||||
|
||||
KUNIT_ARRAY_PARAM(chunk_tx, chunk_tx_tests, NULL);
|
||||
|
||||
static struct kunit_case mctp_serial_test_cases[] = {
|
||||
KUNIT_CASE_PARAM(test_next_chunk_len, chunk_tx_gen_params),
|
||||
};
|
||||
|
||||
static struct kunit_suite mctp_serial_test_suite = {
|
||||
.name = "mctp_serial",
|
||||
.test_cases = mctp_serial_test_cases,
|
||||
};
|
||||
|
||||
kunit_test_suite(mctp_serial_test_suite);
|
||||
|
||||
#endif /* CONFIG_MCTP_SERIAL_TEST */
|
||||
|
Loading…
Reference in New Issue
Block a user