59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
"""Tests for omlx.utils.proc_memory.get_phys_footprint."""
|
|
|
|
import ctypes
|
|
import os
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from omlx.utils.proc_memory import get_phys_footprint
|
|
|
|
|
|
@pytest.mark.skipif(sys.platform != "darwin", reason="Darwin-only API")
|
|
class TestGetPhysFootprintDarwin:
|
|
def test_returns_positive_for_current_process(self):
|
|
v = get_phys_footprint()
|
|
assert v > 0
|
|
# Python interpreter alone should be at least a few MB.
|
|
assert v > 4 * 1024**2
|
|
|
|
def test_explicit_pid_matches_default(self):
|
|
v_default = get_phys_footprint()
|
|
v_explicit = get_phys_footprint(pid=os.getpid())
|
|
# Phys can change between two calls (running interpreter), but
|
|
# should be within a small drift band.
|
|
assert abs(v_default - v_explicit) < 32 * 1024**2
|
|
|
|
def test_invalid_pid_returns_zero(self):
|
|
# PID 0 is the kernel — proc_pid_rusage refuses it.
|
|
assert get_phys_footprint(pid=0) == 0
|
|
|
|
def test_nonexistent_pid_returns_zero(self):
|
|
# Find a PID that is guaranteed not to exist.
|
|
# Use a PID far above the current process table.
|
|
# macOS reserves PID_MAX = 99999, so anything above that is invalid.
|
|
nonexistent_pid = os.getpid() + 100000
|
|
assert get_phys_footprint(pid=nonexistent_pid) == 0
|
|
|
|
def test_result_is_reasonable_size(self):
|
|
v = get_phys_footprint()
|
|
# phys_footprint should be representable as a positive int.
|
|
# No upper bound assertion — the value varies by runtime environment
|
|
# (CI runners, debug builds, loaded tooling) making fixed ceilings fragile.
|
|
assert v > 0
|
|
|
|
def test_returns_int(self):
|
|
assert isinstance(get_phys_footprint(), int)
|
|
|
|
def test_returns_int_for_explicit_pid(self):
|
|
assert isinstance(get_phys_footprint(pid=os.getpid()), int)
|
|
|
|
|
|
class TestGetPhysFootprintFallback:
|
|
def test_returns_zero_on_non_darwin(self, monkeypatch):
|
|
# Simulate libproc unavailable.
|
|
monkeypatch.setattr("omlx.utils.proc_memory._proc_pid_rusage", None)
|
|
assert get_phys_footprint() == 0
|
|
assert get_phys_footprint(pid=12345) == 0
|