2024-06-05 16:51:45 -07:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
//
|
|
|
|
// self-id-sequence-helper-test.c - An application of Kunit to test helpers of self ID sequence.
|
|
|
|
//
|
|
|
|
// Copyright (c) 2024 Takashi Sakamoto
|
|
|
|
|
|
|
|
#include <kunit/test.h>
|
|
|
|
|
|
|
|
#include "phy-packet-definitions.h"
|
|
|
|
|
|
|
|
static void test_self_id_sequence_enumerator_valid(struct kunit *test)
|
|
|
|
{
|
|
|
|
static const u32 valid_sequences[] = {
|
|
|
|
0x00000000,
|
|
|
|
0x00000001, 0x00800000,
|
|
|
|
0x00000001, 0x00800001, 0x00900000,
|
|
|
|
0x00000000,
|
|
|
|
};
|
|
|
|
struct self_id_sequence_enumerator enumerator;
|
|
|
|
const u32 *entry;
|
|
|
|
unsigned int quadlet_count;
|
|
|
|
|
|
|
|
enumerator.cursor = valid_sequences;
|
|
|
|
enumerator.quadlet_count = ARRAY_SIZE(valid_sequences);
|
|
|
|
|
|
|
|
entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);
|
|
|
|
KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[0]);
|
|
|
|
KUNIT_EXPECT_EQ(test, quadlet_count, 1);
|
|
|
|
KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 6);
|
|
|
|
|
|
|
|
entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);
|
|
|
|
KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[1]);
|
|
|
|
KUNIT_EXPECT_EQ(test, quadlet_count, 2);
|
|
|
|
KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 4);
|
|
|
|
|
|
|
|
entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);
|
|
|
|
KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[3]);
|
|
|
|
KUNIT_EXPECT_EQ(test, quadlet_count, 3);
|
|
|
|
KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 1);
|
|
|
|
|
|
|
|
entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);
|
|
|
|
KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[6]);
|
|
|
|
KUNIT_EXPECT_EQ(test, quadlet_count, 1);
|
|
|
|
KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 0);
|
|
|
|
|
|
|
|
entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);
|
|
|
|
KUNIT_EXPECT_EQ(test, PTR_ERR(entry), -ENODATA);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_self_id_sequence_enumerator_invalid(struct kunit *test)
|
|
|
|
{
|
|
|
|
static const u32 invalid_sequences[] = {
|
|
|
|
0x00000001,
|
|
|
|
};
|
|
|
|
struct self_id_sequence_enumerator enumerator;
|
|
|
|
const u32 *entry;
|
|
|
|
unsigned int count;
|
|
|
|
|
|
|
|
enumerator.cursor = invalid_sequences;
|
|
|
|
enumerator.quadlet_count = ARRAY_SIZE(invalid_sequences);
|
|
|
|
|
|
|
|
entry = self_id_sequence_enumerator_next(&enumerator, &count);
|
|
|
|
KUNIT_EXPECT_EQ(test, PTR_ERR(entry), -EPROTO);
|
|
|
|
}
|
|
|
|
|
2024-06-05 16:51:46 -07:00
|
|
|
static void test_self_id_sequence_get_port_status(struct kunit *test)
|
|
|
|
{
|
|
|
|
static const u32 expected[] = {
|
|
|
|
0x000000e5,
|
|
|
|
0x00839e79,
|
|
|
|
0x0091e79d,
|
|
|
|
0x00a279e4,
|
|
|
|
};
|
|
|
|
u32 quadlets [] = {
|
|
|
|
0x00000001,
|
|
|
|
0x00800001,
|
|
|
|
0x00900001,
|
|
|
|
0x00a00000,
|
|
|
|
};
|
|
|
|
enum phy_packet_self_id_port_status port_status[28];
|
|
|
|
unsigned int port_capacity;
|
|
|
|
unsigned int port_index;
|
|
|
|
|
|
|
|
KUNIT_ASSERT_EQ(test, ARRAY_SIZE(expected), ARRAY_SIZE(quadlets));
|
|
|
|
|
|
|
|
// With an extra port.
|
|
|
|
port_capacity = self_id_sequence_get_port_capacity(ARRAY_SIZE(expected)) + 1;
|
|
|
|
KUNIT_ASSERT_EQ(test, port_capacity, ARRAY_SIZE(port_status));
|
|
|
|
|
|
|
|
for (port_index = 0; port_index < port_capacity; ++port_index) {
|
|
|
|
port_status[port_index] =
|
|
|
|
self_id_sequence_get_port_status(expected, ARRAY_SIZE(expected), port_index);
|
|
|
|
self_id_sequence_set_port_status(quadlets, ARRAY_SIZE(quadlets), port_index,
|
|
|
|
port_status[port_index]);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Self ID zero.
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[0]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[1]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[2]);
|
|
|
|
|
|
|
|
// Self ID one.
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[3]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[4]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[5]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[6]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[7]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[8]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[9]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[10]);
|
|
|
|
|
|
|
|
// Self ID two.
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[11]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[12]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[13]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[14]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[15]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[16]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[17]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[18]);
|
|
|
|
|
|
|
|
// Self ID three.
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[19]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[20]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[21]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[22]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[23]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[24]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[25]);
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[26]);
|
|
|
|
|
|
|
|
// Our of order.
|
|
|
|
KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NONE, port_status[27]);
|
|
|
|
|
|
|
|
KUNIT_EXPECT_MEMEQ(test, quadlets, expected, sizeof(expected));
|
|
|
|
}
|
|
|
|
|
2024-06-05 16:51:45 -07:00
|
|
|
static struct kunit_case self_id_sequence_helper_test_cases[] = {
|
|
|
|
KUNIT_CASE(test_self_id_sequence_enumerator_valid),
|
|
|
|
KUNIT_CASE(test_self_id_sequence_enumerator_invalid),
|
2024-06-05 16:51:46 -07:00
|
|
|
KUNIT_CASE(test_self_id_sequence_get_port_status),
|
2024-06-05 16:51:45 -07:00
|
|
|
{}
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct kunit_suite self_id_sequence_helper_test_suite = {
|
|
|
|
.name = "self-id-sequence-helper",
|
|
|
|
.test_cases = self_id_sequence_helper_test_cases,
|
|
|
|
};
|
|
|
|
kunit_test_suite(self_id_sequence_helper_test_suite);
|
|
|
|
|
|
|
|
MODULE_DESCRIPTION("Unit test suite for helpers of self ID sequence");
|
|
|
|
MODULE_LICENSE("GPL");
|