120 lines
3.4 KiB
Python
120 lines
3.4 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from wrenn import Capsule
|
|
from wrenn.models import Capsule as CapsuleModel, Status
|
|
|
|
pytestmark = pytest.mark.integration
|
|
|
|
|
|
class TestCapsuleLifecycle:
|
|
"""Each test manages its own capsule to test create/destroy paths."""
|
|
|
|
def test_create_and_destroy(self):
|
|
capsule = Capsule()
|
|
capsule_id = capsule.capsule_id
|
|
try:
|
|
assert capsule_id
|
|
assert capsule.info is not None
|
|
finally:
|
|
capsule.destroy()
|
|
|
|
info = Capsule.get_info(capsule_id)
|
|
assert info.status in (Status.stopped, Status.missing)
|
|
|
|
def test_create_with_wait(self):
|
|
capsule = Capsule(wait=True)
|
|
try:
|
|
assert capsule.info is not None
|
|
assert capsule.info.status == Status.running
|
|
finally:
|
|
capsule.destroy()
|
|
|
|
def test_context_manager_destroys(self):
|
|
with Capsule(wait=True) as capsule:
|
|
capsule_id = capsule.capsule_id
|
|
assert capsule.is_running()
|
|
|
|
info = Capsule.get_info(capsule_id)
|
|
assert info.status in (Status.stopped, Status.missing)
|
|
|
|
def test_get_info(self):
|
|
capsule = Capsule(wait=True)
|
|
try:
|
|
info = capsule.get_info()
|
|
assert isinstance(info, CapsuleModel)
|
|
assert info.id == capsule.capsule_id
|
|
assert info.status == Status.running
|
|
finally:
|
|
capsule.destroy()
|
|
|
|
def test_pause_and_resume(self):
|
|
capsule = Capsule(wait=True)
|
|
try:
|
|
paused = capsule.pause()
|
|
assert paused.status == Status.paused
|
|
assert not capsule.is_running()
|
|
|
|
resumed = capsule.resume()
|
|
assert resumed.status == Status.running
|
|
finally:
|
|
capsule.destroy()
|
|
|
|
def test_static_destroy(self):
|
|
capsule = Capsule(wait=True)
|
|
capsule_id = capsule.capsule_id
|
|
try:
|
|
Capsule.destroy(capsule_id)
|
|
except Exception:
|
|
capsule.destroy()
|
|
raise
|
|
|
|
info = Capsule.get_info(capsule_id)
|
|
assert info.status in (Status.stopped, Status.missing)
|
|
|
|
def test_connect_to_existing(self):
|
|
capsule = Capsule(wait=True)
|
|
try:
|
|
connected = Capsule.connect(capsule.capsule_id)
|
|
assert connected.capsule_id == capsule.capsule_id
|
|
assert connected.info is not None
|
|
assert connected.info.status == Status.running
|
|
finally:
|
|
capsule.destroy()
|
|
|
|
def test_connect_resumes_paused(self):
|
|
capsule = Capsule(wait=True)
|
|
try:
|
|
capsule.pause()
|
|
connected = Capsule.connect(capsule.capsule_id)
|
|
assert connected.info is not None
|
|
assert connected.info.status == Status.running
|
|
finally:
|
|
capsule.destroy()
|
|
|
|
def test_list_capsules(self):
|
|
capsule = Capsule(wait=True)
|
|
try:
|
|
capsules = Capsule.list()
|
|
assert isinstance(capsules, list)
|
|
ids = [c.id for c in capsules]
|
|
assert capsule.capsule_id in ids
|
|
finally:
|
|
capsule.destroy()
|
|
|
|
def test_wait_ready(self):
|
|
capsule = Capsule()
|
|
try:
|
|
capsule.wait_ready(timeout=60)
|
|
assert capsule.is_running()
|
|
finally:
|
|
capsule.destroy()
|
|
|
|
def test_ping(self):
|
|
capsule = Capsule(wait=True)
|
|
try:
|
|
capsule.ping()
|
|
finally:
|
|
capsule.destroy()
|