mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-09-21 07:01:57 +00:00
binman: Complete elf test coverage
Add coverage for the new elf functions needed for the event_dump.py script. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
297e6eb8dc
commit
40def8ad75
2 changed files with 50 additions and 2 deletions
|
@ -112,7 +112,7 @@ def GetFileOffset(fname, addr):
|
|||
int: Offset of that address in the ELF file, or None if not valid
|
||||
"""
|
||||
if not ELF_TOOLS:
|
||||
raise ValueError('Python elftools package is not available')
|
||||
raise ValueError("Python: No module named 'elftools'")
|
||||
with open(fname, 'rb') as fd:
|
||||
elf = ELFFile(fd)
|
||||
return _GetFileOffset(elf, addr)
|
||||
|
@ -128,7 +128,7 @@ def GetSymbolFromAddress(fname, addr):
|
|||
str: Symbol name, or None if no symbol at that address
|
||||
"""
|
||||
if not ELF_TOOLS:
|
||||
raise ValueError('Python elftools package is not available')
|
||||
raise ValueError("Python: No module named 'elftools'")
|
||||
with open(fname, 'rb') as fd:
|
||||
elf = ELFFile(fd)
|
||||
syms = GetSymbols(fname, None)
|
||||
|
|
|
@ -284,6 +284,54 @@ class TestElf(unittest.TestCase):
|
|||
elf.read_segments(tools.get_bytes(100, 100))
|
||||
self.assertIn('Magic number does not match', str(e.exception))
|
||||
|
||||
def test_get_file_offset(self):
|
||||
"""Test GetFileOffset() gives the correct file offset for a symbol"""
|
||||
fname = self.ElfTestFile('embed_data')
|
||||
syms = elf.GetSymbols(fname, ['embed'])
|
||||
addr = syms['embed'].address
|
||||
offset = elf.GetFileOffset(fname, addr)
|
||||
data = tools.read_file(fname)
|
||||
|
||||
# Just use the first 4 bytes and assume it is little endian
|
||||
embed_data = data[offset:offset + 4]
|
||||
embed_value = struct.unpack('<I', embed_data)[0]
|
||||
self.assertEqual(0x1234, embed_value)
|
||||
|
||||
def test_get_file_offset_fail(self):
|
||||
"""Test calling GetFileOffset() without elftools"""
|
||||
try:
|
||||
old_val = elf.ELF_TOOLS
|
||||
elf.ELF_TOOLS = False
|
||||
fname = self.ElfTestFile('embed_data')
|
||||
with self.assertRaises(ValueError) as e:
|
||||
elf.GetFileOffset(fname, 0)
|
||||
self.assertIn("Python: No module named 'elftools'",
|
||||
str(e.exception))
|
||||
finally:
|
||||
elf.ELF_TOOLS = old_val
|
||||
|
||||
def test_get_symbol_from_address(self):
|
||||
"""Test GetSymbolFromAddress()"""
|
||||
fname = self.ElfTestFile('elf_sections')
|
||||
sym_name = 'calculate'
|
||||
syms = elf.GetSymbols(fname, [sym_name])
|
||||
addr = syms[sym_name].address
|
||||
sym = elf.GetSymbolFromAddress(fname, addr)
|
||||
self.assertEqual(sym_name, sym)
|
||||
|
||||
def test_get_symbol_from_address_fail(self):
|
||||
"""Test calling GetSymbolFromAddress() without elftools"""
|
||||
try:
|
||||
old_val = elf.ELF_TOOLS
|
||||
elf.ELF_TOOLS = False
|
||||
fname = self.ElfTestFile('embed_data')
|
||||
with self.assertRaises(ValueError) as e:
|
||||
elf.GetSymbolFromAddress(fname, 0x1000)
|
||||
self.assertIn("Python: No module named 'elftools'",
|
||||
str(e.exception))
|
||||
finally:
|
||||
elf.ELF_TOOLS = old_val
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in a new issue