mirror of
https://github.com/brunopostle/ifcurl.git
synced 2026-07-12 02:08:13 +00:00
Import sorting, quoted type annotation removal, and black reformatting. No logic changes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
51 lines
1.1 KiB
Python
51 lines
1.1 KiB
Python
"""Tests for ifcurl.sandbox — subprocess isolation for ifcopenshell calls."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import ctypes
|
|
import os
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from ifcurl.sandbox import (
|
|
SandboxCrashError,
|
|
SandboxTimeoutError,
|
|
run_sandboxed,
|
|
)
|
|
|
|
|
|
def _return_value(x):
|
|
return x
|
|
|
|
|
|
def _raise_value_error(msg):
|
|
raise ValueError(msg)
|
|
|
|
|
|
def _segfault():
|
|
ctypes.string_at(0) # dereference NULL → SIGSEGV
|
|
|
|
|
|
def _sleep_forever():
|
|
import time
|
|
|
|
time.sleep(9999)
|
|
|
|
|
|
class TestRunSandboxed:
|
|
def test_returns_value(self):
|
|
assert run_sandboxed(_return_value, 42) == 42
|
|
|
|
def test_propagates_exception(self):
|
|
with pytest.raises(ValueError, match="bad input"):
|
|
run_sandboxed(_raise_value_error, "bad input")
|
|
|
|
@pytest.mark.skipif(sys.platform == "win32", reason="SIGSEGV test requires Unix")
|
|
def test_crash_raises_sandbox_crash_error(self):
|
|
with pytest.raises(SandboxCrashError):
|
|
run_sandboxed(_segfault)
|
|
|
|
def test_timeout_raises_sandbox_timeout_error(self):
|
|
with pytest.raises(SandboxTimeoutError):
|
|
run_sandboxed(_sleep_forever, timeout=1)
|