52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import sys
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from opensquilla.sandbox.backend.linux_limits import resource_preexec_from_policy
|
|
|
|
pytestmark = pytest.mark.skipif(
|
|
not sys.platform.startswith("linux"),
|
|
reason="Linux resource-limit tests require POSIX platform semantics",
|
|
)
|
|
|
|
|
|
def test_resource_preexec_from_policy_sets_cpu_and_pid_limits_without_address_space_cap(
|
|
monkeypatch,
|
|
) -> None:
|
|
calls: list[tuple[int, tuple[int, int]]] = []
|
|
fake_resource = SimpleNamespace(
|
|
RLIMIT_CPU=0,
|
|
RLIMIT_AS=1,
|
|
RLIMIT_NPROC=2,
|
|
RLIM_INFINITY=-1,
|
|
getrlimit=lambda _resource_id: (-1, -1),
|
|
setrlimit=lambda resource_id, limits: calls.append((resource_id, limits)),
|
|
)
|
|
monkeypatch.setattr(
|
|
"opensquilla.sandbox.backend.linux_limits.resource",
|
|
fake_resource,
|
|
)
|
|
|
|
preexec = resource_preexec_from_policy(
|
|
{
|
|
"cpuSeconds": 7,
|
|
"memoryMb": 64,
|
|
"pids": 23,
|
|
}
|
|
)
|
|
|
|
assert preexec is not None
|
|
preexec()
|
|
|
|
assert calls == [
|
|
(0, (7, -1)),
|
|
(2, (23, -1)),
|
|
]
|
|
|
|
|
|
def test_resource_preexec_from_policy_returns_none_without_limits() -> None:
|
|
assert resource_preexec_from_policy({}) is None
|