Skip to content

Commit e42ad39

Browse files
Tzung-Bi Shihshuahkh
authored andcommitted
kunit: Add test for static stub
__kunit_activate_static_stub() works effectively as kunit_deactivate_static_stub() if `replacement_addr` is NULL. Add a test case to catch the issue discovered in commit 772e50a ("kunit: Fix wrong parameter to kunit_deactivate_static_stub()"). For running the test: $ ./tools/testing/kunit/kunit.py run \ --arch=x86_64 \ kunit_stub Fixed change log: Shuah Khan <skhan@linuxfoundation.org> Link: https://lore.kernel.org/r/20250612084834.587576-1-tzungbi@kernel.org Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
1 parent 76ee96d commit e42ad39

1 file changed

Lines changed: 45 additions & 1 deletion

File tree

lib/kunit/kunit-test.c

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "linux/gfp_types.h"
99
#include <kunit/test.h>
1010
#include <kunit/test-bug.h>
11+
#include <kunit/static_stub.h>
1112

1213
#include <linux/device.h>
1314
#include <kunit/device.h>
@@ -868,10 +869,53 @@ static struct kunit_suite kunit_current_test_suite = {
868869
.test_cases = kunit_current_test_cases,
869870
};
870871

872+
static void kunit_stub_test(struct kunit *test)
873+
{
874+
struct kunit fake_test;
875+
const unsigned long fake_real_fn_addr = 0x1234;
876+
const unsigned long fake_replacement_addr = 0x5678;
877+
struct kunit_resource *res;
878+
struct {
879+
void *real_fn_addr;
880+
void *replacement_addr;
881+
} *stub_ctx;
882+
883+
kunit_init_test(&fake_test, "kunit_stub_fake_test", NULL);
884+
KUNIT_ASSERT_EQ(test, fake_test.status, KUNIT_SUCCESS);
885+
KUNIT_ASSERT_EQ(test, list_count_nodes(&fake_test.resources), 0);
886+
887+
__kunit_activate_static_stub(&fake_test, (void *)fake_real_fn_addr,
888+
(void *)fake_replacement_addr);
889+
KUNIT_ASSERT_EQ(test, fake_test.status, KUNIT_SUCCESS);
890+
KUNIT_ASSERT_EQ(test, list_count_nodes(&fake_test.resources), 1);
891+
892+
res = list_first_entry(&fake_test.resources, struct kunit_resource, node);
893+
KUNIT_EXPECT_NOT_NULL(test, res);
894+
895+
stub_ctx = res->data;
896+
KUNIT_EXPECT_NOT_NULL(test, stub_ctx);
897+
KUNIT_EXPECT_EQ(test, (unsigned long)stub_ctx->real_fn_addr, fake_real_fn_addr);
898+
KUNIT_EXPECT_EQ(test, (unsigned long)stub_ctx->replacement_addr, fake_replacement_addr);
899+
900+
__kunit_activate_static_stub(&fake_test, (void *)fake_real_fn_addr, NULL);
901+
KUNIT_ASSERT_EQ(test, fake_test.status, KUNIT_SUCCESS);
902+
KUNIT_ASSERT_EQ(test, list_count_nodes(&fake_test.resources), 0);
903+
}
904+
905+
static struct kunit_case kunit_stub_test_cases[] = {
906+
KUNIT_CASE(kunit_stub_test),
907+
{}
908+
};
909+
910+
static struct kunit_suite kunit_stub_test_suite = {
911+
.name = "kunit_stub",
912+
.test_cases = kunit_stub_test_cases,
913+
};
914+
871915
kunit_test_suites(&kunit_try_catch_test_suite, &kunit_resource_test_suite,
872916
&kunit_log_test_suite, &kunit_status_test_suite,
873917
&kunit_current_test_suite, &kunit_device_test_suite,
874-
&kunit_fault_test_suite);
918+
&kunit_fault_test_suite, &kunit_stub_test_suite);
875919

876920
MODULE_DESCRIPTION("KUnit test for core test infrastructure");
877921
MODULE_LICENSE("GPL v2");

0 commit comments

Comments
 (0)