Add an new module with utility functions to inspect PE32+ files, mainly listing the sections and their addresses and sizes. Include a simple test to check that we can successfully parse the EFI stub contained in systemd (systemd-udev package).
55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
#
|
|
# Test for the util.lvm2 module
|
|
#
|
|
|
|
import io
|
|
import os
|
|
|
|
import pytest
|
|
|
|
from osbuild.util import pe32p
|
|
|
|
EFI_STUB = "/usr/lib/systemd/boot/efi/linuxx64.efi.stub"
|
|
|
|
|
|
def have_efi_stub() -> bool:
|
|
return os.path.exists(EFI_STUB)
|
|
|
|
|
|
@pytest.mark.skipif(not have_efi_stub(), reason="require systemd efi stub")
|
|
def test_basic():
|
|
with open(EFI_STUB, "rb") as f:
|
|
coff = pe32p.read_coff_header(f)
|
|
assert coff
|
|
opt = pe32p.read_optional_header(f, coff)
|
|
assert opt
|
|
sections = pe32p.read_sections(f, coff)
|
|
|
|
assert sections, "No sections found in stub"
|
|
|
|
|
|
@pytest.mark.skipif(not have_efi_stub(), reason="require systemd efi stub")
|
|
def test_basic_no_coff():
|
|
# check the API versions that re-reads the CoffHeader
|
|
with open(EFI_STUB, "rb") as f:
|
|
coff = pe32p.read_coff_header(f)
|
|
assert coff
|
|
f.seek(0, io.SEEK_SET)
|
|
opt = pe32p.read_optional_header(f)
|
|
f.seek(0, io.SEEK_SET)
|
|
assert opt
|
|
f.seek(0, io.SEEK_SET)
|
|
sections = pe32p.read_sections(f)
|
|
|
|
assert sections, "No sections found in stub"
|
|
|
|
with open(EFI_STUB, "rb") as f:
|
|
coff_check = pe32p.read_coff_header(f)
|
|
assert coff_check
|
|
assert coff == coff_check
|
|
opt_check = pe32p.read_optional_header(f, coff)
|
|
assert opt_check
|
|
assert opt == opt_check
|
|
sections_check = pe32p.read_sections(f, coff)
|
|
assert sections_check
|
|
assert sections == sections_check
|