68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
|
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 don’t 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",
|
|||
|
},
|
|||
|
)
|