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

48 lines
1.3 KiB
Python

from __future__ import annotations
import unittest
from ansible.errors import AnsibleError
import plugins.lookup.mesh_ranges as module
POOLS = "{{ [WIREGUARD_SUBNET_POOL] }}"
class _Templar:
def __init__(self, rendered):
self.rendered = rendered
def template(self, value, **_):
return self.rendered.get(value, value) if isinstance(value, str) else value
def _run(pools, rendered=None):
lookup = module.LookupModule()
lookup._templar = _Templar(rendered or {})
return lookup.run(None, variables={"WIREGUARD_SUBNET_POOLS": pools})[0]
class TestMeshRanges(unittest.TestCase):
def test_the_declared_template_is_rendered_before_it_is_returned(self):
self.assertEqual(
_run(POOLS, {POOLS: ["10.100.0.0/16"]}),
["10.100.0.0/16"],
)
def test_a_pool_that_stays_a_template_fails_instead_of_leaking(self):
with self.assertRaises(AnsibleError) as raised:
_run(POOLS)
self.assertIn("did not render", str(raised.exception))
def test_a_literal_list_passes_through(self):
self.assertEqual(_run(["10.100.0.0/16"]), ["10.100.0.0/16"])
def test_terms_are_refused(self):
with self.assertRaises(AnsibleError):
module.LookupModule().run(["x"], variables={})
if __name__ == "__main__":
unittest.main()