blob: c3d5f3eef485b2685c9dbe43b89c14b9eedad41a [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001# SPDX-License-Identifier: GPL-2.0+
Simon Glass57454f42016-11-25 20:15:52 -07002# Copyright (c) 2016 Google, Inc
3# Written by Simon Glass <sjg@chromium.org>
4#
Simon Glass57454f42016-11-25 20:15:52 -07005# Test for the Entry class
6
7import collections
Simon Glass8f521362017-11-12 21:52:21 -07008import os
9import sys
Simon Glass57454f42016-11-25 20:15:52 -070010import unittest
11
Simon Glassc585dd42020-04-17 18:09:03 -060012from binman import entry
13from dtoc import fdt
14from dtoc import fdt_util
Simon Glassa997ea52020-04-17 18:09:04 -060015from patman import tools
Simon Glass8f521362017-11-12 21:52:21 -070016
Simon Glass57454f42016-11-25 20:15:52 -070017class TestEntry(unittest.TestCase):
Simon Glass752e7552018-10-01 21:12:41 -060018 def setUp(self):
19 tools.PrepareOutputDir(None)
20
21 def tearDown(self):
22 tools.FinaliseOutputDir()
23
Simon Glass8f521362017-11-12 21:52:21 -070024 def GetNode(self):
25 binman_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
Simon Glass8f521362017-11-12 21:52:21 -070026 fname = fdt_util.EnsureCompiled(
Simon Glass511f6582018-10-01 12:22:30 -060027 os.path.join(binman_dir,('test/005_simple.dts')))
Simon Glass8f521362017-11-12 21:52:21 -070028 dtb = fdt.FdtScan(fname)
29 return dtb.GetNode('/binman/u-boot')
30
Simon Glass97011e12019-07-08 14:25:23 -060031 def _ReloadEntry(self):
Simon Glass8f521362017-11-12 21:52:21 -070032 global entry
Simon Glass7057d022018-10-01 21:12:47 -060033 if entry:
Simon Glasscb7b8d72019-05-17 22:00:47 -060034 if sys.version_info[0] >= 3:
35 import importlib
36 importlib.reload(entry)
37 else:
38 reload(entry)
Simon Glass7057d022018-10-01 21:12:47 -060039 else:
Simon Glassc585dd42020-04-17 18:09:03 -060040 from binman import entry
Simon Glass97011e12019-07-08 14:25:23 -060041
Simon Glass57454f42016-11-25 20:15:52 -070042 def testEntryContents(self):
43 """Test the Entry bass class"""
Simon Glassc585dd42020-04-17 18:09:03 -060044 from binman import entry
Simon Glass2c360cf2019-07-20 12:23:45 -060045 base_entry = entry.Entry(None, None, None)
Simon Glass57454f42016-11-25 20:15:52 -070046 self.assertEqual(True, base_entry.ObtainContents())
47
48 def testUnknownEntry(self):
49 """Test that unknown entry types are detected"""
Simon Glass57454f42016-11-25 20:15:52 -070050 Node = collections.namedtuple('Node', ['name', 'path'])
51 node = Node('invalid-name', 'invalid-path')
52 with self.assertRaises(ValueError) as e:
53 entry.Entry.Create(None, node, node.name)
54 self.assertIn("Unknown entry type 'invalid-name' in node "
55 "'invalid-path'", str(e.exception))
Simon Glassac599912017-11-12 21:52:22 -070056
Simon Glass639505b2018-09-14 04:57:11 -060057 def testUniqueName(self):
58 """Test Entry.GetUniqueName"""
Simon Glass639505b2018-09-14 04:57:11 -060059 Node = collections.namedtuple('Node', ['name', 'parent'])
60 base_node = Node('root', None)
Simon Glass2c360cf2019-07-20 12:23:45 -060061 base_entry = entry.Entry(None, None, base_node)
Simon Glass639505b2018-09-14 04:57:11 -060062 self.assertEqual('root', base_entry.GetUniqueName())
63 sub_node = Node('subnode', base_node)
Simon Glass2c360cf2019-07-20 12:23:45 -060064 sub_entry = entry.Entry(None, None, sub_node)
Simon Glass639505b2018-09-14 04:57:11 -060065 self.assertEqual('root.subnode', sub_entry.GetUniqueName())
66
Simon Glass3732ec32018-09-14 04:57:18 -060067 def testGetDefaultFilename(self):
68 """Trivial test for this base class function"""
Simon Glass2c360cf2019-07-20 12:23:45 -060069 base_entry = entry.Entry(None, None, None)
Simon Glass3732ec32018-09-14 04:57:18 -060070 self.assertIsNone(base_entry.GetDefaultFilename())
Simon Glassac599912017-11-12 21:52:22 -070071
Simon Glass684a4f12019-07-20 12:23:31 -060072 def testBlobFdt(self):
73 """Test the GetFdtEtype() method of the blob-dtb entries"""
74 base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
75 self.assertIsNone(base.GetFdtEtype())
76
77 dtb = entry.Entry.Create(None, self.GetNode(), 'u-boot-dtb')
78 self.assertEqual('u-boot-dtb', dtb.GetFdtEtype())
79
Simon Glass37fdd142019-07-20 12:24:06 -060080 def testWriteChildData(self):
81 """Test the WriteChildData() method of the base class"""
82 base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
83 self.assertTrue(base.WriteChildData(base))
84
Simon Glassb9ba4e02019-08-24 07:22:44 -060085 def testReadChildData(self):
86 """Test the ReadChildData() method of the base class"""
87 base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
88 self.assertIsNone(base.ReadChildData(base))
89
Simon Glass2f859412021-03-18 20:25:04 +130090 def testExpandedEntry(self):
91 """Test use of an expanded entry when available"""
92 base = entry.Entry.Create(None, self.GetNode())
93 self.assertEqual('u-boot', base.etype)
94
95 expanded = entry.Entry.Create(None, self.GetNode(), expanded=True)
96 self.assertEqual('u-boot-expanded', expanded.etype)
97
98 with self.assertRaises(ValueError) as e:
99 entry.Entry.Create(None, self.GetNode(), 'missing', expanded=True)
100 self.assertIn("Unknown entry type 'missing' in node '/binman/u-boot'",
101 str(e.exception))
Simon Glass684a4f12019-07-20 12:23:31 -0600102
Simon Glassac599912017-11-12 21:52:22 -0700103if __name__ == "__main__":
104 unittest.main()