feat: run smolmachines sidecar as vm
This commit is contained in:
@@ -18,9 +18,11 @@ from bot_bottle.backend.smolmachines.sidecar_bundle import (
|
||||
bundle_network_name,
|
||||
create_bundle_network,
|
||||
ensure_bundle_image,
|
||||
start_bundle_vm,
|
||||
remove_bundle_network,
|
||||
start_bundle,
|
||||
stop_bundle,
|
||||
stop_bundle_vm,
|
||||
)
|
||||
|
||||
|
||||
@@ -200,6 +202,57 @@ class TestEnsureBundleImage(unittest.TestCase):
|
||||
self.assertEqual("Dockerfile.sidecars", kwargs["dockerfile"])
|
||||
|
||||
|
||||
class TestStartBundleVm(unittest.TestCase):
|
||||
def test_creates_sidecar_vm_with_ports_volumes_and_env(self):
|
||||
calls: list[tuple[str, tuple[object, ...], dict[str, object]]] = []
|
||||
|
||||
def record(name): # type: ignore
|
||||
def inner(*args, **kwargs): # type: ignore
|
||||
calls.append((name, args, kwargs))
|
||||
return inner
|
||||
|
||||
with patch(
|
||||
"bot_bottle.backend.smolmachines.sidecar_bundle.allocate_raw_host_ports",
|
||||
return_value={9099: 55001, 9420: 55002},
|
||||
), patch(
|
||||
"bot_bottle.backend.smolmachines.sidecar_bundle._smolvm.machine_create",
|
||||
side_effect=record("create"),
|
||||
), patch(
|
||||
"bot_bottle.backend.smolmachines.sidecar_bundle._smolvm.machine_start",
|
||||
side_effect=record("start"),
|
||||
), patch(
|
||||
"bot_bottle.backend.smolmachines.sidecar_bundle._smolvm.wait_exec_ready",
|
||||
side_effect=record("wait"),
|
||||
):
|
||||
launch = start_bundle_vm(
|
||||
_spec(
|
||||
daemons_csv="egress,git-http",
|
||||
environment=("FOO=bar", "TOKEN"),
|
||||
volumes=(("/host/routes", "/etc/egress", True),),
|
||||
ports_to_publish=(9099, 9420),
|
||||
),
|
||||
from_path=Path("/cache/sidecar.smolmachine"),
|
||||
host_env={"TOKEN": "secret"},
|
||||
)
|
||||
|
||||
self.assertEqual({9099: 55001, 9420: 55002}, launch.raw_ports)
|
||||
create = calls[0]
|
||||
self.assertEqual("create", create[0])
|
||||
self.assertEqual(("bot-bottle-sidecars-demo-abc12",), create[1])
|
||||
self.assertEqual(Path("/cache/sidecar.smolmachine"), create[2]["from_path"])
|
||||
self.assertTrue(create[2]["net"])
|
||||
self.assertEqual(((55001, 9099), (55002, 9420)), create[2]["ports"])
|
||||
self.assertEqual((("/host/routes", "/etc/egress", True),), create[2]["volumes"])
|
||||
self.assertEqual(
|
||||
{
|
||||
"BOT_BOTTLE_SIDECAR_DAEMONS": "egress,git-http",
|
||||
"FOO": "bar",
|
||||
"TOKEN": "secret",
|
||||
},
|
||||
create[2]["env"],
|
||||
)
|
||||
|
||||
|
||||
class TestStopBundle(unittest.TestCase):
|
||||
def _patch_run(self, **kwargs): # type: ignore
|
||||
return patch(
|
||||
@@ -222,5 +275,17 @@ class TestStopBundle(unittest.TestCase):
|
||||
stop_bundle("demo-abc12") # no raise
|
||||
|
||||
|
||||
class TestStopBundleVm(unittest.TestCase):
|
||||
def test_stops_then_deletes_sidecar_vm(self):
|
||||
with patch(
|
||||
"bot_bottle.backend.smolmachines.sidecar_bundle._smolvm.machine_stop",
|
||||
) as stop, patch(
|
||||
"bot_bottle.backend.smolmachines.sidecar_bundle._smolvm.machine_delete",
|
||||
) as delete:
|
||||
stop_bundle_vm("demo-abc12")
|
||||
stop.assert_called_once_with("bot-bottle-sidecars-demo-abc12")
|
||||
delete.assert_called_once_with("bot-bottle-sidecars-demo-abc12")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user