| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- /*
- * Copyright © 2024 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
- #pragma once
- #include "config.h"
- #include "util-mem.h"
- #include "util-range.h"
- #include "litest.h"
- #define LITEST_RUNNER_DEFAULT_TIMEOUT 30
- /**
- * Result returned from tests or suites.
- */
- enum litest_runner_result {
- LITEST_PASS = 75, /**< test successful */
- LITEST_FAIL = 76, /**< test failed. Should not be returned directly,
- Use the litest_ macros instead */
- LITEST_SKIP = 77, /**< test was skipped */
- LITEST_NOT_APPLICABLE = 78, /**< test does not apply */
- LITEST_TIMEOUT = 79, /**< test aborted after timeout */
- LITEST_SYSTEM_ERROR = 80, /**< unrelated error occurred */
- };
- /* For parametrized tests (litest_add_parametrized and friends)
- * a list of these is passed to every test. This struct isn't used
- * directly, use litest_test_param_fetch() instead.
- */
- struct litest_test_param {
- struct list link;
- char name[128];
- struct multivalue value;
- };
- struct litest_test_parameters {
- int refcnt;
- struct list test_params;
- };
- struct litest_test_parameters *
- litest_test_parameters_new(void);
- struct litest_test_parameters *
- litest_test_parameters_unref(struct litest_test_parameters *params);
- #define litest_test_param_fetch(...) \
- _litest_test_param_fetch(__VA_ARGS__, NULL)
- void
- _litest_test_param_fetch(const struct litest_test_parameters *params, ...);
- static inline const char *
- litest_test_param_get_string(const struct litest_test_parameters *params,
- const char *name)
- {
- const char *p;
- litest_test_param_fetch(params, name, 's', &p);
- return p;
- }
- static inline bool
- litest_test_param_get_bool(const struct litest_test_parameters *params,
- const char *name)
- {
- bool p;
- litest_test_param_fetch(params, name, 'b', &p);
- return p;
- }
- static inline int32_t
- litest_test_param_get_i32(const struct litest_test_parameters *params, const char *name)
- {
- int32_t p;
- litest_test_param_fetch(params, name, 'i', &p);
- return p;
- }
- static inline uint32_t
- litest_test_param_get_u32(const struct litest_test_parameters *params, const char *name)
- {
- uint32_t p;
- litest_test_param_fetch(params, name, 'u', &p);
- return p;
- }
- static inline char
- litest_test_param_get_char(const struct litest_test_parameters *params,
- const char *name)
- {
- char p;
- litest_test_param_fetch(params, name, 'c', &p);
- return p;
- }
- static inline double
- litest_test_param_get_double(const struct litest_test_parameters *params,
- const char *name)
- {
- double p;
- litest_test_param_fetch(params, name, 'd', &p);
- return p;
- }
- /**
- * This struct is passed into every test.
- */
- struct litest_runner_test_env {
- int rangeval; /* The current value within the args.range (or 0) */
- const struct litest_test_parameters *params;
- };
- struct litest_runner_test_description {
- char name[512]; /* The name of the test */
- int rangeval; /* The current value within the args.range (or 0) */
- struct litest_test_parameters *params;
- /* test function and corresponding setup/teardown, if any */
- enum litest_runner_result (*func)(const struct litest_runner_test_env *);
- void (*setup)(const struct litest_runner_test_description *);
- void (*teardown)(const struct litest_runner_test_description *);
- struct {
- struct range range; /* The range this test applies to */
- int signal; /* expected signal for fail tests */
- } args;
- };
- struct litest_runner;
- struct litest_runner *
- litest_runner_new(void);
- /**
- * Default is nprocs * 2.
- * Setting this to 0 means *no* forking. Setting this to 1 means only one test
- * is run at a time but in a child process.
- */
- void
- litest_runner_set_num_parallel(struct litest_runner *runner, size_t num_jobs);
- void
- litest_runner_set_timeout(struct litest_runner *runner, unsigned int timeout);
- void
- litest_runner_set_verbose(struct litest_runner *runner, bool verbose);
- void
- litest_runner_set_use_colors(struct litest_runner *runner, bool use_colors);
- void
- litest_runner_set_exit_on_fail(struct litest_runner *runner, bool do_exit);
- void
- litest_runner_set_output_file(struct litest_runner *runner, FILE *fp);
- void
- litest_runner_add_test(struct litest_runner *runner,
- const struct litest_runner_test_description *t);
- enum litest_runner_result
- litest_runner_run_tests(struct litest_runner *runner);
- typedef enum litest_runner_result (*litest_runner_global_setup_func_t)(void *userdata);
- typedef void (*litest_runner_global_teardown_func_t)(void *userdata);
- void
- litest_runner_set_setup_funcs(struct litest_runner *runner,
- litest_runner_global_setup_func_t setup,
- litest_runner_global_teardown_func_t teardown,
- void *userdata);
- void
- litest_runner_destroy(struct litest_runner *runner);
- DEFINE_DESTROY_CLEANUP_FUNC(litest_runner);
- /*
- * Function to call abort(). Depending on the number of forks permitted,
- * this function may simply abort() or it may longjmp back out to collect
- * errors from non-forking tests.
- */
- __attribute__((noreturn)) void
- litest_runner_abort(void);
|