Initial working version
This commit is contained in:
parent
34a0627e76
commit
b6886cb34a
61 changed files with 4475 additions and 6 deletions
107
tests/test_domain.py
Normal file
107
tests/test_domain.py
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
from pve_vm_setup.domain import build_create_payload, select_latest_nixos_iso, validate_all_steps
|
||||
from pve_vm_setup.models.workflow import VmConfig
|
||||
from pve_vm_setup.settings import AppSettings
|
||||
|
||||
|
||||
def test_select_latest_nixos_iso_prefers_latest_year_month() -> None:
|
||||
choice = select_latest_nixos_iso(
|
||||
[
|
||||
"cephfs:iso/nixos-minimal-24.11.1234abcd-x86_64-linux.iso",
|
||||
"cephfs:iso/nixos-minimal-25.05.ffffeeee-x86_64-linux.iso",
|
||||
"cephfs:iso/debian-12.iso",
|
||||
]
|
||||
)
|
||||
|
||||
assert choice == "cephfs:iso/nixos-minimal-25.05.ffffeeee-x86_64-linux.iso"
|
||||
|
||||
|
||||
def test_build_create_payload_applies_safety_name_tag_and_key_settings() -> None:
|
||||
settings = AppSettings.from_env(
|
||||
{
|
||||
"PROXMOX_PREVENT_CREATE": "false",
|
||||
"PROXMOX_ENABLE_TEST_MODE": "true",
|
||||
"PROXMOX_TEST_NODE": "fake-node-01",
|
||||
"PROXMOX_TEST_POOL": "lab",
|
||||
},
|
||||
load_dotenv_file=False,
|
||||
)
|
||||
config = VmConfig()
|
||||
config.general.node = "fake-node-01"
|
||||
config.general.vmid = 123
|
||||
config.general.name = "demo"
|
||||
config.general.tags = ["linux"]
|
||||
config.os.storage = "cephfs"
|
||||
config.os.iso = "cephfs:iso/nixos-minimal-25.05.ffffeeee-x86_64-linux.iso"
|
||||
|
||||
payload = build_create_payload(config, settings)
|
||||
|
||||
assert payload["name"] == "codex-e2e-demo"
|
||||
assert payload["tags"] == "codex-e2e;linux"
|
||||
assert payload["bios"] == "ovmf"
|
||||
assert payload["scsihw"] == "virtio-scsi-single"
|
||||
assert payload["allow-ksm"] == 1
|
||||
assert payload["net0"] == "model=virtio,bridge=vmbr9,firewall=1,link_down=0"
|
||||
assert payload["scsi0"] == (
|
||||
"ceph-pool:32,format=raw,cache=none,discard=ignore,"
|
||||
"iothread=1,ssd=1,backup=1,replicate=1,aio=io_uring"
|
||||
)
|
||||
|
||||
|
||||
def test_validate_all_steps_requires_live_create_opt_in() -> None:
|
||||
settings = AppSettings.from_env(
|
||||
{
|
||||
"PROXMOX_PREVENT_CREATE": "true",
|
||||
},
|
||||
load_dotenv_file=False,
|
||||
)
|
||||
config = VmConfig()
|
||||
config.general.node = "fake-node-01"
|
||||
config.general.vmid = 123
|
||||
config.general.name = "demo"
|
||||
config.os.storage = "cephfs"
|
||||
config.os.iso = "cephfs:iso/nixos-minimal-25.05.ffffeeee-x86_64-linux.iso"
|
||||
|
||||
errors = validate_all_steps(config, settings, references=type("Refs", (), {})())
|
||||
|
||||
assert "Set PROXMOX_PREVENT_CREATE=false to enable VM creation." in errors
|
||||
|
||||
|
||||
def test_build_create_payload_leaves_name_and_tags_untouched_outside_test_mode() -> None:
|
||||
settings = AppSettings.from_env(
|
||||
{
|
||||
"PROXMOX_PREVENT_CREATE": "false",
|
||||
},
|
||||
load_dotenv_file=False,
|
||||
)
|
||||
config = VmConfig()
|
||||
config.general.node = "fake-node-01"
|
||||
config.general.vmid = 123
|
||||
config.general.name = "demo"
|
||||
config.general.tags = ["linux"]
|
||||
config.os.storage = "cephfs"
|
||||
config.os.iso = "cephfs:iso/nixos-minimal-25.05.ffffeeee-x86_64-linux.iso"
|
||||
|
||||
payload = build_create_payload(config, settings)
|
||||
|
||||
assert payload["name"] == "demo"
|
||||
assert payload["tags"] == "linux"
|
||||
|
||||
|
||||
def test_build_create_payload_can_disable_allow_ksm() -> None:
|
||||
settings = AppSettings.from_env(
|
||||
{
|
||||
"PROXMOX_PREVENT_CREATE": "false",
|
||||
},
|
||||
load_dotenv_file=False,
|
||||
)
|
||||
config = VmConfig()
|
||||
config.general.node = "fake-node-01"
|
||||
config.general.vmid = 123
|
||||
config.general.name = "demo"
|
||||
config.os.storage = "cephfs"
|
||||
config.os.iso = "cephfs:iso/nixos-minimal-25.05.ffffeeee-x86_64-linux.iso"
|
||||
config.memory.allow_ksm = False
|
||||
|
||||
payload = build_create_payload(config, settings)
|
||||
|
||||
assert payload["allow-ksm"] == 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue