test: Create pre/post-run functions
authorSimon Glass <sjg@chromium.org>
Mon, 8 Mar 2021 00:34:48 +0000 (17:34 -0700)
committerTom Rini <trini@konsulko.com>
Fri, 12 Mar 2021 14:57:29 +0000 (09:57 -0500)
Split out the test preparation into a separation function before
expanding it. Add a post-run function as well, currently empty.

Signed-off-by: Simon Glass <sjg@chromium.org>
include/test/ut.h
test/test-main.c

index 88e75ab..7cb5e10 100644 (file)
@@ -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
index 376e7eb..7961fd8 100644 (file)
@@ -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;