84b3b7d8e8
Adds a complete pytest system test suite for the HoneyBiscuitWorkshop CI/CD system: - runner.sh: orchestrates build, Docker image creation, and test execution - Dockerfile: Arch Linux-based test image with Python venv - conftest.py: shared fixtures (baker_bin, run_baker, work_dir, llm_env) - probes/: environment probes for checking users, files, packages, processes - llm/: LLM-based log judgment system with caching for semantic test evaluation - fixtures/: test configs and scripts for prebake, bake, and finalize stages - test_prebake.py, test_bake.py, test_finalize.py: test suites for each pipeline stage Also refactors finalize.yml.tmpl notification config to use a templates system.
44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
"""File and directory existence / permission probes."""
|
|
|
|
import os
|
|
import stat
|
|
import grp
|
|
import pwd
|
|
|
|
|
|
def file_exists(path: str) -> bool:
|
|
"""Check if *path* exists and is a regular file."""
|
|
return os.path.isfile(path)
|
|
|
|
|
|
def dir_exists(path: str) -> bool:
|
|
"""Check if *path* exists and is a directory."""
|
|
return os.path.isdir(path)
|
|
|
|
|
|
def file_permissions(path: str) -> int:
|
|
"""Return the permission mode of *path* as an octal int (e.g. ``0o755``).
|
|
|
|
Raises ``FileNotFoundError`` if *path* doesn't exist.
|
|
"""
|
|
return stat.S_IMODE(os.stat(path).st_mode)
|
|
|
|
|
|
def file_contains(path: str, text: str) -> bool:
|
|
"""Check if a file contains the specified text."""
|
|
with open(path, "r", errors="replace") as f:
|
|
return text in f.read()
|
|
|
|
|
|
def file_owned_by(path: str, username: str) -> bool:
|
|
"""Check if a file is owned by the specified user."""
|
|
st = os.stat(path)
|
|
owner = pwd.getpwuid(st.st_uid).pw_name
|
|
return owner == username
|
|
|
|
|
|
def file_group(path: str) -> str:
|
|
"""Get the group owner of a file."""
|
|
st = os.stat(path)
|
|
return grp.getgrgid(st.st_gid).gr_name
|