All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [PATCH v3 28/41] test: Run driver-model tests using ut_run_list()
Date: Wed,  3 Feb 2021 05:44:34 -0700	[thread overview]
Message-ID: <20210203124447.2458527-28-sjg@chromium.org> (raw)
In-Reply-To: <20210203124447.2458527-1-sjg@chromium.org>

Use this function instead of implementing it separately for driver model.

Make ut_run_tests() private since it is only used in test-main.c

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v2)

Changes in v2:
- Allow for prefix to be NULL, to match function comment

 include/test/ut.h | 42 -----------------------
 test/dm/test-dm.c | 45 +++---------------------
 test/test-main.c  | 87 +++++++++++++++++++++++++++++++++++++++++------
 3 files changed, 81 insertions(+), 93 deletions(-)

diff --git a/include/test/ut.h b/include/test/ut.h
index bed0e6eb5f6..fbbba286ee0 100644
--- a/include/test/ut.h
+++ b/include/test/ut.h
@@ -381,48 +381,6 @@ struct unit_test_state *test_get_state(void);
  */
 void test_set_state(struct unit_test_state *uts);
 
-/**
- * ut_run_test_live_flat() - Run a test with both live and flat tree
- *
- * This calls ut_run_test() with livetree enabled, which is the standard setup
- * for runnig tests. Then, for driver model test, it calls it again with
- * livetree disabled. This allows checking of flattree being used when OF_LIVE
- * is enabled, as is the case in U-Boot proper before relocation, as well as in
- * SPL.
- *
- * @uts: Test state to update. The caller should ensure that this is zeroed for
- *	the first call to this function. On exit, @uts->fail_count is
- *	incremented by the number of failures (0, one hopes)
- * @test: Test to run
- * @name: Name of test, possibly skipping a prefix that should not be displayed
- * @return 0 if all tests passed, -EAGAIN if the test should be skipped, -1 if
- *	any failed
- */
-int ut_run_test_live_flat(struct unit_test_state *uts, struct unit_test *test,
-			  const char *name);
-
-/**
- * ut_run_tests() - Run a set of tests
- *
- * This runs the tests, handling any preparation and clean-up needed. It prints
- * the name of each test before running it.
- *
- * @uts: Test state to update. The caller should ensure that this is zeroed for
- *	the first call to this function. On exit, @uts->fail_count is
- *	incremented by the number of failures (0, one hopes)
- * @prefix: String prefix for the tests. Any tests that have this prefix will be
- *	printed without the prefix, so that it is easier to see the unique part
- *	of the test name. If NULL, no prefix processing is done
- * @tests: List of tests to run
- * @count: Number of tests to run
- * @select_name: Name of a single test to run (from the list provided). If NULL
- *	then all tests are run
- * @return 0 if all tests passed, -ENOENT if test @select_name was not found,
- *	-EBADF if any failed
- */
-int ut_run_tests(struct unit_test_state *uts, const char *prefix,
-		 struct unit_test *tests, int count, const char *select_name);
-
 /**
  * ut_run_tests() - Run a set of tests
  *
diff --git a/test/dm/test-dm.c b/test/dm/test-dm.c
index 6f9906a510a..252c3e88328 100644
--- a/test/dm/test-dm.c
+++ b/test/dm/test-dm.c
@@ -19,31 +19,14 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static bool test_matches(const char *test_name, const char *find_name)
-{
-	if (!find_name)
-		return true;
-
-	if (!strcmp(test_name, find_name))
-		return true;
-
-	/* All tests have this prefix */
-	if (!strncmp(test_name, "dm_test_", 8))
-		test_name += 8;
-
-	if (!strcmp(test_name, find_name))
-		return true;
-
-	return false;
-}
+struct unit_test_state global_dm_test_state;
 
 int dm_test_run(const char *test_name)
 {
 	struct unit_test *tests = ll_entry_start(struct unit_test, dm_test);
 	const int n_ents = ll_entry_count(struct unit_test, dm_test);
 	struct unit_test_state uts_s = { .fail_count = 0 }, *uts = &uts_s;
-	struct unit_test *test;
-	int found;
+	struct device_node *of_root;
 
 	uts->fail_count = 0;
 
@@ -59,29 +42,11 @@ int dm_test_run(const char *test_name)
 		}
 	}
 
-	if (!test_name)
-		printf("Running %d driver model tests\n", n_ents);
-	else
-
-	found = 0;
-	uts->of_root = gd_of_root();
-	for (test = tests; test < tests + n_ents; test++) {
-		const char *name = test->name;
-
-		if (!test_matches(name, test_name))
-			continue;
-
-		ut_assertok(ut_run_test_live_flat(uts, test, test->name));
-		found++;
-	}
-
-	if (test_name && !found)
-		printf("Test '%s' not found\n", test_name);
-	else
-		printf("Failures: %d\n", uts->fail_count);
+	of_root = gd_of_root();
+	ut_run_list("driver model", "dm_test_", tests, n_ents, test_name);
 
 	/* Put everything back to normal so that sandbox works as expected */
