[PATCH v8 11/13] vpl: Support running vpl tests

Simon Glass sjg at chromium.org
Sat Apr 30 08:56:55 CEST 2022


Add support for these to the pytest system.

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

Changes in v8:
- Add new patch to support running vpl tests

 test/py/conftest.py               |  7 +++++--
 test/py/tests/test_vpl.py         | 34 +++++++++++++++++++++++++++++++
 test/py/u_boot_console_sandbox.py |  7 ++++++-
 3 files changed, 45 insertions(+), 3 deletions(-)
 create mode 100644 test/py/tests/test_vpl.py

diff --git a/test/py/conftest.py b/test/py/conftest.py
index 16e445cd8ee..2ba34479e03 100644
--- a/test/py/conftest.py
+++ b/test/py/conftest.py
@@ -322,8 +322,11 @@ def pytest_generate_tests(metafunc):
         if fn == 'ut_subtest':
             generate_ut_subtest(metafunc, fn, '/u-boot.sym')
             continue
-        if fn == 'ut_spl_subtest':
-            generate_ut_subtest(metafunc, fn, '/spl/u-boot-spl.sym')
+        m_subtest = re.match('ut_(.)pl_subtest', fn)
+        if m_subtest:
+            spl_name = m_subtest.group(1)
+            generate_ut_subtest(
+                metafunc, fn, f'/{spl_name}pl/u-boot-{spl_name}pl.sym')
             continue
         generate_config(metafunc, fn)
 
diff --git a/test/py/tests/test_vpl.py b/test/py/tests/test_vpl.py
new file mode 100644
index 00000000000..4af578b9173
--- /dev/null
+++ b/test/py/tests/test_vpl.py
@@ -0,0 +1,34 @@
+# SPDX-License-Identifier: GPL-2.0
+# Copyright 2022 Google LLC
+# Written by Simon Glass <sjg at chromium.org>
+
+import os.path
+import pytest
+
+def test_vpl(u_boot_console, ut_vpl_subtest):
+    """Execute a "ut" subtest.
+
+    The subtests are collected in function generate_ut_subtest() from linker
+    generated lists by applying a regular expression to the lines of file
+    vpl/u-boot-vpl.sym. The list entries are created using the C macro
+    UNIT_TEST().
+
+    Strict naming conventions have to be followed to match the regular
+    expression. Use UNIT_TEST(foo_test_bar, _flags, foo_test) for a test bar in
+    test suite foo that can be executed via command 'ut foo bar' and is
+    implemented in C function foo_test_bar().
+
+    Args:
+        u_boot_console (ConsoleBase): U-Boot console
+        ut_subtest (str): VPL test to be executed (e.g. 'dm platdata_phandle')
+    """
+    try:
+        cons = u_boot_console
+        cons.restart_uboot_with_flags(['-u', '-k', ut_vpl_subtest.split()[1]])
+        output = cons.get_spawn_output().replace('\r', '')
+        assert 'Failures: 0' in output
+    finally:
+        # Restart afterward in case a non-VPL test is run next. This should not
+        # happen since VPL tests are run in their own invocation of test.py, but
+        # the cost of doing this is not too great at present.
+        u_boot_console.restart_uboot()
diff --git a/test/py/u_boot_console_sandbox.py b/test/py/u_boot_console_sandbox.py
index b79ec817957..27c6db8d719 100644
--- a/test/py/u_boot_console_sandbox.py
+++ b/test/py/u_boot_console_sandbox.py
@@ -44,7 +44,12 @@ class ConsoleSandbox(ConsoleBase):
 
         bcfg = self.config.buildconfig
         config_spl = bcfg.get('config_spl', 'n') == 'y'
-        fname = '/spl/u-boot-spl' if config_spl else '/u-boot'
+        config_vpl = bcfg.get('config_vpl', 'n') == 'y'
+        if config_vpl:
+            # Run TPL first, which runs VPL
+            fname = '/tpl/u-boot-tpl'
+        else:
+            fname = '/spl/u-boot-spl' if config_spl else '/u-boot'
         print(fname)
         cmd = []
         if self.config.gdbserver:
-- 
2.36.0.464.gb9c8b46e94-goog



More information about the U-Boot mailing list