summaryrefslogtreecommitdiff
path: root/tools/binman
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2022-01-10 06:13:57 +0300
committerSimon Glass <sjg@chromium.org>2022-01-25 22:36:11 +0300
commit56ee85eef11e6162e2626ba644c6de459137dd23 (patch)
tree07757079f1a23c6f16c68b0fb184928f56bf9b2a /tools/binman
parente1b7e4ddb6b1a1d0b416facbd0f576dde9c404e6 (diff)
downloadu-boot-56ee85eef11e6162e2626ba644c6de459137dd23.tar.xz
binman: Enable bintool tests including cmdline processing
The tests rely on having at least 5 bintool implementions. Now that we have this, enable them. Add tests for the binman 'tool' subcommand. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools/binman')
-rw-r--r--tools/binman/ftest.py32
-rwxr-xr-xtools/binman/main.py7
2 files changed, 36 insertions, 3 deletions
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 179326c42a..92bcb74088 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -17,6 +17,8 @@ import struct
import sys
import tempfile
import unittest
+import unittest.mock
+import urllib.error
from binman import bintool
from binman import cbfs_util
@@ -4991,6 +4993,36 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
err = stderr.getvalue()
self.assertRegex(err, "Image 'main-section'.*faked.*: blob-ext-list")
+ def testListBintools(self):
+ args = ['tool', '--list']
+ with test_util.capture_sys_output() as (stdout, _):
+ self._DoBinman(*args)
+ out = stdout.getvalue().splitlines()
+ self.assertTrue(len(out) >= 2)
+
+ def testFetchBintools(self):
+ def fail_download(url):
+ """Take the tools.Download() function by raising an exception"""
+ raise urllib.error.URLError('my error')
+
+ args = ['tool']
+ with self.assertRaises(ValueError) as e:
+ self._DoBinman(*args)
+ self.assertIn("Invalid arguments to 'tool' subcommand",
+ str(e.exception))
+
+ args = ['tool', '--fetch']
+ with self.assertRaises(ValueError) as e:
+ self._DoBinman(*args)
+ self.assertIn('Please specify bintools to fetch', str(e.exception))
+
+ args = ['tool', '--fetch', '_testing']
+ with unittest.mock.patch.object(tools, 'Download',
+ side_effect=fail_download):
+ with test_util.capture_sys_output() as (stdout, _):
+ self._DoBinman(*args)
+ self.assertIn('failed to fetch with all methods', stdout.getvalue())
+
if __name__ == "__main__":
unittest.main()
diff --git a/tools/binman/main.py b/tools/binman/main.py
index 35944f314a..dcf20290f2 100755
--- a/tools/binman/main.py
+++ b/tools/binman/main.py
@@ -68,6 +68,7 @@ def RunTests(debug, verbosity, processes, test_preserve_dirs, args, toolpath):
name to execute (as in 'binman test testSections', for example)
toolpath: List of paths to use for tools
"""
+ from binman import bintool_test
from binman import cbfs_util_test
from binman import elf_test
from binman import entry_test
@@ -85,9 +86,9 @@ def RunTests(debug, verbosity, processes, test_preserve_dirs, args, toolpath):
test_util.RunTestSuites(
result, debug, verbosity, test_preserve_dirs, processes, test_name,
toolpath,
- [entry_test.TestEntry, ftest.TestFunctional, fdt_test.TestFdt,
- elf_test.TestElf, image_test.TestImage, cbfs_util_test.TestCbfs,
- fip_util_test.TestFip])
+ [bintool_test.TestBintool, entry_test.TestEntry, ftest.TestFunctional,
+ fdt_test.TestFdt, elf_test.TestElf, image_test.TestImage,
+ cbfs_util_test.TestCbfs, fip_util_test.TestFip])
return test_util.ReportResult('binman', test_name, result)