-	gd_set_of_root(uts->of_root);
+	gd_set_of_root(of_root);
 	gd->dm_root = NULL;
 	ut_assertok(dm_init(CONFIG_IS_ENABLED(OF_LIVE)));
 	dm_scan_plat(false);
diff --git a/test/test-main.c b/test/test-main.c
index 139fc1f6f18..16c0d13ea55 100644
--- a/test/test-main.c
+++ b/test/test-main.c
@@ -111,6 +111,38 @@ static bool ut_test_run_on_flattree(struct unit_test *test)
 	return !strstr(fname, "video") || strstr(test->name, "video_base");
 }
 
+/**
+ * test_matches() - Check if a test should be run
+ *
+ * This checks if the a test should be run. In the normal case of running all
+ * tests, @select_name is NULL.
+ *
+ * @prefix: String prefix for the tests. Any tests that have this prefix will be
+ *	printed without the prefix, so that it is easier to see the unique part
+ *	of the test name. If NULL, no prefix processing is done
+ * @test_name: Name of current test
+ * @select_name: Name of test to run (or NULL for all)
+ * @return true to run this test, false to skip it
+ */
+static bool test_matches(const char *prefix, const char *test_name,
+			 const char *select_name)
+{
+	if (!select_name)
+		return true;
+
+	if (!strcmp(test_name, select_name))
+		return true;
+
+	/* All tests have this prefix */
+	if (prefix && !strncmp(test_name, prefix, strlen(prefix)))
+		test_name += strlen(prefix);
+
+	if (!strcmp(test_name, select_name))
+		return true;
+
+	return false;
+}
+
 /**
  * test_pre_run() - Handle any preparation needed to run a test
  *
@@ -213,8 +245,25 @@ static int ut_run_test(struct unit_test_state *uts, struct unit_test *test,
 	return 0;
 }
 
-int ut_run_test_live_flat(struct unit_test_state *uts, struct unit_test *test,
-			  const char *name)
+/**
+ * ut_run_test_live_flat() - Run a test with both live and flat tree
+ *
+ * This calls ut_run_test() with livetree enabled, which is the standard setup
+ * for runnig tests. Then, for driver model test, it calls it again with
+ * livetree disabled. This allows checking of flattree being used when OF_LIVE
+ * is enabled, as is the case in U-Boot proper before relocation, as well as in
+ * SPL.
+ *
+ * @uts: Test state to update. The caller should ensure that this is zeroed for
+ *	the first call to this function. On exit, @uts->fail_count is
+ *	incremented by the number of failures (0, one hopes)
+ * @test: Test to run
+ * @name: Name of test, possibly skipping a prefix that should not be displayed
+ * @return 0 if all tests passed, -EAGAIN if the test should be skipped, -1 if
+ *	any failed
+ */
+static int ut_run_test_live_flat(struct unit_test_state *uts,
+				 struct unit_test *test, const char *name)
 {
 	int runs;
 
@@ -242,24 +291,39 @@ int ut_run_test_live_flat(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)
+/**
+ * ut_run_tests() - Run a set of tests
+ *
+ * This runs the tests, handling any preparation and clean-up needed. It prints
+ * the name of each test before running it.
+ *
+ * @uts: Test state to update. The caller should ensure that this is zeroed for
+ *	the first call to this function. On exit, @uts->fail_count is
+ *	incremented by the number of failures (0, one hopes)
+ * @prefix: String prefix for the tests. Any tests that have this prefix will be
+ *	printed without the prefix, so that it is easier to see the unique part
+ *	of the test name. If NULL, no prefix processing is done
+ * @tests: List of tests to run
+ * @count: Number of tests to run
+ * @select_name: Name of a single test to run (from the list provided). If NULL
+ *	then all tests are run
+ * @return 0 if all tests passed, -ENOENT if test @select_name was not found,
+ *	-EBADF if any failed
+ */
+static int ut_run_tests(struct unit_test_state *uts, const char *prefix,
+			struct unit_test *tests, int count,
+			const char *select_name)
 {
 	struct unit_test *test;
-	int prefix_len = prefix ? strlen(prefix) : 0;
 	int found = 0;
 
 	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))
-			test_name += prefix_len;
-
-		if (select_name && strcmp(select_name, test_name))
+		if (!test_matches(prefix, test_name, select_name))
 			continue;
-		ret = ut_run_test_live_flat(uts, test, test_name);
+		ret = ut_run_test_live_flat(uts, test, select_name);
 		found++;
 		if (ret == -EAGAIN)
 			continue;
