|
8 | 8 | #include "linux/gfp_types.h" |
9 | 9 | #include <kunit/test.h> |
10 | 10 | #include <kunit/test-bug.h> |
| 11 | +#include <kunit/static_stub.h> |
11 | 12 |
|
12 | 13 | #include <linux/device.h> |
13 | 14 | #include <kunit/device.h> |
@@ -43,7 +44,8 @@ static void kunit_test_try_catch_successful_try_no_catch(struct kunit *test) |
43 | 44 | kunit_try_catch_init(try_catch, |
44 | 45 | test, |
45 | 46 | kunit_test_successful_try, |
46 | | - kunit_test_no_catch); |
| 47 | + kunit_test_no_catch, |
| 48 | + 300 * msecs_to_jiffies(MSEC_PER_SEC)); |
47 | 49 | kunit_try_catch_run(try_catch, test); |
48 | 50 |
|
49 | 51 | KUNIT_EXPECT_TRUE(test, ctx->function_called); |
@@ -75,7 +77,8 @@ static void kunit_test_try_catch_unsuccessful_try_does_catch(struct kunit *test) |
75 | 77 | kunit_try_catch_init(try_catch, |
76 | 78 | test, |
77 | 79 | kunit_test_unsuccessful_try, |
78 | | - kunit_test_catch); |
| 80 | + kunit_test_catch, |
| 81 | + 300 * msecs_to_jiffies(MSEC_PER_SEC)); |
79 | 82 | kunit_try_catch_run(try_catch, test); |
80 | 83 |
|
81 | 84 | KUNIT_EXPECT_TRUE(test, ctx->function_called); |
@@ -129,7 +132,8 @@ static void kunit_test_fault_null_dereference(struct kunit *test) |
129 | 132 | kunit_try_catch_init(try_catch, |
130 | 133 | test, |
131 | 134 | kunit_test_null_dereference, |
132 | | - kunit_test_catch); |
| 135 | + kunit_test_catch, |
| 136 | + 300 * msecs_to_jiffies(MSEC_PER_SEC)); |
133 | 137 | kunit_try_catch_run(try_catch, test); |
134 | 138 |
|
135 | 139 | KUNIT_EXPECT_EQ(test, try_catch->try_result, -EINTR); |
@@ -868,10 +872,53 @@ static struct kunit_suite kunit_current_test_suite = { |
868 | 872 | .test_cases = kunit_current_test_cases, |
869 | 873 | }; |
870 | 874 |
|
| 875 | +static void kunit_stub_test(struct kunit *test) |
| 876 | +{ |
| 877 | + struct kunit fake_test; |
| 878 | + const unsigned long fake_real_fn_addr = 0x1234; |
| 879 | + const unsigned long fake_replacement_addr = 0x5678; |
| 880 | + struct kunit_resource *res; |
| 881 | + struct { |
| 882 | + void *real_fn_addr; |
| 883 | + void *replacement_addr; |
| 884 | + } *stub_ctx; |
| 885 | + |
| 886 | + kunit_init_test(&fake_test, "kunit_stub_fake_test", NULL); |
| 887 | + KUNIT_ASSERT_EQ(test, fake_test.status, KUNIT_SUCCESS); |
| 888 | + KUNIT_ASSERT_EQ(test, list_count_nodes(&fake_test.resources), 0); |
| 889 | + |
| 890 | + __kunit_activate_static_stub(&fake_test, (void *)fake_real_fn_addr, |
| 891 | + (void *)fake_replacement_addr); |
| 892 | + KUNIT_ASSERT_EQ(test, fake_test.status, KUNIT_SUCCESS); |
| 893 | + KUNIT_ASSERT_EQ(test, list_count_nodes(&fake_test.resources), 1); |
| 894 | + |
| 895 | + res = list_first_entry(&fake_test.resources, struct kunit_resource, node); |
| 896 | + KUNIT_EXPECT_NOT_NULL(test, res); |
| 897 | + |
| 898 | + stub_ctx = res->data; |
| 899 | + KUNIT_EXPECT_NOT_NULL(test, stub_ctx); |
| 900 | + KUNIT_EXPECT_EQ(test, (unsigned long)stub_ctx->real_fn_addr, fake_real_fn_addr); |
| 901 | + KUNIT_EXPECT_EQ(test, (unsigned long)stub_ctx->replacement_addr, fake_replacement_addr); |
| 902 | + |
| 903 | + __kunit_activate_static_stub(&fake_test, (void *)fake_real_fn_addr, NULL); |
| 904 | + KUNIT_ASSERT_EQ(test, fake_test.status, KUNIT_SUCCESS); |
| 905 | + KUNIT_ASSERT_EQ(test, list_count_nodes(&fake_test.resources), 0); |
| 906 | +} |
| 907 | + |
| 908 | +static struct kunit_case kunit_stub_test_cases[] = { |
| 909 | + KUNIT_CASE(kunit_stub_test), |
| 910 | + {} |
| 911 | +}; |
| 912 | + |
| 913 | +static struct kunit_suite kunit_stub_test_suite = { |
| 914 | + .name = "kunit_stub", |
| 915 | + .test_cases = kunit_stub_test_cases, |
| 916 | +}; |
| 917 | + |
871 | 918 | kunit_test_suites(&kunit_try_catch_test_suite, &kunit_resource_test_suite, |
872 | 919 | &kunit_log_test_suite, &kunit_status_test_suite, |
873 | 920 | &kunit_current_test_suite, &kunit_device_test_suite, |
874 | | - &kunit_fault_test_suite); |
| 921 | + &kunit_fault_test_suite, &kunit_stub_test_suite); |
875 | 922 |
|
876 | 923 | MODULE_DESCRIPTION("KUnit test for core test infrastructure"); |
877 | 924 | MODULE_LICENSE("GPL v2"); |
0 commit comments