diff options
Diffstat (limited to 'tools/binman/entry_test.py')
-rw-r--r-- | tools/binman/entry_test.py | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/tools/binman/entry_test.py b/tools/binman/entry_test.py new file mode 100644 index 00000000000..40d74d401a2 --- /dev/null +++ b/tools/binman/entry_test.py @@ -0,0 +1,138 @@ +# SPDX-License-Identifier: GPL-2.0+ +# Copyright (c) 2016 Google, Inc +# Written by Simon Glass <sjg@chromium.org> +# +# Test for the Entry class + +import collections +import importlib +import os +import sys +import unittest + +from binman import entry +from binman.etype.blob import Entry_blob +from dtoc import fdt +from dtoc import fdt_util +from u_boot_pylib import tools + +class TestEntry(unittest.TestCase): + def setUp(self): + tools.prepare_output_dir(None) + + def tearDown(self): + tools.finalise_output_dir() + + def GetNode(self): + binman_dir = os.path.dirname(os.path.realpath(sys.argv[0])) + fname = fdt_util.EnsureCompiled( + os.path.join(binman_dir,('test/005_simple.dts'))) + dtb = fdt.FdtScan(fname) + return dtb.GetNode('/binman/u-boot') + + def _ReloadEntry(self): + global entry + if entry: + importlib.reload(entry) + else: + from binman import entry + + def testEntryContents(self): + """Test the Entry bass class""" + from binman import entry + base_entry = entry.Entry(None, None, None) + self.assertEqual(True, base_entry.ObtainContents()) + + def testUnknownEntry(self): + """Test that unknown entry types are detected""" + Node = collections.namedtuple('Node', ['name', 'path']) + node = Node('invalid-name', 'invalid-path') + with self.assertRaises(ValueError) as e: + entry.Entry.Create(None, node, node.name) + self.assertIn("Unknown entry type 'invalid-name' in node " + "'invalid-path'", str(e.exception)) + + def testUniqueName(self): + """Test Entry.GetUniqueName""" + Node = collections.namedtuple('Node', ['name', 'parent']) + base_node = Node('root', None) + base_entry = entry.Entry(None, None, base_node) + self.assertEqual('root', base_entry.GetUniqueName()) + sub_node = Node('subnode', base_node) + sub_entry = entry.Entry(None, None, sub_node) + self.assertEqual('root.subnode', sub_entry.GetUniqueName()) + + def testGetDefaultFilename(self): + """Trivial test for this base class function""" + base_entry = entry.Entry(None, None, None) + self.assertIsNone(base_entry.GetDefaultFilename()) + + def testBlobFdt(self): + """Test the GetFdtEtype() method of the blob-dtb entries""" + base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb') + self.assertIsNone(base.GetFdtEtype()) + + dtb = entry.Entry.Create(None, self.GetNode(), 'u-boot-dtb') + self.assertEqual('u-boot-dtb', dtb.GetFdtEtype()) + + def testWriteChildData(self): + """Test the WriteChildData() method of the base class""" + base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb') + self.assertTrue(base.WriteChildData(base)) + + def testReadChildData(self): + """Test the ReadChildData() method of the base class""" + base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb') + self.assertIsNone(base.ReadChildData(base)) + + def testExpandedEntry(self): + """Test use of an expanded entry when available""" + base = entry.Entry.Create(None, self.GetNode()) + self.assertEqual('u-boot', base.etype) + + expanded = entry.Entry.Create(None, self.GetNode(), expanded=True) + self.assertEqual('u-boot-expanded', expanded.etype) + + with self.assertRaises(ValueError) as e: + entry.Entry.Create(None, self.GetNode(), 'missing', expanded=True) + self.assertIn("Unknown entry type 'missing' in node '/binman/u-boot'", + str(e.exception)) + + def testMissingEtype(self): + """Test use of a blob etype when the requested one is not available""" + ent = entry.Entry.Create(None, self.GetNode(), 'missing', + missing_etype=True) + self.assertTrue(isinstance(ent, Entry_blob)) + self.assertEqual('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.assertEqual(tools.get_bytes(0, 1024), base.CompressData(b'abc')) + self.assertEqual(tools.get_bytes(0, 1024), base.DecompressData(b'abc')) + + def testLookupOffset(self): + """Test the lookup_offset() method of the base class""" + def MyFindEntryByNode(node): + return self.found + + base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb') + base.FindEntryByNode = MyFindEntryByNode + base.section = base + self.found = None + base.offset_from_elf = [self.GetNode(), 'start', 0] + with self.assertRaises(ValueError) as e: + base.lookup_offset() + self.assertIn("Cannot find entry for node 'u-boot'", str(e.exception)) + + self.found = base + with self.assertRaises(ValueError) as e: + base.lookup_offset() + self.assertIn("Need elf-fname property 'u-boot'", str(e.exception)) + + +if __name__ == "__main__": + unittest.main() |