Add reproducible Docker and WireGuard host bootstrap
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import importlib.util
|
||||
import os
|
||||
import pathlib
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
|
||||
os.environ.setdefault("CONTROLLER_TOKEN", "x" * 48)
|
||||
PATH = pathlib.Path(__file__).parents[1] / "platform/docker/profile-controller/profile_controller.py"
|
||||
SPEC = importlib.util.spec_from_file_location("profile_controller", PATH)
|
||||
controller = importlib.util.module_from_spec(SPEC)
|
||||
assert SPEC and SPEC.loader
|
||||
SPEC.loader.exec_module(controller)
|
||||
|
||||
|
||||
def item(profile, state="exited"):
|
||||
return {
|
||||
"Id": f"id-{profile}",
|
||||
"State": state,
|
||||
"Labels": {controller.LABEL_KEY: profile},
|
||||
}
|
||||
|
||||
|
||||
class ProfileControllerTests(unittest.TestCase):
|
||||
def test_rejects_unknown_profile_before_docker_call(self):
|
||||
with patch.object(controller, "docker_request") as request:
|
||||
with self.assertRaises(ValueError):
|
||||
controller.activate("shell")
|
||||
request.assert_not_called()
|
||||
|
||||
def test_switch_stops_running_profile_then_starts_target(self):
|
||||
profiles = {name: item(name) for name in controller.ALLOWED}
|
||||
profiles["fast"] = item("fast", "running")
|
||||
calls = []
|
||||
|
||||
def request(method, path):
|
||||
calls.append((method, path))
|
||||
return 204, b""
|
||||
|
||||
with patch.object(controller, "containers", return_value=profiles), \
|
||||
patch.object(controller, "docker_request", side_effect=request):
|
||||
result = controller.activate("medium")
|
||||
|
||||
self.assertEqual(result, {"active_profile": "medium", "changed": True})
|
||||
self.assertEqual(calls, [
|
||||
("POST", "/containers/id-fast/stop?t=120"),
|
||||
("POST", "/containers/id-medium/start"),
|
||||
])
|
||||
|
||||
def test_fails_if_profile_container_is_missing(self):
|
||||
profiles = {name: item(name) for name in controller.ALLOWED[:-1]}
|
||||
with patch.object(controller, "containers", return_value=profiles):
|
||||
with self.assertRaisesRegex(RuntimeError, "missing"):
|
||||
controller.activate("fast")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user