[U-Boot,08/12] binman: Allow a single test to be executed

Message ID 20180516015258.187295-9-sjg@chromium.org
State Superseded
Delegated to: Simon Glass
Headers show
Series
  • binman: A few more features
Related show

Commit Message

Simon Glass May 16, 2018, 1:52 a.m.
Provide an easy way to execute a single binman test by specifying it on
the command line.

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

 tools/binman/binman.py | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

Patch

diff --git a/tools/binman/binman.py b/tools/binman/binman.py
index d49402a977e..31b045337d2 100755
--- a/tools/binman/binman.py
+++ b/tools/binman/binman.py
@@ -27,8 +27,14 @@  import cmdline
 import command
 import control
 
-def RunTests(debug):
-    """Run the functional tests and any embedded doctests"""
+def RunTests(debug, args):
+    """Run the functional tests and any embedded doctests
+
+    Args:
+        debug: True to enable debugging, which shows a full stack trace on error
+        args: List of positional args provided to binman. This can hold a test
+            name to execute (as in 'binman -t testSections', for example)
+    """
     import elf_test
     import entry_test
     import fdt_test
@@ -50,9 +56,16 @@  def RunTests(debug):
     # 'entry' module.
     suite = unittest.TestLoader().loadTestsFromTestCase(entry_test.TestEntry)
     suite.run(result)
+    test_name = args and args[0] or None
     for module in (ftest.TestFunctional, fdt_test.TestFdt, elf_test.TestElf,
                    image_test.TestImage):
-        suite = unittest.TestLoader().loadTestsFromTestCase(module)
+        if test_name:
+            try:
+                suite = unittest.TestLoader().loadTestsFromName(args[0], module)
+            except AttributeError:
+                continue
+        else:
+            suite = unittest.TestLoader().loadTestsFromTestCase(module)
         suite.run(result)
 
     print result
@@ -111,7 +124,7 @@  def RunBinman(options, args):
         sys.tracebacklimit = 0
 
     if options.test:
-        ret_code = RunTests(options.debug)
+        ret_code = RunTests(options.debug, args[1:])
 
     elif options.test_coverage:
         RunTestCoverage()