Lines Matching +defs:test +defs:assert
3 * Base unit test (KUnit) API.
10 #include <kunit/test.h>
11 #include <kunit/test-bug.h>
31 * Hook to fail the current test and print an error message to the log.
77 MODULE_PARM_DESC(timeout, "Set the base timeout for Kunit test cases");
88 "Print test stats: never (0), only for multiple subtests (1), or always (2)");
108 static void kunit_print_test_stats(struct kunit *test,
114 kunit_log(KERN_INFO, test,
117 test->name,
150 /* Currently supported test levels */
160 * We do not log the test suite header as doing so would
161 * mean debugfs display would consist of the test suite
162 * header prior to individual test results.
175 static void kunit_print_ok_not_ok(struct kunit *test,
186 * When test is NULL assume that results are from the suite
189 WARN(!test && test_level, "suite test level can't be %u!\n", test_level);
192 * We do not log the test suite results as doing so would
193 * mean debugfs display would consist of an incorrect test
198 if (!test)
204 kunit_log(KERN_INFO, test,
258 static void kunit_print_string_stream(struct kunit *test,
269 kunit_err(test,
272 kunit_err(test, "%s", fragment->fragment);
274 kunit_err(test, "\n");
276 kunit_err(test, "%s", buf);
281 static void kunit_fail(struct kunit *test, const struct kunit_loc *loc,
282 enum kunit_assert_type type, const struct kunit_assert *assert,
287 kunit_set_failure(test);
289 stream = kunit_alloc_string_stream(test, GFP_KERNEL);
299 assert_format(assert, message, stream);
301 kunit_print_string_stream(test, stream);
303 kunit_free_string_stream(test, stream);
306 void __noreturn __kunit_abort(struct kunit *test)
308 kunit_try_catch_throw(&test->try_catch); /* Does not return. */
311 * Throw could not abort from test.
316 WARN_ONCE(true, "Throw could not abort from test!\n");
320 void __kunit_do_failed_assertion(struct kunit *test,
323 const struct kunit_assert *assert,
334 kunit_fail(test, loc, type, assert, assert_format, &message);
340 static void kunit_init_params(struct kunit *test)
342 test->params_array.params = NULL;
343 test->params_array.get_description = NULL;
344 test->params_array.num_params = 0;
345 test->params_array.elem_size = 0;
348 void kunit_init_test(struct kunit *test, const char *name, struct string_stream *log)
350 spin_lock_init(&test->lock);
351 INIT_LIST_HEAD(&test->resources);
352 test->name = name;
353 test->log = log;
354 if (test->log)
356 test->status = KUNIT_SUCCESS;
357 test->status_comment[0] = '\0';
358 kunit_init_params(test);
362 /* Only warn when a test takes more than twice the threshold */
373 static void kunit_run_case_check_speed(struct kunit *test,
387 kunit_warn(test,
414 * The default test timeout is 300 seconds and will be adjusted by mult
415 * based on the test speed. The test speed will be overridden by the
416 * innermost test component.
427 * Initializes and runs test case. Does not clean up or do post validations.
429 static void kunit_run_case_internal(struct kunit *test,
438 ret = suite->init(test);
440 kunit_err(test, "failed to initialize: %d\n", ret);
441 kunit_set_failure(test);
448 test_case->run_case(test);
452 kunit_run_case_check_speed(test, test_case, timespec64_sub(end, start));
455 static void kunit_case_internal_cleanup(struct kunit *test)
457 kunit_cleanup(test);
461 * Performs post validations and cleanup after a test case was run.
464 static void kunit_run_case_cleanup(struct kunit *test,
468 suite->exit(test);
470 kunit_case_internal_cleanup(test);
474 struct kunit *test;
482 struct kunit *test = ctx->test;
486 current->kunit_test = test;
493 kunit_run_case_internal(test, suite, test_case);
499 struct kunit *test = ctx->test;
502 current->kunit_test = test;
504 kunit_run_case_cleanup(test, suite);
510 struct kunit *test = ctx->test;
511 int try_exit_code = kunit_try_catch_get_result(&test->try_catch);
514 kunit_set_failure(test);
522 kunit_err(test, "test case cleanup timed out\n");
524 * Unknown internal error occurred preventing test case from
528 kunit_err(test, "internal error occurred during test case cleanup: %d\n",
534 kunit_err(test, "test aborted during cleanup. continuing without cleaning up\n");
541 struct kunit *test = ctx->test;
542 int try_exit_code = kunit_try_catch_get_result(&test->try_catch);
545 kunit_set_failure(test);
551 kunit_err(test, "test case timed out\n");
553 * Unknown internal error occurred preventing test case from
557 kunit_err(test, "internal error occurred preventing test case from running: %d\n",
565 * Performs all logic to run a test case. It also catches most errors that
566 * occur in a test case and reports them as failures.
570 struct kunit *test)
575 try_catch = &test->try_catch;
578 test,
582 context.test = test;
589 test,
595 /* Propagate the parameter result to the test case. */
596 if (test->status == KUNIT_FAILURE)
598 else if (test_case->status != KUNIT_FAILURE && test->status == KUNIT_SUCCESS)
653 const void *kunit_array_gen_params(struct kunit *test, const void *prev, char *desc)
655 struct kunit_params *params_arr = &test->params_array;
658 if (test->param_index < params_arr->num_params) {
660 + test->param_index * params_arr->elem_size;
663 params_arr->get_description(test, param, desc);
670 static void kunit_init_parent_param_test(struct kunit_case *test_case, struct kunit *test)
673 int err = test_case->param_init(test);
677 "# failed to initialize parent parameter test (%d)", err);
678 test->status = KUNIT_FAILURE;
707 struct kunit test = { .param_value = NULL, .param_index = 0 };
710 kunit_init_test(&test, test_case->name, test_case->log);
713 test.status = KUNIT_SKIPPED;
714 kunit_update_stats(¶m_stats, test.status);
716 /* Non-parameterised test. */
718 kunit_run_case_catch_errors(suite, test_case, &test);
719 kunit_update_stats(¶m_stats, test.status);
721 kunit_init_parent_param_test(test_case, &test);
723 kunit_update_stats(¶m_stats, test.status);
729 curr_param = test_case->generate_params(&test, NULL, param_desc);
731 kunit_log(KERN_INFO, &test, KUNIT_SUBTEST_INDENT KUNIT_SUBTEST_INDENT
733 kunit_log(KERN_INFO, &test, KUNIT_SUBTEST_INDENT KUNIT_SUBTEST_INDENT
735 if (test.params_array.params &&
737 kunit_log(KERN_INFO, &test, KUNIT_SUBTEST_INDENT
739 test.params_array.num_params);
745 .param_index = ++test.param_index,
746 .parent = &test,
766 curr_param = test_case->generate_params(&test, curr_param,
774 test_case->param_exit(&test);
776 kunit_cleanup(&test);
781 kunit_print_test_stats(&test, param_stats);
783 kunit_print_ok_not_ok(&test, KUNIT_LEVEL_CASE, test_case->status,
786 test.status_comment);
835 pr_err("kunit: test interrupted\n");
959 void *kunit_kmalloc_array(struct kunit *test, size_t n, size_t size, gfp_t gfp)
968 if (kunit_add_action_or_reset(test, kfree_action_wrapper, data) != 0)
975 void kunit_kfree(struct kunit *test, const void *ptr)
980 kunit_release_action(test, kfree_action_wrapper, (void *)ptr);
984 void kunit_kfree_const(struct kunit *test, const void *x)
989 kunit_kfree(test, x);
993 const char *kunit_kstrdup_const(struct kunit *test, const char *str, gfp_t gfp)
999 return kunit_kstrdup(test, str, gfp);
1003 void kunit_cleanup(struct kunit *test)
1009 * test->resources is a stack - each allocation must be freed in the
1018 spin_lock_irqsave(&test->lock, flags);
1019 if (list_empty(&test->resources)) {
1020 spin_unlock_irqrestore(&test->lock, flags);
1023 res = list_last_entry(&test->resources,
1028 * resource, and this can't happen if the test->lock
1031 spin_unlock_irqrestore(&test->lock, flags);
1032 kunit_remove_resource(test, res);
1061 MODULE_DESCRIPTION("Base unit test (KUnit) API");