binman: Pass the toolpath to tests
[oweals/u-boot.git] / tools / binman / binman.py
index bab98826dc60495e701e331a5f7c1155412a1f2b..52c03f68c6d0c743250ae4ebb39ab26bfc62a252 100755 (executable)
@@ -46,14 +46,21 @@ except:
 import control
 import test_util
 
-def RunTests(debug, processes, args):
+def RunTests(debug, verbosity, processes, test_preserve_dirs, args, toolpath):
     """Run the functional tests and any embedded doctests
 
     Args:
         debug: True to enable debugging, which shows a full stack trace on error
+        verbosity: Verbosity level to use
+        test_preserve_dirs: True to preserve the input directory used by tests
+            so that it can be examined afterwards (only useful for debugging
+            tests). If a single test is selected (in args[0]) it also preserves
+            the output directory for this test. Both directories are displayed
+            on the command line.
+        processes: Number of processes to use to run tests (None=same as #CPUs)
         args: List of positional args provided to binman. This can hold a test
             name to execute (as in 'binman -t testSections', for example)
-        processes: Number of processes to use to run tests (None=same as #CPUs)
+        toolpath: List of paths to use for tools
     """
     import elf_test
     import entry_test
@@ -71,6 +78,11 @@ def RunTests(debug, processes, args):
     sys.argv = [sys.argv[0]]
     if debug:
         sys.argv.append('-D')
+    if verbosity:
+        sys.argv.append('-v%d' % verbosity)
+    if toolpath:
+        for path in toolpath:
+            sys.argv += ['--toolpath', path]
 
     # Run the entry tests first ,since these need to be the first to import the
     # 'entry' module.
@@ -79,6 +91,12 @@ def RunTests(debug, processes, args):
     loader = unittest.TestLoader()
     for module in (entry_test.TestEntry, ftest.TestFunctional, fdt_test.TestFdt,
                    elf_test.TestElf, image_test.TestImage):
+        # Test the test module about our arguments, if it is interested
+        if hasattr(module, 'setup_test_args'):
+            setup_test_args = getattr(module, 'setup_test_args')
+            setup_test_args(preserve_indir=test_preserve_dirs,
+                preserve_outdirs=test_preserve_dirs and test_name is not None,
+                toolpath=toolpath)
         if test_name:
             try:
                 suite.addTests(loader.loadTestsFromName(test_name, module))
@@ -153,7 +171,9 @@ def RunBinman(options, args):
         sys.tracebacklimit = 0
 
     if options.test:
-        ret_code = RunTests(options.debug, options.processes, args[1:])
+        ret_code = RunTests(options.debug, options.verbosity, options.processes,
+                            options.test_preserve_dirs, args[1:],
+                            options.toolpath)
 
     elif options.test_coverage:
         RunTestCoverage()