summaryrefslogtreecommitdiff
path: root/tests/unit/modules/test_vyos_bgp_global.py
diff options
context:
space:
mode:
authoromnom62 <75066712+omnom62@users.noreply.github.com>2026-08-22 01:36:21 +1000
committerGitHub <noreply@github.com>2026-08-21 10:36:21 -0500
commit7a6b5e4f3a7a021cfa75faa7bf833741dfc09cff (patch)
tree82dad9c7ca58b7c88ac25f2ef7b04413e259a260 /tests/unit/modules/test_vyos_bgp_global.py
parentcb738721c15ac01f49f66144dae80eb478331f77 (diff)
downloadrest.vyos-7a6b5e4f3a7a021cfa75faa7bf833741dfc09cff.tar.gz
rest.vyos-7a6b5e4f3a7a021cfa75faa7bf833741dfc09cff.zip
T8989: wave3 user, bgp_global, bgp_address_family, facts, firewall_global
* T8989: vyos_user module * T8989: Wave 3 vyos_user module with integration and unit tests * T8989: Wave 3 vyos_bgp_global module with integration and unit tests * T8989: Wave 3 vyos_bgp_address_family module with integration and unit tests * T8989: Add overridden integration tests for vyos_bgp_global and vyos_bgp_address_family * T8989: vyos_facts * T8989: Add vyos_facts integration and unit tests with fixtures * T8989: vyos_firewall_global module * T8989: vyos_firewall_global module with integration and unit tests * T8989: vyos_firewall_rules module * T8989: vyos_firewall_rules module with integration and unit tests * T8989: vyos_firewall_interfaces module * T8989: vyos_firewall_interfaces module * T8989: vyos_firewall_interfaces UAT & SIT * T8989: vyos_firewall_interfaces UAT & SIT
Diffstat (limited to 'tests/unit/modules/test_vyos_bgp_global.py')
-rw-r--r--tests/unit/modules/test_vyos_bgp_global.py188
1 files changed, 188 insertions, 0 deletions
diff --git a/tests/unit/modules/test_vyos_bgp_global.py b/tests/unit/modules/test_vyos_bgp_global.py
new file mode 100644
index 0000000..f91516b
--- /dev/null
+++ b/tests/unit/modules/test_vyos_bgp_global.py
@@ -0,0 +1,188 @@
+# -*- coding: utf-8 -*-
+from __future__ import absolute_import, division, print_function
+
+
+__metaclass__ = type
+
+import json
+import os
+import unittest
+
+from unittest.mock import MagicMock
+
+from ansible_collections.vyos.rest.plugins.modules.vyos_bgp_global import (
+ build_commands,
+ get_running_config,
+)
+
+
+_BASE = ["protocols", "bgp"]
+
+
+def load_fixture(filename):
+ fixtures_dir = os.path.join(os.path.dirname(__file__), "..", "fixtures")
+ with open(os.path.join(fixtures_dir, filename)) as f:
+ return json.load(f)
+
+
+class VyOSModuleTestCase(unittest.TestCase):
+ def setUp(self):
+ self.mock_vyos = MagicMock()
+ self.fixture = load_fixture("bgp_global_running.json")
+ self.mock_vyos.get_config = MagicMock(return_value=self.fixture)
+
+
+class TestVyOSBgpGlobalGetRunning(VyOSModuleTestCase):
+
+ def test_parses_as_number(self):
+ result = get_running_config(self.mock_vyos)
+ self.assertEqual(result["as_number"], 65000)
+
+ def test_parses_parameters(self):
+ result = get_running_config(self.mock_vyos)
+ self.assertEqual(result["parameters"]["router_id"], "192.0.1.1")
+ self.assertTrue(result["parameters"]["log_neighbor_changes"])
+
+ def test_parses_neighbors(self):
+ result = get_running_config(self.mock_vyos)
+ nb_addrs = [n["neighbor_address"] for n in result["neighbors"]]
+ self.assertIn("192.0.2.1", nb_addrs)
+ self.assertIn("192.0.2.2", nb_addrs)
+ nb1 = next(n for n in result["neighbors"] if n["neighbor_address"] == "192.0.2.1")
+ self.assertEqual(nb1["remote_as"], 65001)
+ self.assertEqual(nb1["description"], "peer1")
+ self.assertEqual(nb1["timers"]["holdtime"], 30)
+ self.assertEqual(nb1["timers"]["keepalive"], 10)
+ nb2 = next(n for n in result["neighbors"] if n["neighbor_address"] == "192.0.2.2")
+ self.assertEqual(nb2["ebgp_multihop"], 2)
+ self.assertEqual(nb2["update_source"], "eth0")
+
+ def test_parses_peer_groups(self):
+ result = get_running_config(self.mock_vyos)
+ self.assertEqual(len(result["peer_groups"]), 1)
+ self.assertEqual(result["peer_groups"][0]["peer_group"], "PG1")
+ self.assertEqual(result["peer_groups"][0]["remote_as"], 65003)
+
+ def test_empty_config(self):
+ self.mock_vyos.get_config = MagicMock(return_value={})
+ result = get_running_config(self.mock_vyos)
+ self.assertEqual(result, {})
+
+
+class TestVyOSBgpGlobalBuildCommands(unittest.TestCase):
+
+ def _have(self):
+ return {
+ "as_number": 65000,
+ "parameters": {"router_id": "192.0.1.1"},
+ "neighbors": [
+ {
+ "neighbor_address": "192.0.2.1",
+ "remote_as": 65001,
+ "description": "peer1",
+ },
+ ],
+ "peer_groups": [{"peer_group": "PG1", "remote_as": 65003}],
+ }
+
+ def test_deleted_with_have(self):
+ cmds = build_commands({}, self._have(), "deleted")
+ self.assertEqual(cmds, [("delete", _BASE)])
+
+ def test_deleted_without_have(self):
+ cmds = build_commands({}, {}, "deleted")
+ self.assertEqual(cmds, [])
+
+ def test_merged_as_number(self):
+ config = {"as_number": 65000}
+ cmds = build_commands(config, {}, "merged")
+ self.assertIn(("set", _BASE + ["system-as", "65000"]), cmds)
+
+ def test_merged_router_id(self):
+ config = {"as_number": 65000, "parameters": {"router_id": "192.0.1.1"}}
+ cmds = build_commands(config, {}, "merged")
+ self.assertIn(("set", _BASE + ["parameters", "router-id", "192.0.1.1"]), cmds)
+
+ def test_merged_neighbor(self):
+ config = {
+ "as_number": 65000,
+ "neighbors": [
+ {"neighbor_address": "192.0.2.1", "remote_as": 65001},
+ ],
+ }
+ cmds = build_commands(config, {}, "merged")
+ self.assertIn(("set", _BASE + ["neighbor", "192.0.2.1", "remote-as", "65001"]), cmds)
+
+ def test_merged_neighbor_timers(self):
+ config = {
+ "as_number": 65000,
+ "neighbors": [
+ {
+ "neighbor_address": "192.0.2.1",
+ "remote_as": 65001,
+ "timers": {"holdtime": 30, "keepalive": 10},
+ },
+ ],
+ }
+ cmds = build_commands(config, {}, "merged")
+ self.assertIn(
+ ("set", _BASE + ["neighbor", "192.0.2.1", "timers", "holdtime", "30"]),
+ cmds,
+ )
+ self.assertIn(
+ ("set", _BASE + ["neighbor", "192.0.2.1", "timers", "keepalive", "10"]),
+ cmds,
+ )
+
+ def test_merged_idempotent(self):
+ have = self._have()
+ config = {
+ "as_number": 65000,
+ "parameters": {"router_id": "192.0.1.1"},
+ "neighbors": [
+ {
+ "neighbor_address": "192.0.2.1",
+ "remote_as": 65001,
+ "description": "peer1",
+ },
+ ],
+ "peer_groups": [{"peer_group": "PG1", "remote_as": 65003}],
+ }
+ cmds = build_commands(config, have, "merged")
+ self.assertEqual(cmds, [])
+
+ def test_replaced_idempotent(self):
+ have = self._have()
+ config = {
+ "as_number": 65000,
+ "parameters": {"router_id": "192.0.1.1"},
+ "neighbors": [
+ {
+ "neighbor_address": "192.0.2.1",
+ "remote_as": 65001,
+ "description": "peer1",
+ },
+ ],
+ "peer_groups": [{"peer_group": "PG1", "remote_as": 65003}],
+ }
+ cmds = build_commands(config, have, "replaced")
+ self.assertEqual(cmds, [])
+
+ def test_replaced_rebuilds_on_change(self):
+ have = self._have()
+ config = {"as_number": 65000, "parameters": {"router_id": "192.0.1.2"}}
+ cmds = build_commands(config, have, "replaced")
+ self.assertEqual(cmds[0], ("delete", _BASE))
+ self.assertIn(("set", _BASE + ["parameters", "router-id", "192.0.1.2"]), cmds)
+
+ def test_merged_peer_group(self):
+ config = {
+ "as_number": 65000,
+ "peer_groups": [{"peer_group": "PG1", "remote_as": 65003}],
+ }
+ cmds = build_commands(config, {}, "merged")
+ self.assertIn(("set", _BASE + ["peer-group", "PG1", "remote-as", "65003"]), cmds)
+
+
+if __name__ == "__main__":
+ unittest.main()