c08b09dc9f
Assisted-by: Codex
92 lines
3.4 KiB
Python
92 lines
3.4 KiB
Python
"""Unit: smolmachines backend util helpers (PRD 0023)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from bot_bottle.backend.smolmachines.util import (
|
|
smolmachines_bundle_subnet,
|
|
smolmachines_preflight,
|
|
)
|
|
|
|
|
|
class TestBundleSubnet(unittest.TestCase):
|
|
def test_returns_subnet_gateway_and_bundle_ip(self):
|
|
subnet, gateway, bundle_ip = smolmachines_bundle_subnet("demo-abc12")
|
|
self.assertTrue(subnet.startswith("192.168."))
|
|
self.assertTrue(subnet.endswith(".0/24"))
|
|
# Gateway at .1, bundle at .2 — fixed convention.
|
|
self.assertTrue(gateway.endswith(".1"))
|
|
self.assertTrue(bundle_ip.endswith(".2"))
|
|
# All three share the same third octet.
|
|
third = subnet.split(".")[2]
|
|
self.assertEqual(third, gateway.split(".")[2])
|
|
self.assertEqual(third, bundle_ip.split(".")[2])
|
|
|
|
def test_stable_for_same_slug(self):
|
|
# Recoverability: `cli.py resume` reuses the slug and
|
|
# expects to find the same per-bottle subnet (a fresh
|
|
# docker bridge would mean a different IP, and smolvm's
|
|
# allow_cidrs would no longer match).
|
|
a = smolmachines_bundle_subnet("demo-abc12")
|
|
b = smolmachines_bundle_subnet("demo-abc12")
|
|
self.assertEqual(a, b)
|
|
|
|
def test_different_slugs_likely_differ(self):
|
|
# Not a guarantee — it's hash-mod-254, collisions exist —
|
|
# but two arbitrary slugs shouldn't share a subnet in the
|
|
# typical case.
|
|
seen = {
|
|
smolmachines_bundle_subnet(s)[0]
|
|
for s in ("a", "b", "c", "d", "e", "alpha", "beta", "gamma")
|
|
}
|
|
self.assertGreater(len(seen), 1)
|
|
|
|
def test_skips_docker_default_octet(self):
|
|
# docker's default bridge sits at 172.17.x.x; operators
|
|
# often also see 192.168.17.x from VPN clients on macOS.
|
|
# The util skips octet 17 → 18 so the smolmachines subnet
|
|
# doesn't collide with that historical pain point.
|
|
for slug in (f"slug-{i}" for i in range(500)):
|
|
subnet, _, _ = smolmachines_bundle_subnet(slug)
|
|
self.assertNotEqual("192.168.17.0/24", subnet,
|
|
f"slug {slug!r} landed on the skipped octet")
|
|
|
|
|
|
class TestPreflight(unittest.TestCase):
|
|
def test_smolvm_present_returns_none(self):
|
|
with patch(
|
|
"bot_bottle.backend.smolmachines.util.shutil.which",
|
|
return_value="/usr/local/bin/smolvm",
|
|
):
|
|
self.assertIsNone(smolmachines_preflight())
|
|
|
|
def test_missing_smolvm_dies(self):
|
|
with patch(
|
|
"bot_bottle.backend.smolmachines.util.shutil.which",
|
|
return_value=None,
|
|
):
|
|
with self.assertRaises(SystemExit) as cm:
|
|
smolmachines_preflight()
|
|
self.assertNotEqual(0, cm.exception.code)
|
|
|
|
def test_install_pointer_in_error(self):
|
|
import io
|
|
import sys
|
|
with patch(
|
|
"bot_bottle.backend.smolmachines.util.shutil.which",
|
|
return_value=None,
|
|
):
|
|
captured = io.StringIO()
|
|
with patch.object(sys, "stderr", captured):
|
|
with self.assertRaises(SystemExit):
|
|
smolmachines_preflight()
|
|
msg = captured.getvalue()
|
|
self.assertIn("smolvm", msg)
|
|
self.assertIn("smolmachines.com/install.sh", msg)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|