@@ -281,6 +345,7 @@ int ut_run_list(const char *category, const char *prefix,
 	if (!select_name)
 		printf("Running %d %s tests\n", count, category);
 
+	uts.of_root = gd_of_root();
 	ret = ut_run_tests(&uts, prefix, tests, count, select_name);
 
 	if (ret == -ENOENT)
-- 
2.30.0.365.g02bc693789-goog

  parent reply	other threads:[~2021-02-03 12:44 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-03 12:44 [PATCH v3 00/41] test: Refactor tests to have a single test runner Simon Glass
2021-02-03 12:44 ` [PATCH v3 01/41] doc: Tidy up testing section Simon Glass
2021-02-03 12:44 ` [PATCH v3 02/41] doc: Document make tcheck Simon Glass
2021-02-03 12:44 ` [PATCH v3 03/41] sandbox: Drop the 'starting...' message unless testing Simon Glass
2021-02-03 12:44 ` [PATCH v3 04/41] test: Re-enable test_ofplatdata Simon Glass
2021-02-03 12:44 ` [PATCH v3 05/41] doc: Explain how to run tests without pytest Simon Glass
2021-02-03 12:44 ` [PATCH v3 06/41] doc: Document how sandbox_spl_tests are run Simon Glass
2021-02-03 14:40   ` Pratyush Yadav
2021-02-03 12:44 ` [PATCH v3 07/41] test: Correct setexpr test prefix Simon Glass
2021-02-03 12:44 ` [PATCH v3 08/41] test: Mark all driver model tests with a flag Simon Glass
2021-02-03 12:44 ` [PATCH v3 09/41] test: Rename test-main.c to test-dm.c Simon Glass
2021-02-03 12:44 ` [PATCH v3 10/41] test: Add an overall test runner Simon Glass
2021-02-03 12:44 ` [PATCH v3 11/41] test: Create pre/post-run functions Simon Glass
2021-02-03 12:44 ` [PATCH v3 12/41] test: Call test_pre/post_run() from driver model tests Simon Glass
2021-02-03 12:44 ` [PATCH v3 13/41] test: Move dm_extended_scan() to test_pre_run() Simon Glass
2021-02-03 12:44 ` [PATCH v3 14/41] test: Move do_autoprobe() " Simon Glass
2021-02-03 12:44 ` [PATCH v3 15/41] test: Move dm_scan_plat() " Simon Glass
2021-02-03 12:44 ` [PATCH v3 16/41] test: Drop mallinfo() work-around Simon Glass
2021-02-03 12:44 ` [PATCH v3 17/41] test: Move console silencing to test_pre_run() Simon Glass
2021-02-03 12:44 ` [PATCH v3 18/41] test: Move delay skipping " Simon Glass
2021-02-03 12:44 ` [PATCH v3 19/41] test: Handle driver model reinit in test_pre_run() Simon Glass
2021-02-03 12:44 ` [PATCH v3 20/41] test: Drop struct dm_test_state Simon Glass
2021-02-03 12:44 ` [PATCH v3 21/41] test: Move dm_test_init() into test-main.c Simon Glass
2021-02-03 12:44 ` [PATCH v3 22/41] test: Move dm_test_destroy() " Simon Glass
2021-02-03 12:44 ` [PATCH v3 23/41] test: Move test running into a separate function Simon Glass
2021-02-03 12:44 ` [PATCH v3 24/41] test: Use ut_run_test() to run driver model tests Simon Glass
2021-02-03 12:44 ` [PATCH v3 25/41] test: Drop dm_do_test() Simon Glass
2021-02-03 12:44 ` [PATCH v3 26/41] test: Add ut_run_test_live_flat() to run tests twice Simon Glass
2021-02-03 12:44 ` [PATCH v3 27/41] test: Use a local variable for test state Simon Glass
2021-02-03 12:44 ` Simon Glass [this message]
2021-02-03 12:44 ` [PATCH v3 29/41] test: Use return values in dm_test_run() Simon Glass
2021-02-03 12:44 ` [PATCH v3 30/41] test: Move the devicetree check into ut_run_list() Simon Glass
2021-02-03 12:44 ` [PATCH v3 31/41] test: Move restoring of driver model state to ut_run_list() Simon Glass
2021-02-03 12:44 ` [PATCH v3 32/41] test: log: Rename log main test file to log_ut.c Simon Glass
2021-02-03 12:44 ` [PATCH v3 33/41] test: Add a macros for finding tests in linker_lists Simon Glass
2021-02-03 12:44 ` [PATCH v3 34/41] test: Rename all linker lists to have a ut_ prefix Simon Glass
2021-02-03 12:44 ` [PATCH v3 35/41] test: Allow SPL to run any available test Simon Glass
2021-02-03 12:44 ` [PATCH v3 36/41] sandbox: Update os_find_u_boot() to find the .img file Simon Glass
2021-02-03 12:44 ` [PATCH v3 37/41] spl: Convert spl_fit to work with sandbox Simon Glass
2021-02-03 12:44 ` [PATCH v3 38/41] doc: Move coccinelle into its own section Simon Glass
2021-02-03 12:44 ` [PATCH v3 39/41] spl: test: Add a test for spl_load_simple_fit() Simon Glass
2021-02-03 12:44 ` [PATCH v3 40/41] test: sandbox: Move sandbox test docs into doc/develop Simon Glass
2021-02-03 12:44 ` [PATCH v3 41/41] doc: Explain briefly how to write new tests Simon Glass
2021-03-03 19:37 ` [PATCH v3 00/41] test: Refactor tests to have a single test runner Tom Rini
2021-03-03 20:18   ` Tom Rini
2021-03-03 20:37     ` Tom Rini
2021-03-04  3:06       ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210203124447.2458527-28-sjg@chromium.org \
    --to=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.