entry_test.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # SPDX-License-Identifier: GPL-2.0+
  2. # Copyright (c) 2016 Google, Inc
  3. # Written by Simon Glass <sjg@chromium.org>
  4. #
  5. # Test for the Entry class
  6. import collections
  7. import os
  8. import sys
  9. import unittest
  10. from binman import entry
  11. from dtoc import fdt
  12. from dtoc import fdt_util
  13. from patman import tools
  14. class TestEntry(unittest.TestCase):
  15. def setUp(self):
  16. tools.PrepareOutputDir(None)
  17. def tearDown(self):
  18. tools.FinaliseOutputDir()
  19. def GetNode(self):
  20. binman_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
  21. fname = fdt_util.EnsureCompiled(
  22. os.path.join(binman_dir,('test/005_simple.dts')))
  23. dtb = fdt.FdtScan(fname)
  24. return dtb.GetNode('/binman/u-boot')
  25. def _ReloadEntry(self):
  26. global entry
  27. if entry:
  28. if sys.version_info[0] >= 3:
  29. import importlib
  30. importlib.reload(entry)
  31. else:
  32. reload(entry)
  33. else:
  34. from binman import entry
  35. def testEntryContents(self):
  36. """Test the Entry bass class"""
  37. from binman import entry
  38. base_entry = entry.Entry(None, None, None)
  39. self.assertEqual(True, base_entry.ObtainContents())
  40. def testUnknownEntry(self):
  41. """Test that unknown entry types are detected"""
  42. Node = collections.namedtuple('Node', ['name', 'path'])
  43. node = Node('invalid-name', 'invalid-path')
  44. with self.assertRaises(ValueError) as e:
  45. entry.Entry.Create(None, node, node.name)
  46. self.assertIn("Unknown entry type 'invalid-name' in node "
  47. "'invalid-path'", str(e.exception))
  48. def testUniqueName(self):
  49. """Test Entry.GetUniqueName"""
  50. Node = collections.namedtuple('Node', ['name', 'parent'])
  51. base_node = Node('root', None)
  52. base_entry = entry.Entry(None, None, base_node)
  53. self.assertEqual('root', base_entry.GetUniqueName())
  54. sub_node = Node('subnode', base_node)
  55. sub_entry = entry.Entry(None, None, sub_node)
  56. self.assertEqual('root.subnode', sub_entry.GetUniqueName())
  57. def testGetDefaultFilename(self):
  58. """Trivial test for this base class function"""
  59. base_entry = entry.Entry(None, None, None)
  60. self.assertIsNone(base_entry.GetDefaultFilename())
  61. def testBlobFdt(self):
  62. """Test the GetFdtEtype() method of the blob-dtb entries"""
  63. base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
  64. self.assertIsNone(base.GetFdtEtype())
  65. dtb = entry.Entry.Create(None, self.GetNode(), 'u-boot-dtb')
  66. self.assertEqual('u-boot-dtb', dtb.GetFdtEtype())
  67. def testWriteChildData(self):
  68. """Test the WriteChildData() method of the base class"""
  69. base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
  70. self.assertTrue(base.WriteChildData(base))
  71. def testReadChildData(self):
  72. """Test the ReadChildData() method of the base class"""
  73. base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
  74. self.assertIsNone(base.ReadChildData(base))
  75. def testExpandedEntry(self):
  76. """Test use of an expanded entry when available"""
  77. base = entry.Entry.Create(None, self.GetNode())
  78. self.assertEqual('u-boot', base.etype)
  79. expanded = entry.Entry.Create(None, self.GetNode(), expanded=True)
  80. self.assertEqual('u-boot-expanded', expanded.etype)
  81. with self.assertRaises(ValueError) as e:
  82. entry.Entry.Create(None, self.GetNode(), 'missing', expanded=True)
  83. self.assertIn("Unknown entry type 'missing' in node '/binman/u-boot'",
  84. str(e.exception))
  85. if __name__ == "__main__":
  86. unittest.main()