diff options
Diffstat (limited to 'lib/kunit/kunit-test.c')
| -rw-r--r-- | lib/kunit/kunit-test.c | 45 | 
1 files changed, 44 insertions, 1 deletions
| diff --git a/lib/kunit/kunit-test.c b/lib/kunit/kunit-test.c index f7980ef236a3..e3412e0ca399 100644 --- a/lib/kunit/kunit-test.c +++ b/lib/kunit/kunit-test.c @@ -109,6 +109,48 @@ static struct kunit_suite kunit_try_catch_test_suite = {  	.test_cases = kunit_try_catch_test_cases,  }; +#if IS_ENABLED(CONFIG_KUNIT_FAULT_TEST) + +static void kunit_test_null_dereference(void *data) +{ +	struct kunit *test = data; +	int *null = NULL; + +	*null = 0; + +	KUNIT_FAIL(test, "This line should never be reached\n"); +} + +static void kunit_test_fault_null_dereference(struct kunit *test) +{ +	struct kunit_try_catch_test_context *ctx = test->priv; +	struct kunit_try_catch *try_catch = ctx->try_catch; + +	kunit_try_catch_init(try_catch, +			     test, +			     kunit_test_null_dereference, +			     kunit_test_catch); +	kunit_try_catch_run(try_catch, test); + +	KUNIT_EXPECT_EQ(test, try_catch->try_result, -EINTR); +	KUNIT_EXPECT_TRUE(test, ctx->function_called); +} + +#endif /* CONFIG_KUNIT_FAULT_TEST */ + +static struct kunit_case kunit_fault_test_cases[] = { +#if IS_ENABLED(CONFIG_KUNIT_FAULT_TEST) +	KUNIT_CASE(kunit_test_fault_null_dereference), +#endif /* CONFIG_KUNIT_FAULT_TEST */ +	{} +}; + +static struct kunit_suite kunit_fault_test_suite = { +	.name = "kunit_fault", +	.init = kunit_try_catch_test_init, +	.test_cases = kunit_fault_test_cases, +}; +  /*   * Context for testing test managed resources   * is_resource_initialized is used to test arbitrary resources @@ -826,6 +868,7 @@ static struct kunit_suite kunit_current_test_suite = {  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_current_test_suite, &kunit_device_test_suite, +		  &kunit_fault_test_suite);  MODULE_LICENSE("GPL v2"); | 
