Refactor public API around environments
This commit is contained in:
parent
57dae52cc2
commit
5d5243df23
41 changed files with 1301 additions and 459 deletions
|
|
@ -17,7 +17,12 @@ def test_vm_manager_lifecycle_and_auto_cleanup(tmp_path: Path) -> None:
|
|||
base_dir=tmp_path / "vms",
|
||||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
created = manager.create_vm(profile="debian-git", vcpu_count=1, mem_mib=512, ttl_seconds=600)
|
||||
created = manager.create_vm(
|
||||
environment="debian:12",
|
||||
vcpu_count=1,
|
||||
mem_mib=512,
|
||||
ttl_seconds=600,
|
||||
)
|
||||
vm_id = str(created["vm_id"])
|
||||
started = manager.start_vm(vm_id)
|
||||
assert started["state"] == "started"
|
||||
|
|
@ -37,9 +42,12 @@ def test_vm_manager_exec_timeout(tmp_path: Path) -> None:
|
|||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
vm_id = str(
|
||||
manager.create_vm(profile="debian-base", vcpu_count=1, mem_mib=512, ttl_seconds=600)[
|
||||
"vm_id"
|
||||
]
|
||||
manager.create_vm(
|
||||
environment="debian:12-base",
|
||||
vcpu_count=1,
|
||||
mem_mib=512,
|
||||
ttl_seconds=600,
|
||||
)["vm_id"]
|
||||
)
|
||||
manager.start_vm(vm_id)
|
||||
result = manager.exec_vm(vm_id, command="sleep 2", timeout_seconds=1)
|
||||
|
|
@ -54,9 +62,12 @@ def test_vm_manager_stop_and_delete(tmp_path: Path) -> None:
|
|||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
vm_id = str(
|
||||
manager.create_vm(profile="debian-base", vcpu_count=1, mem_mib=512, ttl_seconds=600)[
|
||||
"vm_id"
|
||||
]
|
||||
manager.create_vm(
|
||||
environment="debian:12-base",
|
||||
vcpu_count=1,
|
||||
mem_mib=512,
|
||||
ttl_seconds=600,
|
||||
)["vm_id"]
|
||||
)
|
||||
manager.start_vm(vm_id)
|
||||
stopped = manager.stop_vm(vm_id)
|
||||
|
|
@ -73,7 +84,12 @@ def test_vm_manager_reaps_expired(tmp_path: Path) -> None:
|
|||
)
|
||||
manager.MIN_TTL_SECONDS = 1
|
||||
vm_id = str(
|
||||
manager.create_vm(profile="debian-base", vcpu_count=1, mem_mib=512, ttl_seconds=1)["vm_id"]
|
||||
manager.create_vm(
|
||||
environment="debian:12-base",
|
||||
vcpu_count=1,
|
||||
mem_mib=512,
|
||||
ttl_seconds=1,
|
||||
)["vm_id"]
|
||||
)
|
||||
instance = manager._instances[vm_id] # noqa: SLF001
|
||||
instance.expires_at = 0.0
|
||||
|
|
@ -91,7 +107,12 @@ def test_vm_manager_reaps_started_vm(tmp_path: Path) -> None:
|
|||
)
|
||||
manager.MIN_TTL_SECONDS = 1
|
||||
vm_id = str(
|
||||
manager.create_vm(profile="debian-base", vcpu_count=1, mem_mib=512, ttl_seconds=1)["vm_id"]
|
||||
manager.create_vm(
|
||||
environment="debian:12-base",
|
||||
vcpu_count=1,
|
||||
mem_mib=512,
|
||||
ttl_seconds=1,
|
||||
)["vm_id"]
|
||||
)
|
||||
manager.start_vm(vm_id)
|
||||
manager._instances[vm_id].expires_at = 0.0 # noqa: SLF001
|
||||
|
|
@ -114,7 +135,7 @@ def test_vm_manager_validates_limits(tmp_path: Path, kwargs: dict[str, Any], msg
|
|||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
with pytest.raises(ValueError, match=msg):
|
||||
manager.create_vm(profile="debian-base", **kwargs)
|
||||
manager.create_vm(environment="debian:12-base", **kwargs)
|
||||
|
||||
|
||||
def test_vm_manager_max_active_limit(tmp_path: Path) -> None:
|
||||
|
|
@ -124,9 +145,9 @@ def test_vm_manager_max_active_limit(tmp_path: Path) -> None:
|
|||
max_active_vms=1,
|
||||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
manager.create_vm(profile="debian-base", vcpu_count=1, mem_mib=512, ttl_seconds=600)
|
||||
manager.create_vm(environment="debian:12-base", vcpu_count=1, mem_mib=512, ttl_seconds=600)
|
||||
with pytest.raises(RuntimeError, match="max active VMs reached"):
|
||||
manager.create_vm(profile="debian-base", vcpu_count=1, mem_mib=512, ttl_seconds=600)
|
||||
manager.create_vm(environment="debian:12-base", vcpu_count=1, mem_mib=512, ttl_seconds=600)
|
||||
|
||||
|
||||
def test_vm_manager_state_validation(tmp_path: Path) -> None:
|
||||
|
|
@ -136,9 +157,12 @@ def test_vm_manager_state_validation(tmp_path: Path) -> None:
|
|||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
vm_id = str(
|
||||
manager.create_vm(profile="debian-base", vcpu_count=1, mem_mib=512, ttl_seconds=600)[
|
||||
"vm_id"
|
||||
]
|
||||
manager.create_vm(
|
||||
environment="debian:12-base",
|
||||
vcpu_count=1,
|
||||
mem_mib=512,
|
||||
ttl_seconds=600,
|
||||
)["vm_id"]
|
||||
)
|
||||
with pytest.raises(RuntimeError, match="must be in 'started' state"):
|
||||
manager.exec_vm(vm_id, command="echo hi", timeout_seconds=30)
|
||||
|
|
@ -157,7 +181,12 @@ def test_vm_manager_status_expired_raises(tmp_path: Path) -> None:
|
|||
)
|
||||
manager.MIN_TTL_SECONDS = 1
|
||||
vm_id = str(
|
||||
manager.create_vm(profile="debian-base", vcpu_count=1, mem_mib=512, ttl_seconds=1)["vm_id"]
|
||||
manager.create_vm(
|
||||
environment="debian:12-base",
|
||||
vcpu_count=1,
|
||||
mem_mib=512,
|
||||
ttl_seconds=1,
|
||||
)["vm_id"]
|
||||
)
|
||||
manager._instances[vm_id].expires_at = 0.0 # noqa: SLF001
|
||||
with pytest.raises(RuntimeError, match="expired and was automatically deleted"):
|
||||
|
|
@ -179,7 +208,12 @@ def test_vm_manager_network_info(tmp_path: Path) -> None:
|
|||
base_dir=tmp_path / "vms",
|
||||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
created = manager.create_vm(profile="debian-base", vcpu_count=1, mem_mib=512, ttl_seconds=600)
|
||||
created = manager.create_vm(
|
||||
environment="debian:12-base",
|
||||
vcpu_count=1,
|
||||
mem_mib=512,
|
||||
ttl_seconds=600,
|
||||
)
|
||||
vm_id = str(created["vm_id"])
|
||||
status = manager.status_vm(vm_id)
|
||||
info = manager.network_info_vm(vm_id)
|
||||
|
|
@ -195,7 +229,7 @@ def test_vm_manager_run_vm(tmp_path: Path) -> None:
|
|||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
result = manager.run_vm(
|
||||
profile="debian-base",
|
||||
environment="debian:12-base",
|
||||
command="printf 'ok\\n'",
|
||||
vcpu_count=1,
|
||||
mem_mib=512,
|
||||
|
|
@ -213,13 +247,13 @@ def test_vm_manager_firecracker_backend_path(
|
|||
class StubFirecrackerBackend:
|
||||
def __init__(
|
||||
self,
|
||||
artifacts_dir: Path,
|
||||
environment_store: Any,
|
||||
firecracker_bin: Path,
|
||||
jailer_bin: Path,
|
||||
runtime_capabilities: Any,
|
||||
network_manager: TapNetworkManager,
|
||||
) -> None:
|
||||
self.artifacts_dir = artifacts_dir
|
||||
self.environment_store = environment_store
|
||||
self.firecracker_bin = firecracker_bin
|
||||
self.jailer_bin = jailer_bin
|
||||
self.runtime_capabilities = runtime_capabilities
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue