Initial working version

This commit is contained in:
Philip Henning 2026-03-08 18:32:25 +01:00
parent 34a0627e76
commit b6886cb34a
61 changed files with 4475 additions and 6 deletions

94
tests/test_doctor.py Normal file
View file

@ -0,0 +1,94 @@
from __future__ import annotations
from io import StringIO
from pve_vm_setup.doctor import run_live_doctor
from pve_vm_setup.services.base import AuthenticatedSession, Node, Pool, Realm
from pve_vm_setup.settings import AppSettings
class StubDoctorService:
mode = "live"
def check_connectivity(self) -> str:
return "HTTP 200"
def check_api_base(self) -> str:
return "8.2"
def load_realms(self) -> list[Realm]:
return [Realm(name="pam", title="Linux PAM standard authentication", default=True)]
def login(self, username: str, password: str, realm: str) -> AuthenticatedSession:
return AuthenticatedSession(username=f"{username}@{realm}", ticket="ticket")
def load_nodes(self) -> list[Node]:
return [Node(name="pve-test-01")]
def load_pools(self) -> list[Pool]:
return [Pool(poolid="sandbox")]
def load_existing_tags(self) -> list[str]:
return []
def load_storages(self, node: str):
raise AssertionError("not used in doctor")
def load_isos(self, node: str, storage: str):
raise AssertionError("not used in doctor")
class StubFactory:
@staticmethod
def create(settings: AppSettings) -> StubDoctorService:
return StubDoctorService()
def test_doctor_succeeds_and_keeps_secrets_out_of_output() -> None:
settings = AppSettings.from_env(
{
"PROXMOX_URL": "https://proxmox.example.invalid:8006",
"PROXMOX_USER": "root",
"PROXMOX_PASSWORD": "super-secret",
"PROXMOX_REALM": "pam",
},
load_dotenv_file=False,
)
stream = StringIO()
exit_code = run_live_doctor(settings, stream=stream, service_factory=StubFactory)
output = stream.getvalue()
assert exit_code == 0
assert "Doctor finished successfully." in output
assert "super-secret" not in output
assert "root@pam" in output
assert "host: proxmox.example.invalid:8006" in output
def test_doctor_validates_create_scope_when_enabled() -> None:
settings = AppSettings.from_env(
{
"PROXMOX_URL": "https://proxmox.example.invalid:8006",
"PROXMOX_USER": "root",
"PROXMOX_PASSWORD": "super-secret",
"PROXMOX_REALM": "pam",
"PROXMOX_PREVENT_CREATE": "false",
"PROXMOX_ENABLE_TEST_MODE": "true",
"PROXMOX_TEST_NODE": "pve-test-01",
"PROXMOX_TEST_POOL": "sandbox",
},
load_dotenv_file=False,
)
stream = StringIO()
exit_code = run_live_doctor(settings, stream=stream, service_factory=StubFactory)
output = stream.getvalue()
assert exit_code == 0
assert "prevent_create: False" in output
assert "enable_test_mode: True" in output
assert "node=pve-test-01" in output
assert "pool=sandbox" in output
assert "tag=codex-e2e" in output
assert "name_prefix=codex-e2e-" in output