Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 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() |