brintos

brintos / linux-shallow public Read only

0
0
Text · 5.8 KiB · eed7a22 Raw
153 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2//3// self-id-sequence-helper-test.c - An application of Kunit to test helpers of self ID sequence.4//5// Copyright (c) 2024 Takashi Sakamoto6 7#include <kunit/test.h>8 9#include "phy-packet-definitions.h"10 11static void test_self_id_sequence_enumerator_valid(struct kunit *test)12{13	static const u32 valid_sequences[] = {14		0x00000000,15		0x00000001, 0x00800000,16		0x00000001, 0x00800001, 0x00900000,17		0x00000000,18	};19	struct self_id_sequence_enumerator enumerator;20	const u32 *entry;21	unsigned int quadlet_count;22 23	enumerator.cursor = valid_sequences;24	enumerator.quadlet_count = ARRAY_SIZE(valid_sequences);25 26	entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);27	KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[0]);28	KUNIT_EXPECT_EQ(test, quadlet_count, 1);29	KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 6);30 31	entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);32	KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[1]);33	KUNIT_EXPECT_EQ(test, quadlet_count, 2);34	KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 4);35 36	entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);37	KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[3]);38	KUNIT_EXPECT_EQ(test, quadlet_count, 3);39	KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 1);40 41	entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);42	KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[6]);43	KUNIT_EXPECT_EQ(test, quadlet_count, 1);44	KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 0);45 46	entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);47	KUNIT_EXPECT_EQ(test, PTR_ERR(entry), -ENODATA);48}49 50static void test_self_id_sequence_enumerator_invalid(struct kunit *test)51{52	static const u32 invalid_sequences[] = {53		0x00000001,54	};55	struct self_id_sequence_enumerator enumerator;56	const u32 *entry;57	unsigned int count;58 59	enumerator.cursor = invalid_sequences;60	enumerator.quadlet_count = ARRAY_SIZE(invalid_sequences);61 62	entry = self_id_sequence_enumerator_next(&enumerator, &count);63	KUNIT_EXPECT_EQ(test, PTR_ERR(entry), -EPROTO);64}65 66static void test_self_id_sequence_get_port_status(struct kunit *test)67{68	static const u32 expected[] = {69		0x000000e5,70		0x00839e79,71		0x0091e79d,72		0x00a279e4,73	};74	u32 quadlets [] = {75		0x00000001,76		0x00800001,77		0x00900001,78		0x00a00000,79	};80	enum phy_packet_self_id_port_status port_status[28];81	unsigned int port_capacity;82	unsigned int port_index;83 84	KUNIT_ASSERT_EQ(test, ARRAY_SIZE(expected), ARRAY_SIZE(quadlets));85 86	// With an extra port.87	port_capacity = self_id_sequence_get_port_capacity(ARRAY_SIZE(expected)) + 1;88	KUNIT_ASSERT_EQ(test, port_capacity, ARRAY_SIZE(port_status));89 90	for (port_index = 0; port_index < port_capacity; ++port_index) {91		port_status[port_index] =92			self_id_sequence_get_port_status(expected, ARRAY_SIZE(expected), port_index);93		self_id_sequence_set_port_status(quadlets, ARRAY_SIZE(quadlets), port_index,94						 port_status[port_index]);95	}96 97	// Self ID zero.98	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[0]);99	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[1]);100	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[2]);101 102	// Self ID one.103	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[3]);104	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[4]);105	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[5]);106	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[6]);107	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[7]);108	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[8]);109	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[9]);110	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[10]);111 112	// Self ID two.113	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[11]);114	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[12]);115	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[13]);116	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[14]);117	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[15]);118	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[16]);119	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[17]);120	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[18]);121 122	// Self ID three.123	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[19]);124	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[20]);125	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[21]);126	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[22]);127	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[23]);128	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[24]);129	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[25]);130	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[26]);131 132	// Our of order.133	KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NONE, port_status[27]);134 135	KUNIT_EXPECT_MEMEQ(test, quadlets, expected, sizeof(expected));136}137 138static struct kunit_case self_id_sequence_helper_test_cases[] = {139	KUNIT_CASE(test_self_id_sequence_enumerator_valid),140	KUNIT_CASE(test_self_id_sequence_enumerator_invalid),141	KUNIT_CASE(test_self_id_sequence_get_port_status),142	{}143};144 145static struct kunit_suite self_id_sequence_helper_test_suite = {146	.name = "self-id-sequence-helper",147	.test_cases = self_id_sequence_helper_test_cases,148};149kunit_test_suite(self_id_sequence_helper_test_suite);150 151MODULE_DESCRIPTION("Unit test suite for helpers of self ID sequence");152MODULE_LICENSE("GPL");153