blob: dc867e6f4a5c6129dcf7edb698739f1467a32363 [file] [log] [blame]
<!--
Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
SPDX-License-Identifier: BSD-2-Clause
-->
This library is for running tests and generating test output in either
human readable or xml format.
SETTING UP LIBSEL4TEST WITH YOUR PROJECT
Choose the appropriate options for your build. If you are testing as
a human, you probably want both of those options disabled. If you are
testing as bamboo, you definitely want both turned on.
CONFIG_PRINT_XML
Bamboo requires XML. Humans can choose.
Stdout will be buffered to avoid corrupting the xml as JUnit output
requires that stdout be wrapped in an xml element, which is
what the above option does. Turn that option off (in Kconfig) whilst
debugging your test suite. This buffering will currently only apply to
printf.
USING LIBSEL4TEST
To use libsel4test:
1. Provide a definition for struct env before including <sel4test/test.h>.
2. Write tests with the prototype int (*test)(env_t env, void *args). Follow each test with the DEFINE_TEST macro.
3. Provide a run_test function int (*run_test)(struct test_case *t) and call sel4test_run_tests.
4. That's it. Each test will run in alphabetical order based on the test name. Tests will run forward and backward.
Example code:
struct env {
vka_t *vka;
}
#include <sel4test/test.h>
static env_t env;
env_t sel4test_get_env(void) {
return env;
}
static int
a_test(env_t env, void *args)
{
printf("Hello world");
test_check(0 == 0);
}
DEFINE_TEST(TEST000, "An example test", a_test)
int main(void) {
/* allocator set up */
env->vka = init_allocator();
/* sel4test_basic_run_test just runs each test and passes in
env returned by sel4test_get_env.
You can define your own version of this if you need custom
setup/teardown
*/
sel4test_run_tests("my test name", sel4test_basic_run_test);
}
CAVEATS
There is a tool for sanitizing the xml in tools/extract_results.py.
A NOTE ON ASSERT
When writing tests with this library you should usually avoid using assert and
always use 'sel4test_check' etc, which will test the case and report a test failure
without crashing the build. This permits other tests to keep running.
Use test_assert_fatal if your tests have reached a state where continuing the
test run is useless and you do not want to parse any test results from
the build at all.
It is good practice for failing tests to not break the build, but sometimes
it is necessary.