Lines Matching full:test

3  * Base unit test (KUnit) API.
10 #include <kunit/test.h>
11 #include <kunit/test-bug.h>
26 * Hook to fail the current test and print an error message to the log.
76 "Print test stats: never (0), only for multiple subtests (1), or always (2)");
96 static void kunit_print_test_stats(struct kunit *test, in kunit_print_test_stats() argument
102 kunit_log(KERN_INFO, test, in kunit_print_test_stats()
105 test->name, in kunit_print_test_stats()
172 /* Currently supported test levels */
182 * We do not log the test suite header as doing so would in kunit_print_suite_start()
183 * mean debugfs display would consist of the test suite in kunit_print_suite_start()
184 * header prior to individual test results. in kunit_print_suite_start()
197 static void kunit_print_ok_not_ok(struct kunit *test, in kunit_print_ok_not_ok() argument
208 * When test is NULL assume that results are from the suite in kunit_print_ok_not_ok()
211 WARN(!test && test_level, "suite test level can't be %u!\n", test_level); in kunit_print_ok_not_ok()
214 * We do not log the test suite results as doing so would in kunit_print_ok_not_ok()
215 * mean debugfs display would consist of an incorrect test in kunit_print_ok_not_ok()
220 if (!test) in kunit_print_ok_not_ok()
226 kunit_log(KERN_INFO, test, in kunit_print_ok_not_ok()
280 static void kunit_print_string_stream(struct kunit *test, in kunit_print_string_stream() argument
291 kunit_err(test, in kunit_print_string_stream()
294 kunit_err(test, "%s", fragment->fragment); in kunit_print_string_stream()
296 kunit_err(test, "\n"); in kunit_print_string_stream()
298 kunit_err(test, "%s", buf); in kunit_print_string_stream()
299 kunit_kfree(test, buf); in kunit_print_string_stream()
303 static void kunit_fail(struct kunit *test, const struct kunit_loc *loc, in kunit_fail() argument
309 kunit_set_failure(test); in kunit_fail()
311 stream = alloc_string_stream(test, GFP_KERNEL); in kunit_fail()
323 kunit_print_string_stream(test, stream); in kunit_fail()
328 void __noreturn __kunit_abort(struct kunit *test) in __kunit_abort() argument
330 kunit_try_catch_throw(&test->try_catch); /* Does not return. */ in __kunit_abort()
333 * Throw could not abort from test. in __kunit_abort()
338 WARN_ONCE(true, "Throw could not abort from test!\n"); in __kunit_abort()
342 void __kunit_do_failed_assertion(struct kunit *test, in __kunit_do_failed_assertion() argument
356 kunit_fail(test, loc, type, assert, assert_format, &message); in __kunit_do_failed_assertion()
362 void kunit_init_test(struct kunit *test, const char *name, char *log) in kunit_init_test() argument
364 spin_lock_init(&test->lock); in kunit_init_test()
365 INIT_LIST_HEAD(&test->resources); in kunit_init_test()
366 test->name = name; in kunit_init_test()
367 test->log = log; in kunit_init_test()
368 if (test->log) in kunit_init_test()
369 test->log[0] = '\0'; in kunit_init_test()
370 test->status = KUNIT_SUCCESS; in kunit_init_test()
371 test->status_comment[0] = '\0'; in kunit_init_test()
376 * Initializes and runs test case. Does not clean up or do post validations.
378 static void kunit_run_case_internal(struct kunit *test, in kunit_run_case_internal() argument
385 ret = suite->init(test); in kunit_run_case_internal()
387 kunit_err(test, "failed to initialize: %d\n", ret); in kunit_run_case_internal()
388 kunit_set_failure(test); in kunit_run_case_internal()
393 test_case->run_case(test); in kunit_run_case_internal()
396 static void kunit_case_internal_cleanup(struct kunit *test) in kunit_case_internal_cleanup() argument
398 kunit_cleanup(test); in kunit_case_internal_cleanup()
402 * Performs post validations and cleanup after a test case was run.
405 static void kunit_run_case_cleanup(struct kunit *test, in kunit_run_case_cleanup() argument
409 suite->exit(test); in kunit_run_case_cleanup()
411 kunit_case_internal_cleanup(test); in kunit_run_case_cleanup()
415 struct kunit *test; member
423 struct kunit *test = ctx->test; in kunit_try_run_case() local
427 current->kunit_test = test; in kunit_try_run_case()
434 kunit_run_case_internal(test, suite, test_case); in kunit_try_run_case()
440 struct kunit *test = ctx->test; in kunit_try_run_case_cleanup() local
443 current->kunit_test = test; in kunit_try_run_case_cleanup()
445 kunit_run_case_cleanup(test, suite); in kunit_try_run_case_cleanup()
451 struct kunit *test = ctx->test; in kunit_catch_run_case_cleanup() local
452 int try_exit_code = kunit_try_catch_get_result(&test->try_catch); in kunit_catch_run_case_cleanup()
455 kunit_set_failure(test); in kunit_catch_run_case_cleanup()
459 * Test case could not finish, we have no idea what state it is in kunit_catch_run_case_cleanup()
463 kunit_err(test, "test case cleanup timed out\n"); in kunit_catch_run_case_cleanup()
465 * Unknown internal error occurred preventing test case from in kunit_catch_run_case_cleanup()
469 kunit_err(test, "internal error occurred during test case cleanup: %d\n", in kunit_catch_run_case_cleanup()
475 kunit_err(test, "test aborted during cleanup. continuing without cleaning up\n"); in kunit_catch_run_case_cleanup()
482 struct kunit *test = ctx->test; in kunit_catch_run_case() local
483 int try_exit_code = kunit_try_catch_get_result(&test->try_catch); in kunit_catch_run_case()
486 kunit_set_failure(test); in kunit_catch_run_case()
488 * Test case could not finish, we have no idea what state it is in kunit_catch_run_case()
492 kunit_err(test, "test case timed out\n"); in kunit_catch_run_case()
494 * Unknown internal error occurred preventing test case from in kunit_catch_run_case()
498 kunit_err(test, "internal error occurred preventing test case from running: %d\n", in kunit_catch_run_case()
506 * Performs all logic to run a test case. It also catches most errors that
507 * occur in a test case and reports them as failures.
511 struct kunit *test) in kunit_run_case_catch_errors() argument
516 try_catch = &test->try_catch; in kunit_run_case_catch_errors()
519 test, in kunit_run_case_catch_errors()
522 context.test = test; in kunit_run_case_catch_errors()
529 test, in kunit_run_case_catch_errors()
534 /* Propagate the parameter result to the test case. */ in kunit_run_case_catch_errors()
535 if (test->status == KUNIT_FAILURE) in kunit_run_case_catch_errors()
537 else if (test_case->status != KUNIT_FAILURE && test->status == KUNIT_SUCCESS) in kunit_run_case_catch_errors()
614 struct kunit test = { .param_value = NULL, .param_index = 0 }; in kunit_run_tests() local
617 kunit_init_test(&test, test_case->name, test_case->log); in kunit_run_tests()
619 /* Test marked as skip */ in kunit_run_tests()
620 test.status = KUNIT_SKIPPED; in kunit_run_tests()
621 kunit_update_stats(&param_stats, test.status); in kunit_run_tests()
623 /* Non-parameterised test. */ in kunit_run_tests()
625 kunit_run_case_catch_errors(suite, test_case, &test); in kunit_run_tests()
626 kunit_update_stats(&param_stats, test.status); in kunit_run_tests()
630 test.param_value = test_case->generate_params(NULL, param_desc); in kunit_run_tests()
632 kunit_log(KERN_INFO, &test, KUNIT_SUBTEST_INDENT KUNIT_SUBTEST_INDENT in kunit_run_tests()
634 kunit_log(KERN_INFO, &test, KUNIT_SUBTEST_INDENT KUNIT_SUBTEST_INDENT in kunit_run_tests()
637 while (test.param_value) { in kunit_run_tests()
638 kunit_run_case_catch_errors(suite, test_case, &test); in kunit_run_tests()
642 "param-%d", test.param_index); in kunit_run_tests()
645 kunit_print_ok_not_ok(&test, KUNIT_LEVEL_CASE_PARAM, in kunit_run_tests()
646 test.status, in kunit_run_tests()
647 test.param_index + 1, in kunit_run_tests()
649 test.status_comment); in kunit_run_tests()
653 test.param_value = test_case->generate_params(test.param_value, param_desc); in kunit_run_tests()
654 test.param_index++; in kunit_run_tests()
656 kunit_update_stats(&param_stats, test.status); in kunit_run_tests()
662 kunit_print_test_stats(&test, param_stats); in kunit_run_tests()
664 kunit_print_ok_not_ok(&test, KUNIT_LEVEL_CASE, test_case->status, in kunit_run_tests()
667 test.status_comment); in kunit_run_tests()
807 void *kunit_kmalloc_array(struct kunit *test, size_t n, size_t size, gfp_t gfp) in kunit_kmalloc_array() argument
816 if (kunit_add_action_or_reset(test, (kunit_action_t *)kfree, data) != 0) in kunit_kmalloc_array()
823 void kunit_kfree(struct kunit *test, const void *ptr) in kunit_kfree() argument
828 kunit_release_action(test, (kunit_action_t *)kfree, (void *)ptr); in kunit_kfree()
832 void kunit_cleanup(struct kunit *test) in kunit_cleanup() argument
838 * test->resources is a stack - each allocation must be freed in the in kunit_cleanup()
847 spin_lock_irqsave(&test->lock, flags); in kunit_cleanup()
848 if (list_empty(&test->resources)) { in kunit_cleanup()
849 spin_unlock_irqrestore(&test->lock, flags); in kunit_cleanup()
852 res = list_last_entry(&test->resources, in kunit_cleanup()
857 * resource, and this can't happen if the test->lock in kunit_cleanup()
860 spin_unlock_irqrestore(&test->lock, flags); in kunit_cleanup()
861 kunit_remove_resource(test, res); in kunit_cleanup()