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 772e50a76e ("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>
This commit is contained in:
parent
76ee96d3d7
commit
e42ad39318
|
|
@ -8,6 +8,7 @@
|
|||
#include "linux/gfp_types.h"
|
||||
#include <kunit/test.h>
|
||||
#include <kunit/test-bug.h>
|
||||
#include <kunit/static_stub.h>
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <kunit/device.h>
|
||||
|
|
@ -868,10 +869,53 @@ static struct kunit_suite kunit_current_test_suite = {
|
|||
.test_cases = kunit_current_test_cases,
|
||||
};
|
||||
|
||||
static void kunit_stub_test(struct kunit *test)
|
||||
{
|
||||
struct kunit fake_test;
|
||||
const unsigned long fake_real_fn_addr = 0x1234;
|
||||
const unsigned long fake_replacement_addr = 0x5678;
|
||||
struct kunit_resource *res;
|
||||
struct {
|
||||
void *real_fn_addr;
|
||||
void *replacement_addr;
|
||||
} *stub_ctx;
|
||||
|
||||
kunit_init_test(&fake_test, "kunit_stub_fake_test", NULL);
|
||||
KUNIT_ASSERT_EQ(test, fake_test.status, KUNIT_SUCCESS);
|
||||
KUNIT_ASSERT_EQ(test, list_count_nodes(&fake_test.resources), 0);
|
||||
|
||||
__kunit_activate_static_stub(&fake_test, (void *)fake_real_fn_addr,
|
||||
(void *)fake_replacement_addr);
|
||||
KUNIT_ASSERT_EQ(test, fake_test.status, KUNIT_SUCCESS);
|
||||
KUNIT_ASSERT_EQ(test, list_count_nodes(&fake_test.resources), 1);
|
||||
|
||||
res = list_first_entry(&fake_test.resources, struct kunit_resource, node);
|
||||
KUNIT_EXPECT_NOT_NULL(test, res);
|
||||
|
||||
stub_ctx = res->data;
|
||||
KUNIT_EXPECT_NOT_NULL(test, stub_ctx);
|
||||
KUNIT_EXPECT_EQ(test, (unsigned long)stub_ctx->real_fn_addr, fake_real_fn_addr);
|
||||
KUNIT_EXPECT_EQ(test, (unsigned long)stub_ctx->replacement_addr, fake_replacement_addr);
|
||||
|
||||
__kunit_activate_static_stub(&fake_test, (void *)fake_real_fn_addr, NULL);
|
||||
KUNIT_ASSERT_EQ(test, fake_test.status, KUNIT_SUCCESS);
|
||||
KUNIT_ASSERT_EQ(test, list_count_nodes(&fake_test.resources), 0);
|
||||
}
|
||||
|
||||
static struct kunit_case kunit_stub_test_cases[] = {
|
||||
KUNIT_CASE(kunit_stub_test),
|
||||
{}
|
||||
};
|
||||
|
||||
static struct kunit_suite kunit_stub_test_suite = {
|
||||
.name = "kunit_stub",
|
||||
.test_cases = kunit_stub_test_cases,
|
||||
};
|
||||
|
||||
kunit_test_suites(&kunit_try_catch_test_suite, &kunit_resource_test_suite,
|
||||
&kunit_log_test_suite, &kunit_status_test_suite,
|
||||
&kunit_current_test_suite, &kunit_device_test_suite,
|
||||
&kunit_fault_test_suite);
|
||||
&kunit_fault_test_suite, &kunit_stub_test_suite);
|
||||
|
||||
MODULE_DESCRIPTION("KUnit test for core test infrastructure");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
|
|
|||
Loading…
Reference in New Issue