feat(oci): Recreate for multi-container apps and CPU/memory in every advanced install

This commit is contained in:
MacRimi
2026-10-01 19:39:01 +02:00
parent d137bb3d31
commit a4cb9936a5
29 changed files with 1405 additions and 110 deletions
+55
View File
@@ -0,0 +1,55 @@
"""A static address another device of the network already uses is not accepted."""
from pathlib import Path
import sys
import unittest
from unittest.mock import patch
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "src"))
from proxmenux_oci import network
BRIDGES = [{"iface": "vmbr0", "cidr": "192.168.0.50/24", "gateway": "192.168.0.1"}]
class SequenceUI:
def __init__(self, answers):
self.answers = iter(answers)
self.messages = []
def choose(self, *_args, **_kwargs):
return next(self.answers)
def ask(self, *_args, **_kwargs):
return next(self.answers)
def message(self, text):
self.messages.append(text)
@patch("proxmenux_oci.i18n.language", return_value="en")
@patch.object(network.host, "bridges", return_value=BRIDGES)
@patch.object(network, "addresses_in_use", return_value=set())
class StaticAddressInUseTests(unittest.TestCase):
def test_an_address_that_answers_is_asked_again(self, *_):
ui = SequenceUI([network.STATIC, "192.168.0.99/24", "192.168.0.170/24", "192.168.0.1"])
with patch.object(network.host, "address_answers", side_effect=lambda ip, bridge: ip == "192.168.0.99") as probe:
addresses, gateway = network.ask_addresses(ui, "vmbr0", [""])
self.assertEqual((addresses[""], gateway), ("192.168.0.170/24", "192.168.0.1"))
self.assertEqual([call.args for call in probe.call_args_list],
[("192.168.0.99", "vmbr0"), ("192.168.0.170", "vmbr0")])
self.assertEqual(len(ui.messages), 1)
self.assertIn("192.168.0.99", ui.messages[0])
def test_the_address_the_container_already_has_is_not_probed(self, *_):
ui = SequenceUI([network.STATIC, "192.168.0.169/24", "192.168.0.1"])
with patch.object(network.host, "address_answers", return_value=True) as probe:
addresses, _gateway = network.ask_addresses(ui, "vmbr0", [""], {"": "192.168.0.169/24"}, "192.168.0.1")
self.assertEqual(addresses[""], "192.168.0.169/24")
probe.assert_not_called()
self.assertEqual(ui.messages, [])
if __name__ == "__main__":
unittest.main()