summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.azure-pipelines.yml7
-rw-r--r--.gitlab-ci.yml6
-rw-r--r--tools/binman/etype/fit.py2
-rw-r--r--tools/binman/etype/section.py17
-rw-r--r--tools/binman/ftest.py7
-rwxr-xr-xtools/binman/main.py8
-rw-r--r--tools/binman/requirements.txt1
-rw-r--r--tools/binman/state.py3
-rw-r--r--tools/binman/test/184_compress_section_size.dts1
-rw-r--r--tools/u_boot_pylib/test_util.py18
10 files changed, 40 insertions, 30 deletions
diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml
index e5a7ce93837..cb787d32f14 100644
--- a/.azure-pipelines.yml
+++ b/.azure-pipelines.yml
@@ -144,8 +144,11 @@ stages:
export PATH=${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}
./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w --board tools-only
set -ex
- ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools tool -f missing
- ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test
+ export TOOLPATH="--toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools --toolpath /opt/coreboot"
+ ./tools/binman/binman ${TOOLPATH} tool -f missing
+ ./tools/binman/binman ${TOOLPATH} test
+ # Avoid "Permission denied: 'cov'" error by using a temporary file
+ COVERAGE_FILE=/tmp/.coverage ./tools/binman/binman ${TOOLPATH} test -T
./tools/buildman/buildman -t
./tools/dtoc/dtoc -t
./tools/patman/patman test
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2159eaf13de..5f3418e482f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -196,8 +196,10 @@ Run binman, buildman, dtoc, Kconfig and patman testsuites:
./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w
--board tools-only;
set -e;
- ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools tool -f missing;
- ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test;
+ export TOOLPATH="--toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools --toolpath /opt/coreboot";
+ ./tools/binman/binman ${TOOLPATH} tool -f missing;
+ ./tools/binman/binman ${TOOLPATH} test;
+ ./tools/binman/binman ${TOOLPATH} test -T;
./tools/buildman/buildman -t;
./tools/dtoc/dtoc -t;
./tools/patman/patman test;
diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py
index 803fb66ea83..ed3cac4ee7e 100644
--- a/tools/binman/etype/fit.py
+++ b/tools/binman/etype/fit.py
@@ -562,8 +562,6 @@ class Entry_fit(Entry_section):
for subnode in node.subnodes:
if (subnode.name.startswith('signature') or
subnode.name.startswith('cipher')):
- if subnode.props.get('key-name-hint') is None:
- continue
hint = subnode.props['key-name-hint'].value
name = tools.get_input_filename(
f"{hint}.key" if subnode.name.startswith('signature')
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index 5e11cf58d28..4c4c8c417f8 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -662,23 +662,6 @@ class Entry_section(Entry):
else:
raise ValueError("%s: No such property '%s'" % (msg, prop_name))
- def GetRootSkipAtStart(self):
- """Get the skip-at-start value for the top-level section
-
- This is used to find out the starting offset for root section that
- contains this section. If this is a top-level section then it returns
- the skip-at-start offset for this section.
-
- This is used to get the absolute position of section within the image.
-
- Returns:
- Integer skip-at-start value for the root section containing this
- section
- """
- if self.section:
- return self.section.GetRootSkipAtStart()
- return self._skip_at_start
-
def GetStartOffset(self):
"""Get the start offset for this section
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 948fcc02259..92df2a03650 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -4613,6 +4613,8 @@ class TestFunctional(unittest.TestCase):
dtb.Scan()
props = self._GetPropTree(dtb, ['offset', 'image-pos', 'size',
'uncomp-size'])
+ data = data[:0x30]
+ data = data.rstrip(b'\xff')
orig = self._decompress(data)
self.assertEqual(COMPRESS_DATA + U_BOOT_DATA, orig)
expected = {
@@ -6218,8 +6220,9 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
def testCompUtilPadding(self):
"""Test padding of compression algorithms"""
- # Skip zstd because it doesn't support padding
- for bintool in [v for k,v in self.comp_bintools.items() if k != 'zstd']:
+ # Skip zstd and lz4 because they doesn't support padding
+ for bintool in [v for k,v in self.comp_bintools.items()
+ if not k in ['zstd', 'lz4']]:
self._CheckBintool(bintool)
data = bintool.compress(COMPRESS_DATA)
self.assertNotEqual(COMPRESS_DATA, data)
diff --git a/tools/binman/main.py b/tools/binman/main.py
index 619840e7d55..326f5c93155 100755
--- a/tools/binman/main.py
+++ b/tools/binman/main.py
@@ -94,10 +94,16 @@ def RunTestCoverage(toolpath, build_dir, args):
if toolpath:
for path in toolpath:
extra_args += ' --toolpath %s' % path
+
+ # Some files unfortunately don't thave the required test coverage. This will
+ # eventually be fixed, but exclude them for now
test_util.run_test_coverage('tools/binman/binman', None,
['*test*', '*main.py', 'tools/patman/*', 'tools/dtoc/*',
'tools/u_boot_pylib/*'],
- build_dir, all_set, extra_args or None, args=args)
+ build_dir, all_set, extra_args or None, args=args,
+ allow_failures=['tools/binman/btool/cst.py',
+ 'tools/binman/etype/nxp_imx8mcst.py',
+ 'tools/binman/etype/nxp_imx8mimage.py'])
def RunBinman(args):
"""Main entry point to binman once arguments are parsed
diff --git a/tools/binman/requirements.txt b/tools/binman/requirements.txt
index f068ef75a30..7db72e888e3 100644
--- a/tools/binman/requirements.txt
+++ b/tools/binman/requirements.txt
@@ -1,3 +1,4 @@
+coverage==7.8.0
importlib_resources==6.5.2
jsonschema==4.23.0
pycryptodomex==3.21.0
diff --git a/tools/binman/state.py b/tools/binman/state.py
index 6772d3678fe..f4d885c772a 100644
--- a/tools/binman/state.py
+++ b/tools/binman/state.py
@@ -411,8 +411,7 @@ def CheckSetHashValue(node, get_data_func):
m = hashlib.sha256()
m.update(get_data_func())
data = m.digest()
- if data is None:
- raise ValueError(f"Node '{node.path}': Unknown hash algorithm '{algo}'")
+ assert data
for n in GetUpdateNodes(hash_node):
n.SetData('value', data)
diff --git a/tools/binman/test/184_compress_section_size.dts b/tools/binman/test/184_compress_section_size.dts
index 95ed30add1a..1c1dbd5f580 100644
--- a/tools/binman/test/184_compress_section_size.dts
+++ b/tools/binman/test/184_compress_section_size.dts
@@ -6,6 +6,7 @@
section {
size = <0x30>;
compress = "lz4";
+ pad-byte = <0xff>;
blob {
filename = "compress";
};
diff --git a/tools/u_boot_pylib/test_util.py b/tools/u_boot_pylib/test_util.py
index dd671965263..4835847bfc6 100644
--- a/tools/u_boot_pylib/test_util.py
+++ b/tools/u_boot_pylib/test_util.py
@@ -8,6 +8,7 @@ import doctest
import glob
import multiprocessing
import os
+import re
import sys
import unittest
@@ -25,7 +26,7 @@ except:
def run_test_coverage(prog, filter_fname, exclude_list, build_dir,
required=None, extra_args=None, single_thread='-P1',
- args=None):
+ args=None, allow_failures=None):
"""Run tests and check that we get 100% coverage
Args:
@@ -56,7 +57,7 @@ def run_test_coverage(prog, filter_fname, exclude_list, build_dir,
else:
glob_list = []
glob_list += exclude_list
- glob_list += ['*libfdt.py', '*site-packages*', '*dist-packages*']
+ glob_list += ['*libfdt.py', '*/site-packages/*', '*/dist-packages/*']
glob_list += ['*concurrencytest*']
test_cmd = 'test' if 'binman' in prog or 'patman' in prog else '-t'
prefix = ''
@@ -96,6 +97,19 @@ def run_test_coverage(prog, filter_fname, exclude_list, build_dir,
print('Coverage error: %s, but should be 100%%' % coverage)
ok = False
if not ok:
+ if allow_failures:
+ # for line in lines:
+ # print('.', line, re.match(r'^(tools/.*py) *\d+ *(\d+) *(\d+)%$', line))
+ lines = [re.match(r'^(tools/.*py) *\d+ *(\d+) *\d+%$', line)
+ for line in stdout.splitlines()]
+ bad = []
+ for mat in lines:
+ if mat and mat.group(2) != '0':
+ fname = mat.group(1)
+ if fname not in allow_failures:
+ bad.append(fname)
+ if not bad:
+ return
raise ValueError('Test coverage failure')