Lines Matching full:test

3  * Base unit test (KUnit) API.
10 #include <kunit/test.h>
11 #include <kunit/test-bug.h>
25 * Fail the current test and print an error message to the log.
77 "Print test stats: never (0), only for multiple subtests (1), or always (2)");
97 static void kunit_print_test_stats(struct kunit *test, in kunit_print_test_stats() argument
103 kunit_log(KERN_INFO, test, in kunit_print_test_stats()
106 test->name, in kunit_print_test_stats()
166 struct kunit *test = is_test ? test_or_suite : NULL; in kunit_print_ok_not_ok() local
170 * We do not log the test suite results as doing so would in kunit_print_ok_not_ok()
171 * mean debugfs display would consist of the test suite in kunit_print_ok_not_ok()
172 * description and status prior to individual test results. in kunit_print_ok_not_ok()
183 kunit_log(KERN_INFO, test, in kunit_print_ok_not_ok()
236 static void kunit_print_string_stream(struct kunit *test, in kunit_print_string_stream() argument
247 kunit_err(test, in kunit_print_string_stream()
250 kunit_err(test, "%s", fragment->fragment); in kunit_print_string_stream()
252 kunit_err(test, "\n"); in kunit_print_string_stream()
254 kunit_err(test, "%s", buf); in kunit_print_string_stream()
255 kunit_kfree(test, buf); in kunit_print_string_stream()
259 static void kunit_fail(struct kunit *test, const struct kunit_loc *loc, in kunit_fail() argument
265 kunit_set_failure(test); in kunit_fail()
267 stream = alloc_string_stream(test, GFP_KERNEL); in kunit_fail()
279 kunit_print_string_stream(test, stream); in kunit_fail()
284 static void __noreturn kunit_abort(struct kunit *test) in kunit_abort() argument
286 kunit_try_catch_throw(&test->try_catch); /* Does not return. */ in kunit_abort()
289 * Throw could not abort from test. in kunit_abort()
294 WARN_ONCE(true, "Throw could not abort from test!\n"); in kunit_abort()
297 void kunit_do_failed_assertion(struct kunit *test, in kunit_do_failed_assertion() argument
311 kunit_fail(test, loc, type, assert, assert_format, &message); in kunit_do_failed_assertion()
316 kunit_abort(test); in kunit_do_failed_assertion()
320 void kunit_init_test(struct kunit *test, const char *name, char *log) in kunit_init_test() argument
322 spin_lock_init(&test->lock); in kunit_init_test()
323 INIT_LIST_HEAD(&test->resources); in kunit_init_test()
324 test->name = name; in kunit_init_test()
325 test->log = log; in kunit_init_test()
326 if (test->log) in kunit_init_test()
327 test->log[0] = '\0'; in kunit_init_test()
328 test->status = KUNIT_SUCCESS; in kunit_init_test()
329 test->status_comment[0] = '\0'; in kunit_init_test()
334 * Initializes and runs test case. Does not clean up or do post validations.
336 static void kunit_run_case_internal(struct kunit *test, in kunit_run_case_internal() argument
343 ret = suite->init(test); in kunit_run_case_internal()
345 kunit_err(test, "failed to initialize: %d\n", ret); in kunit_run_case_internal()
346 kunit_set_failure(test); in kunit_run_case_internal()
351 test_case->run_case(test); in kunit_run_case_internal()
354 static void kunit_case_internal_cleanup(struct kunit *test) in kunit_case_internal_cleanup() argument
356 kunit_cleanup(test); in kunit_case_internal_cleanup()
360 * Performs post validations and cleanup after a test case was run.
363 static void kunit_run_case_cleanup(struct kunit *test, in kunit_run_case_cleanup() argument
367 suite->exit(test); in kunit_run_case_cleanup()
369 kunit_case_internal_cleanup(test); in kunit_run_case_cleanup()
373 struct kunit *test; member
381 struct kunit *test = ctx->test; in kunit_try_run_case() local
385 current->kunit_test = test; in kunit_try_run_case()
392 kunit_run_case_internal(test, suite, test_case); in kunit_try_run_case()
394 kunit_run_case_cleanup(test, suite); in kunit_try_run_case()
400 struct kunit *test = ctx->test; in kunit_catch_run_case() local
402 int try_exit_code = kunit_try_catch_get_result(&test->try_catch); in kunit_catch_run_case()
405 kunit_set_failure(test); in kunit_catch_run_case()
407 * Test case could not finish, we have no idea what state it is in kunit_catch_run_case()
411 kunit_err(test, "test case timed out\n"); in kunit_catch_run_case()
413 * Unknown internal error occurred preventing test case from in kunit_catch_run_case()
417 kunit_err(test, "internal error occurred preventing test case from running: %d\n", in kunit_catch_run_case()
424 * Test case was run, but aborted. It is the test case's business as to in kunit_catch_run_case()
427 kunit_run_case_cleanup(test, suite); in kunit_catch_run_case()
431 * Performs all logic to run a test case. It also catches most errors that
432 * occur in a test case and reports them as failures.
436 struct kunit *test) in kunit_run_case_catch_errors() argument
441 kunit_init_test(test, test_case->name, test_case->log); in kunit_run_case_catch_errors()
442 try_catch = &test->try_catch; in kunit_run_case_catch_errors()
445 test, in kunit_run_case_catch_errors()
448 context.test = test; in kunit_run_case_catch_errors()
453 /* Propagate the parameter result to the test case. */ in kunit_run_case_catch_errors()
454 if (test->status == KUNIT_FAILURE) in kunit_run_case_catch_errors()
456 else if (test_case->status != KUNIT_FAILURE && test->status == KUNIT_SUCCESS) in kunit_run_case_catch_errors()
533 struct kunit test = { .param_value = NULL, .param_index = 0 }; in kunit_run_tests() local
538 /* Non-parameterised test. */ in kunit_run_tests()
539 kunit_run_case_catch_errors(suite, test_case, &test); in kunit_run_tests()
540 kunit_update_stats(&param_stats, test.status); in kunit_run_tests()
544 test.param_value = test_case->generate_params(NULL, param_desc); in kunit_run_tests()
545 kunit_log(KERN_INFO, &test, KUNIT_SUBTEST_INDENT KUNIT_SUBTEST_INDENT in kunit_run_tests()
548 while (test.param_value) { in kunit_run_tests()
549 kunit_run_case_catch_errors(suite, test_case, &test); in kunit_run_tests()
553 "param-%d", test.param_index); in kunit_run_tests()
556 kunit_log(KERN_INFO, &test, in kunit_run_tests()
559 kunit_status_to_ok_not_ok(test.status), in kunit_run_tests()
560 test.param_index + 1, param_desc); in kunit_run_tests()
564 test.param_value = test_case->generate_params(test.param_value, param_desc); in kunit_run_tests()
565 test.param_index++; in kunit_run_tests()
567 kunit_update_stats(&param_stats, test.status); in kunit_run_tests()
572 kunit_print_test_stats(&test, param_stats); in kunit_run_tests()
574 kunit_print_ok_not_ok(&test, true, test_case->status, in kunit_run_tests()
577 test.status_comment); in kunit_run_tests()
701 void *kunit_kmalloc_array(struct kunit *test, size_t n, size_t size, gfp_t gfp) in kunit_kmalloc_array() argument
709 return kunit_alloc_resource(test, in kunit_kmalloc_array()
717 static inline bool kunit_kfree_match(struct kunit *test, in kunit_kfree_match() argument
724 void kunit_kfree(struct kunit *test, const void *ptr) in kunit_kfree() argument
729 if (kunit_destroy_resource(test, kunit_kfree_match, (void *)ptr)) in kunit_kfree()
730 KUNIT_FAIL(test, "kunit_kfree: %px already freed or not allocated by kunit", ptr); in kunit_kfree()
734 void kunit_cleanup(struct kunit *test) in kunit_cleanup() argument
740 * test->resources is a stack - each allocation must be freed in the in kunit_cleanup()
749 spin_lock_irqsave(&test->lock, flags); in kunit_cleanup()
750 if (list_empty(&test->resources)) { in kunit_cleanup()
751 spin_unlock_irqrestore(&test->lock, flags); in kunit_cleanup()
754 res = list_last_entry(&test->resources, in kunit_cleanup()
759 * resource, and this can't happen if the test->lock in kunit_cleanup()
762 spin_unlock_irqrestore(&test->lock, flags); in kunit_cleanup()
763 kunit_remove_resource(test, res); in kunit_cleanup()