diff options
| author | omnom62 <75066712+omnom62@users.noreply.github.com> | 2026-08-22 01:36:21 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-21 10:36:21 -0500 |
| commit | 7a6b5e4f3a7a021cfa75faa7bf833741dfc09cff (patch) | |
| tree | 82dad9c7ca58b7c88ac25f2ef7b04413e259a260 /tests/unit/modules/test_vyos_bgp_global.py | |
| parent | cb738721c15ac01f49f66144dae80eb478331f77 (diff) | |
| download | rest.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.py | 188 |
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() |
