Files
computer-playbook/tests/unit/plugins/lookup/test_compose_external_networks.py
T
kevinveenbirkenbachandClaude Opus 4.8 b1b24b9014 feat(networks): external-network lookup + probe-before-create with driver-drift fail
compute_external_network_roles() + compose_external_networks lookup expose which foreign provider networks a compose project references as external, so the swarm deploy path can pre-create them. network/create.yml probes for an existing network instead of unconditional state:present (the module's delete+recreate on attached networks crashed redeploys) and hard-fails on driver drift instead of silently skipping it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 22:18:20 +02:00

72 lines
2.4 KiB
Python

"""Unit tests for plugins/lookup/compose_external_networks.py.
Mocks the Ansible-side machinery and asserts the plugin glue resolves
variables and chains ``compute_external_network_roles`` correctly. The
computation itself is covered by tests.unit.utils.networks.test_render.
"""
from __future__ import annotations
import unittest
from unittest import mock
from ansible.errors import AnsibleError
from plugins.lookup.compose_external_networks import LookupModule
class _Templar:
def __init__(self, vars_=None):
self.available_variables = vars_ or {}
def template(self, value, **_):
return value
def _make_lookup(vars_=None):
lm = LookupModule()
lm._templar = _Templar(vars_ or {})
lm._loader = mock.MagicMock()
return lm
class TestComposeExternalNetworksLookup(unittest.TestCase):
def test_raises_when_positional_terms_supplied(self):
lm = _make_lookup({"application_id": "x", "DEPLOYMENT_MODE": "swarm"})
with self.assertRaises(AnsibleError):
lm.run(["unexpected"], variables=lm._templar.available_variables)
def test_raises_when_application_id_missing(self):
lm = _make_lookup({"DEPLOYMENT_MODE": "swarm"})
with self.assertRaises(AnsibleError):
lm.run([], variables={})
def test_returns_role_list_from_helper(self):
vars_ = {"application_id": "web-app-gitea", "DEPLOYMENT_MODE": "swarm"}
lm = _make_lookup(vars_)
with (
mock.patch(
"plugins.lookup.compose_external_networks.build_service_registry_from_applications",
return_value={},
),
mock.patch(
"plugins.lookup.compose_external_networks.lookup_loader"
) as loader_mock,
mock.patch(
"plugins.lookup.compose_external_networks.compute_external_network_roles",
return_value=["svc-db-redis", "svc-db-openldap"],
) as helper_mock,
):
loader_mock.get.return_value = mock.MagicMock(run=lambda *_a, **_k: [""])
result = lm.run([], variables=vars_)
self.assertEqual(result, [["svc-db-redis", "svc-db-openldap"]])
kwargs = helper_mock.call_args.kwargs
self.assertEqual(kwargs["application_id"], "web-app-gitea")
self.assertEqual(kwargs["deployment_mode"], "swarm")
if __name__ == "__main__":
unittest.main()