binman: Support missing compression tools
Handle missing compression tools by returning empty data and record missing bintool. Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
ec7d27d3a8
commit
c3665a896e
@ -1118,7 +1118,11 @@ features to produce new behaviours.
|
||||
self.uncomp_data = indata
|
||||
if self.compress != 'none':
|
||||
self.uncomp_size = len(indata)
|
||||
data = self.comp_bintool.compress(indata)
|
||||
if self.comp_bintool.is_present():
|
||||
data = self.comp_bintool.compress(indata)
|
||||
else:
|
||||
self.record_missing_bintool(self.comp_bintool)
|
||||
data = tools.get_bytes(0, 1024)
|
||||
else:
|
||||
data = indata
|
||||
return data
|
||||
@ -1133,8 +1137,12 @@ features to produce new behaviours.
|
||||
Decompressed data
|
||||
"""
|
||||
if self.compress != 'none':
|
||||
data = self.comp_bintool.decompress(indata)
|
||||
self.uncomp_size = len(data)
|
||||
if self.comp_bintool.is_present():
|
||||
data = self.comp_bintool.decompress(indata)
|
||||
self.uncomp_size = len(data)
|
||||
else:
|
||||
self.record_missing_bintool(self.comp_bintool)
|
||||
data = tools.get_bytes(0, 1024)
|
||||
else:
|
||||
data = indata
|
||||
self.uncomp_data = data
|
||||
|
@ -105,6 +105,15 @@ class TestEntry(unittest.TestCase):
|
||||
self.assertTrue(isinstance(ent, Entry_blob))
|
||||
self.assertEquals('missing', ent.etype)
|
||||
|
||||
def testDecompressData(self):
|
||||
"""Test the DecompressData() method of the base class"""
|
||||
base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
|
||||
base.compress = 'lz4'
|
||||
bintools = {}
|
||||
base.comp_bintool = base.AddBintool(bintools, '_testing')
|
||||
self.assertEquals(tools.get_bytes(0, 1024), base.CompressData(b'abc'))
|
||||
self.assertEquals(tools.get_bytes(0, 1024), base.DecompressData(b'abc'))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
@ -4422,6 +4422,15 @@ class TestFunctional(unittest.TestCase):
|
||||
}
|
||||
self.assertEqual(expected, props)
|
||||
|
||||
def testLz4Missing(self):
|
||||
"""Test that binman still produces an image if lz4 is missing"""
|
||||
with test_util.capture_sys_output() as (_, stderr):
|
||||
self._DoTestFile('185_compress_section.dts',
|
||||
force_missing_bintools='lz4')
|
||||
err = stderr.getvalue()
|
||||
self.assertRegex(err,
|
||||
"Image 'main-section'.*missing bintools.*: lz4")
|
||||
|
||||
def testCompressExtra(self):
|
||||
"""Test compression of a section with no fixed size"""
|
||||
self._CheckLz4()
|
||||
|
Loading…
Reference in New Issue
Block a user