kicad/thirdparty/sentry-native/tests/test_build_static.py

68 lines
2.1 KiB
Python
Raw Normal View History

import subprocess
import sys
import os
import pytest
from .conditions import has_breakpad, has_crashpad
def test_static_lib(cmake):
tmp_path = cmake(
["sentry_example"],
{
"SENTRY_BACKEND": "none",
"SENTRY_TRANSPORT": "none",
"BUILD_SHARED_LIBS": "OFF",
},
)
# on linux we can use `ldd` to check that we dont link to `libsentry.so`
if sys.platform == "linux":
output = subprocess.check_output("ldd sentry_example", cwd=tmp_path, shell=True)
assert b"libsentry.so" not in output
# on windows, we read the file header to check that the exe is compiled correctly
if sys.platform == "win32":
with open(os.path.join(tmp_path, "sentry_example.exe"), "rb") as binary:
binary.seek(0x3C, 0)
offset = int.from_bytes(binary.read(4), byteorder="little")
binary.seek(offset, 0)
magic = binary.read(6)
# https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#signature-image-only
assert magic == (
b"PE\x00\x00\x4c\x01"
if os.environ.get("TEST_X86")
else b"PE\x00\x00\x64\x86"
)
# similarly, we use `file` on linux
if sys.platform == "linux":
output = subprocess.check_output(
"file sentry_example", cwd=tmp_path, shell=True
)
assert (
b"ELF 32-bit" if os.environ.get("TEST_X86") else b"ELF 64-bit"
) in output
@pytest.mark.skipif(not has_crashpad, reason="test needs crashpad backend")
def test_static_crashpad(cmake):
tmp_path = cmake(
["sentry_example"],
{
"SENTRY_BACKEND": "crashpad",
"SENTRY_TRANSPORT": "none",
"BUILD_SHARED_LIBS": "OFF",
},
)
@pytest.mark.skipif(not has_breakpad, reason="test needs breakpad backend")
def test_static_breakpad(cmake):
tmp_path = cmake(
["sentry_example"],
{
"SENTRY_BACKEND": "breakpad",
"SENTRY_TRANSPORT": "none",
"BUILD_SHARED_LIBS": "OFF",
},
)