dm: core: Run tests with both livetree and flat tree
authorSimon Glass <sjg@chromium.org>
Fri, 19 May 2017 02:09:17 +0000 (20:09 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 1 Jun 2017 13:03:10 +0000 (07:03 -0600)
Some tests require either livetree or flat tree. Add flags to allow the
tests to specify this. Adjust the test runner to run with livetree (if
supported) and then flat tree.

Some video tests are quite slow and running on flat tree adds little extra
test value, so run these on livetree only.

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

index cba504909acae50f337989c0ab2743952f86050a..cecee26f3364ca89c58f5f59b91c9a902683cc5d 100644 (file)
@@ -150,6 +150,8 @@ enum {
        DM_TESTF_SCAN_PDATA     = 1 << 0,       /* test needs platform data */
        DM_TESTF_PROBE_TEST     = 1 << 1,       /* probe test uclass */
        DM_TESTF_SCAN_FDT       = 1 << 2,       /* scan device tree */
+       DM_TESTF_FLAT_TREE      = 1 << 3,       /* test needs flat DT */
+       DM_TESTF_LIVE_TREE      = 1 << 4,       /* needs live device tree */
 };
 
 /* Declare a new driver model test */
index e3e821c6ea8a9a2183ba9f100aae643af9d8ed65..646dbfd486459bd5558407ed74e21305bbe842a9 100644 (file)
  * @fail_count: Number of tests that failed
  * @start: Store the starting mallinfo when doing leak test
  * @priv: A pointer to some other info some suites want to track
+ * @of_root: Record of the livetree root node (used for setting up tests)
  */
 struct unit_test_state {
        int fail_count;
        struct mallinfo start;
        void *priv;
+       struct device_node *of_root;
 };
 
 /**
index 88ef267458e57d556a32fa56114ae2f73cfdeecf..9d88d31467c464aeeba542b8e71a378399ee0498 100644 (file)
@@ -110,6 +110,21 @@ static int dm_do_test(struct unit_test_state *uts, struct unit_test *test,
        return 0;
 }
 
+/**
+ * dm_test_run_on_flattree() - Check if we should run a test with flat DT
+ *
+ * This skips long/slow tests where there is not much value in running a flat
+ * DT test in addition to a live DT test.
+ *
+ * @return true to run the given test on the flat device tree
+ */
+static bool dm_test_run_on_flattree(struct unit_test *test)
+{
+       const char *fname = strrchr(test->file, '/') + 1;
+
+       return !strstr(fname, "video") || strstr(test->name, "video_base");
+}
+
 static int dm_test_main(const char *test_name)
 {
        struct unit_test *tests = ll_entry_start(struct unit_test, dm_test);
@@ -140,14 +155,33 @@ static int dm_test_main(const char *test_name)
 #endif
        for (test = tests; test < tests + n_ents; test++) {
                const char *name = test->name;
+               int runs;
 
                /* All tests have this prefix */
                if (!strncmp(name, "dm_test_", 8))
                        name += 8;
                if (test_name && strcmp(test_name, name))
                        continue;
-               ut_assertok(dm_do_test(uts, test, false));
-               run_count++;
+
+               /* Run with the live tree if possible */
+               runs = 0;
+               if (IS_ENABLED(CONFIG_OF_LIVE)) {
+                       if (!(test->flags & DM_TESTF_FLAT_TREE)) {
+                               ut_assertok(dm_do_test(uts, test, true));
+                               runs++;
+                       }
+               }
+
+               /*
+                * Run with the flat tree if we couldn't run it with live tree,
+                * or it is a core test.
+                */
+               if (!(test->flags & DM_TESTF_LIVE_TREE) &&
+                   (!runs || dm_test_run_on_flattree(test))) {
+                       ut_assertok(dm_do_test(uts, test, false));
+                       runs++;
+               }
+               run_count += runs;
        }
 
        if (test_name && !run_count)