testsAndMisc/linux_configuration/tests/test_usage_report_pmon_names.py

77 lines
1.9 KiB
Python
Raw Normal View History

"""Regression tests for pmon process-name normalization in usage_report."""
from __future__ import annotations
from typing import TYPE_CHECKING
import _usage_report_parsing as parsing
if TYPE_CHECKING:
import pytest
def test_normalize_pmon_command_prefers_first_executable_token() -> None:
"""The parser should keep executable-like token, not trailing args."""
tokens = ["code-insiders", "--type=", "gpu-process", "Not"]
assert parsing._normalize_pmon_command(tokens) == "code-insiders"
def test_normalize_pmon_command_skips_leading_option_tokens() -> None:
"""If the first token is an option, use the next non-option token."""
tokens = ["--type=", "code-insiders", "--flag"]
assert parsing._normalize_pmon_command(tokens) == "code-insiders"
def test_ingest_pmon_row_uses_command_field_start_not_last_token() -> None:
"""Rows with command args should aggregate under process name, not args."""
row = [
"20260507",
"12:00:00",
"0",
"123",
"C",
"10",
"5",
"0",
"0",
"0",
"0",
"code-insiders",
"--type=",
"gpu-process",
]
agg: dict[str, object] = {}
consumed = parsing._ingest_pmon_row(row, agg)
assert consumed == 1
assert "code-insiders" in agg
def test_ingest_pmon_row_falls_back_to_proc_comm_on_unknown(
monkeypatch: pytest.MonkeyPatch,
) -> None:
"""When command field is empty, parser can recover with /proc/<pid>/comm."""
row = [
"20260507",
"12:00:00",
"0",
"999",
"C",
"30",
"10",
"0",
"0",
"0",
"0",
]
agg: dict[str, object] = {}
monkeypatch.setattr(parsing, "_pid_comm_name", lambda _pid: "python")
consumed = parsing._ingest_pmon_row(row, agg)
assert consumed == 1
assert "python" in agg