blob: 91e9ecd98dfbe245aa4686209347ad68a5edb19e [file] [log] [blame]
import struct
import difflib
from nose.plugins.skip import Skip, SkipTest
import ubpf.disassembler
import testdata
def check_datafile(filename):
"""
Verify that the result of disassembling the 'raw' section matches the
'asm' section.
"""
data = testdata.read(filename)
if 'asm' not in data:
raise SkipTest("no asm section in datafile")
if 'raw' not in data:
raise SkipTest("no raw section in datafile")
binary = b''.join(struct.pack("=Q", x) for x in data['raw'])
result = ubpf.disassembler.disassemble(binary)
# TODO strip whitespace and comments from asm
if result.strip() != data['asm'].strip():
diff = difflib.unified_diff(data['asm'].splitlines(), result.splitlines(), lineterm="")
formatted = ''.join(' %s\n' % x for x in diff)
raise AssertionError("Assembly differs:\n%s" % formatted)
def test_datafiles():
# Nose test generator
# Creates a testcase for each datafile
for filename in testdata.list_files():
yield check_datafile, filename