binman: Allow entry args to be required
If an entry argument is needed by an entry but the entry argument is not present, then a strange error can occur when trying to read the file. Fix this by allowing arguments to be required. Select this option for the cros-ec-rw entry. If a filename is provided in the node, allow that to be used. Also tidy up a few related tests to make the error string easier to find, and fully ignore unused return values. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
dc447b6b3f
commit
3decfa3a87
@ -60,7 +60,7 @@ Entry: blob-named-by-arg: A blob entry which gets its filename property from its
|
||||
|
||||
Properties / Entry arguments:
|
||||
- <xxx>-path: Filename containing the contents of this entry (optional,
|
||||
defaults to 0)
|
||||
defaults to None)
|
||||
|
||||
where <xxx> is the blob_fname argument to the constructor.
|
||||
|
||||
@ -691,6 +691,11 @@ Properties / Entry arguments: (see binman README for more information)
|
||||
name-prefix: Adds a prefix to the name of every entry in the section
|
||||
when writing out the map
|
||||
|
||||
Properties:
|
||||
_allow_missing: True if this section permits external blobs to be
|
||||
missing their contents. The second will produce an image but of
|
||||
course it will not work.
|
||||
|
||||
Since a section is also an entry, it inherits all the properies of entries
|
||||
too.
|
||||
|
||||
|
@ -17,7 +17,7 @@ class Entry_blob_named_by_arg(Entry_blob):
|
||||
|
||||
Properties / Entry arguments:
|
||||
- <xxx>-path: Filename containing the contents of this entry (optional,
|
||||
defaults to 0)
|
||||
defaults to None)
|
||||
|
||||
where <xxx> is the blob_fname argument to the constructor.
|
||||
|
||||
@ -28,7 +28,9 @@ class Entry_blob_named_by_arg(Entry_blob):
|
||||
|
||||
See cros_ec_rw for an example of this.
|
||||
"""
|
||||
def __init__(self, section, etype, node, blob_fname):
|
||||
def __init__(self, section, etype, node, blob_fname, required=False):
|
||||
super().__init__(section, etype, node)
|
||||
self._filename, = self.GetEntryArgsOrProps(
|
||||
[EntryArg('%s-path' % blob_fname, str)])
|
||||
filename, = self.GetEntryArgsOrProps(
|
||||
[EntryArg('%s-path' % blob_fname, str)], required=required)
|
||||
if filename:
|
||||
self._filename = filename
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
from binman.etype.blob_named_by_arg import Entry_blob_named_by_arg
|
||||
|
||||
|
||||
class Entry_cros_ec_rw(Entry_blob_named_by_arg):
|
||||
"""A blob entry which contains a Chromium OS read-write EC image
|
||||
|
||||
@ -18,5 +17,5 @@ class Entry_cros_ec_rw(Entry_blob_named_by_arg):
|
||||
updating the EC on startup via software sync.
|
||||
"""
|
||||
def __init__(self, section, etype, node):
|
||||
super().__init__(section, etype, node, 'cros-ec-rw')
|
||||
super().__init__(section, etype, node, 'cros-ec-rw', required=True)
|
||||
self.external = True
|
||||
|
@ -1382,8 +1382,9 @@ class TestFunctional(unittest.TestCase):
|
||||
}
|
||||
with self.assertRaises(ValueError) as e:
|
||||
self._DoReadFileDtb('064_entry_args_required.dts')
|
||||
self.assertIn("Node '/binman/_testing': Missing required "
|
||||
'properties/entry args: test-str-arg, test-int-fdt, test-int-arg',
|
||||
self.assertIn("Node '/binman/_testing': "
|
||||
'Missing required properties/entry args: test-str-arg, '
|
||||
'test-int-fdt, test-int-arg',
|
||||
str(e.exception))
|
||||
|
||||
def testEntryArgsInvalidFormat(self):
|
||||
@ -1487,8 +1488,7 @@ class TestFunctional(unittest.TestCase):
|
||||
entry_args = {
|
||||
'cros-ec-rw-path': 'ecrw.bin',
|
||||
}
|
||||
data, _, _, _ = self._DoReadFileDtb('068_blob_named_by_arg.dts',
|
||||
entry_args=entry_args)
|
||||
self._DoReadFileDtb('068_blob_named_by_arg.dts', entry_args=entry_args)
|
||||
|
||||
def testFill(self):
|
||||
"""Test for an fill entry type"""
|
||||
@ -3523,5 +3523,12 @@ class TestFunctional(unittest.TestCase):
|
||||
err = stderr.getvalue()
|
||||
self.assertRegex(err, "Image 'main-section'.*missing.*: blob-ext")
|
||||
|
||||
def testBlobNamedByArgMissing(self):
|
||||
"""Test handling of a missing entry arg"""
|
||||
with self.assertRaises(ValueError) as e:
|
||||
self._DoReadFile('068_blob_named_by_arg.dts')
|
||||
self.assertIn("Missing required properties/entry args: cros-ec-rw-path",
|
||||
str(e.exception))
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
Loading…
Reference in New Issue
Block a user