Files
computer-playbook/tests/unit/python/plugins/lookup/test_mesh_address.py
T

57 lines
1.6 KiB
Python

from __future__ import annotations
import unittest
from ansible.errors import AnsibleError
import plugins.lookup.mesh_address as module
def _hostvars(host: str, *interfaces: dict) -> dict:
return {
host: {
"applications": {
"svc-net-wireguard": {"networks": {"interfaces": list(interfaces)}}
}
}
}
def _run(host: str, hostvars: dict) -> str:
return module.LookupModule().run([host], variables={"hostvars": hostvars})[0]
class TestMeshAddress(unittest.TestCase):
def test_the_primary_interface_is_returned(self):
hostvars = _hostvars(
"nfs",
{
"name": "gamma",
"host": "nfs",
"address": "10.100.12.11",
"primary": False,
},
{"name": "beta", "host": "nfs", "address": "10.100.11.11", "primary": True},
)
self.assertEqual("10.100.11.11", _run("nfs", hostvars))
def test_an_entry_another_host_owns_is_ignored(self):
hostvars = _hostvars(
"wrk",
{"name": "swarm", "host": "mgr", "address": "10.100.0.1", "primary": True},
)
self.assertEqual("", _run("wrk", hostvars))
def test_a_host_off_the_mesh_has_no_address(self):
self.assertEqual("", _run("wrk", {"wrk": {}}))
self.assertEqual("", _run("absent", {}))
def test_exactly_one_hostname_is_required(self):
for terms in ([], ["a", "b"]):
with self.subTest(terms=terms), self.assertRaises(AnsibleError):
module.LookupModule().run(terms, variables={})
if __name__ == "__main__":
unittest.main()