refactor: convert script to automtu package with CI workflow

https://chatgpt.com/share/697112b2-0410-800f-93ff-9372b603d43f
This commit is contained in:
2026-01-21 18:53:44 +01:00
parent 78da3ffc73
commit dcc7a68973
23 changed files with 905 additions and 896 deletions

58
tests/unit/test_wg.py Normal file
View File

@@ -0,0 +1,58 @@
import unittest
from unittest.mock import patch
import automtu.wg as wg
class TestWg(unittest.TestCase):
def test_wg_peer_endpoints_from_wg_show(self) -> None:
# wg show wg0 endpoints output
out = "abcde12345\t46.4.224.77:51820\nfffff00000\t[2a01:db8::1]:51820\n"
with (
patch(
"automtu.wg._run",
side_effect=lambda cmd: out if cmd[:3] == ["wg", "show", "wg0"] else "",
),
patch("automtu.wg.iface_exists", return_value=True),
patch("automtu.wg._rc", return_value=0),
):
eps = wg.wg_peer_endpoints("wg0")
self.assertEqual(eps, ["46.4.224.77", "2a01:db8::1"])
def test_wg_peer_endpoints_fallback_showconf(self) -> None:
show_endpoints_empty = ""
showconf = (
"[Interface]\n"
"PrivateKey = x\n"
"[Peer]\n"
"Endpoint = 46.4.224.77:51820\n"
"[Peer]\n"
"Endpoint = [2a01:db8::1]:51820\n"
)
def fake_run(cmd: list[str]) -> str:
if cmd == ["wg", "show", "wg0", "endpoints"]:
return show_endpoints_empty
if cmd == ["wg", "showconf", "wg0"]:
return showconf
return ""
with patch("automtu.wg._run", side_effect=fake_run):
eps = wg.wg_peer_endpoints("wg0")
self.assertEqual(eps, ["46.4.224.77", "2a01:db8::1"])
def test_wg_is_active_uses_iface_exists_and_wg_show_rc(self) -> None:
with (
patch("automtu.wg.iface_exists", return_value=True),
patch("automtu.wg._rc", return_value=0),
):
self.assertTrue(wg.wg_is_active("wg0"))
with patch("automtu.wg.iface_exists", return_value=False):
self.assertFalse(wg.wg_is_active("wg0"))
if __name__ == "__main__":
unittest.main(verbosity=2)