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
|
self.uncomp_data = indata
|
||||||
if self.compress != 'none':
|
if self.compress != 'none':
|
||||||
self.uncomp_size = len(indata)
|
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:
|
else:
|
||||||
data = indata
|
data = indata
|
||||||
return data
|
return data
|
||||||
@ -1133,8 +1137,12 @@ features to produce new behaviours.
|
|||||||
Decompressed data
|
Decompressed data
|
||||||
"""
|
"""
|
||||||
if self.compress != 'none':
|
if self.compress != 'none':
|
||||||
data = self.comp_bintool.decompress(indata)
|
if self.comp_bintool.is_present():
|
||||||
self.uncomp_size = len(data)
|
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:
|
else:
|
||||||
data = indata
|
data = indata
|
||||||
self.uncomp_data = data
|
self.uncomp_data = data
|
||||||
|
@ -105,6 +105,15 @@ class TestEntry(unittest.TestCase):
|
|||||||
self.assertTrue(isinstance(ent, Entry_blob))
|
self.assertTrue(isinstance(ent, Entry_blob))
|
||||||
self.assertEquals('missing', ent.etype)
|
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__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
@ -4422,6 +4422,15 @@ class TestFunctional(unittest.TestCase):
|
|||||||
}
|
}
|
||||||
self.assertEqual(expected, props)
|
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):
|
def testCompressExtra(self):
|
||||||
"""Test compression of a section with no fixed size"""
|
"""Test compression of a section with no fixed size"""
|
||||||
self._CheckLz4()
|
self._CheckLz4()
|
||||||
|
Loading…
Reference in New Issue
Block a user