aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/test/ut.h20
-rw-r--r--test/test-main.c41
2 files changed, 51 insertions, 10 deletions
diff --git a/include/test/ut.h b/include/test/ut.h
index 88e75ab..7cb5e10 100644
--- a/include/test/ut.h
+++ b/include/test/ut.h
@@ -357,6 +357,26 @@ void ut_silence_console(struct unit_test_state *uts);
void ut_unsilence_console(struct unit_test_state *uts);
/**
+ * test_pre_run() - Handle any preparation needed to run a test
+ *
+ * @uts: Test state
+ * @test: Test to prepare for
+ * @return 0 if OK, -EAGAIN to skip this test since some required feature is not
+ * available, other -ve on error (meaning that testing cannot likely
+ * continue)
+ */
+int test_pre_run(struct unit_test_state *uts, struct unit_test *test);
+
+/**
+ * test_post_run() - Handle cleaning up after a test
+ *
+ * @uts: Test state
+ * @test: Test to clean up after
+ * @return 0 if OK, -ve on error (meaning that testing cannot likely continue)
+ */
+int test_post_run(struct unit_test_state *uts, struct unit_test *test);
+
+/**
* ut_run_tests() - Run a set of tests
*
* This runs the tests, handling any preparation and clean-up needed. It prints
diff --git a/test/test-main.c b/test/test-main.c
index 376e7eb..7961fd8 100644
--- a/test/test-main.c
+++ b/test/test-main.c
@@ -8,6 +8,27 @@
#include <console.h>
#include <test/test.h>
+int test_pre_run(struct unit_test_state *uts, struct unit_test *test)
+{
+ uts->start = mallinfo();
+
+ if (test->flags & UT_TESTF_CONSOLE_REC) {
+ int ret = console_record_reset_enable();
+
+ if (ret) {
+ printf("Skipping: Console recording disabled\n");
+ return -EAGAIN;
+ }
+ }
+
+ return 0;
+}
+
+int test_post_run(struct unit_test_state *uts, struct unit_test *test)
+{
+ return 0;
+}
+
int ut_run_tests(struct unit_test_state *uts, const char *prefix,
struct unit_test *tests, int count, const char *select_name)
{
@@ -17,6 +38,7 @@ int ut_run_tests(struct unit_test_state *uts, const char *prefix,
for (test = tests; test < tests + count; test++) {
const char *test_name = test->name;
+ int ret;
/* Remove the prefix */
if (prefix && !strncmp(test_name, prefix, prefix_len))
@@ -27,18 +49,17 @@ int ut_run_tests(struct unit_test_state *uts, const char *prefix,
printf("Test: %s\n", test_name);
found++;
- if (test->flags & UT_TESTF_CONSOLE_REC) {
- int ret = console_record_reset_enable();
-
- if (ret) {
- printf("Skipping: Console recording disabled\n");
- continue;
- }
- }
-
- uts->start = mallinfo();
+ ret = test_pre_run(uts, test);
+ if (ret == -EAGAIN)
+ continue;
+ if (ret)
+ return ret;
test->func(uts);
+
+ ret = test_post_run(uts, test);
+ if (ret)
+ return ret;
}
if (select_name && !found)
return -ENOENT;