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 | # 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 patman 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.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() |