mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 10:59:59 +00:00
48 lines
1.3 KiB
Python
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()
|