Path: blob/master/drivers/firewire/self-id-sequence-helper-test.c
26378 views
// SPDX-License-Identifier: GPL-2.0-or-later1//2// self-id-sequence-helper-test.c - An application of Kunit to test helpers of self ID sequence.3//4// Copyright (c) 2024 Takashi Sakamoto56#include <kunit/test.h>78#include "phy-packet-definitions.h"910static void test_self_id_sequence_enumerator_valid(struct kunit *test)11{12static const u32 valid_sequences[] = {130x00000000,140x00000001, 0x00800000,150x00000001, 0x00800001, 0x00900000,160x00000000,17};18struct self_id_sequence_enumerator enumerator;19const u32 *entry;20unsigned int quadlet_count;2122enumerator.cursor = valid_sequences;23enumerator.quadlet_count = ARRAY_SIZE(valid_sequences);2425entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);26KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[0]);27KUNIT_EXPECT_EQ(test, quadlet_count, 1);28KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 6);2930entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);31KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[1]);32KUNIT_EXPECT_EQ(test, quadlet_count, 2);33KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 4);3435entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);36KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[3]);37KUNIT_EXPECT_EQ(test, quadlet_count, 3);38KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 1);3940entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);41KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[6]);42KUNIT_EXPECT_EQ(test, quadlet_count, 1);43KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 0);4445entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);46KUNIT_EXPECT_EQ(test, PTR_ERR(entry), -ENODATA);47}4849static void test_self_id_sequence_enumerator_invalid(struct kunit *test)50{51static const u32 invalid_sequences[] = {520x00000001,53};54struct self_id_sequence_enumerator enumerator;55const u32 *entry;56unsigned int count;5758enumerator.cursor = invalid_sequences;59enumerator.quadlet_count = ARRAY_SIZE(invalid_sequences);6061entry = self_id_sequence_enumerator_next(&enumerator, &count);62KUNIT_EXPECT_EQ(test, PTR_ERR(entry), -EPROTO);63}6465static void test_self_id_sequence_get_port_status(struct kunit *test)66{67static const u32 expected[] = {680x000000e5,690x00839e79,700x0091e79d,710x00a279e4,72};73u32 quadlets [] = {740x00000001,750x00800001,760x00900001,770x00a00000,78};79enum phy_packet_self_id_port_status port_status[28];80unsigned int port_capacity;81unsigned int port_index;8283KUNIT_ASSERT_EQ(test, ARRAY_SIZE(expected), ARRAY_SIZE(quadlets));8485// With an extra port.86port_capacity = self_id_sequence_get_port_capacity(ARRAY_SIZE(expected)) + 1;87KUNIT_ASSERT_EQ(test, port_capacity, ARRAY_SIZE(port_status));8889for (port_index = 0; port_index < port_capacity; ++port_index) {90port_status[port_index] =91self_id_sequence_get_port_status(expected, ARRAY_SIZE(expected), port_index);92self_id_sequence_set_port_status(quadlets, ARRAY_SIZE(quadlets), port_index,93port_status[port_index]);94}9596// Self ID zero.97KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[0]);98KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[1]);99KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[2]);100101// Self ID one.102KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[3]);103KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[4]);104KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[5]);105KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[6]);106KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[7]);107KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[8]);108KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[9]);109KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[10]);110111// Self ID two.112KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[11]);113KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[12]);114KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[13]);115KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[14]);116KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[15]);117KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[16]);118KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[17]);119KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[18]);120121// Self ID three.122KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[19]);123KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[20]);124KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[21]);125KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[22]);126KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[23]);127KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_CHILD, port_status[24]);128KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_PARENT, port_status[25]);129KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NCONN, port_status[26]);130131// Our of order.132KUNIT_EXPECT_EQ(test, PHY_PACKET_SELF_ID_PORT_STATUS_NONE, port_status[27]);133134KUNIT_EXPECT_MEMEQ(test, quadlets, expected, sizeof(expected));135}136137static struct kunit_case self_id_sequence_helper_test_cases[] = {138KUNIT_CASE(test_self_id_sequence_enumerator_valid),139KUNIT_CASE(test_self_id_sequence_enumerator_invalid),140KUNIT_CASE(test_self_id_sequence_get_port_status),141{}142};143144static struct kunit_suite self_id_sequence_helper_test_suite = {145.name = "self-id-sequence-helper",146.test_cases = self_id_sequence_helper_test_cases,147};148kunit_test_suite(self_id_sequence_helper_test_suite);149150MODULE_DESCRIPTION("Unit test suite for helpers of self ID sequence");151MODULE_LICENSE("GPL");152153154