From 19fecd46a2980fcf97905aa2485513a6f79271eb Mon Sep 17 00:00:00 2001
From: khramshinr <khramshinr@gmail.com>
Date: Fri, 1 Mar 2024 12:39:28 +0800
Subject: vrrp: T6020: vrrp health-check script not applied correctly in
 keepalived.conf

Added health-check to sync-group in CLI
Don't use instance health-check when instance in sync group member
Disallow wrong healtch-check configurations
New smoke test
---
 .../scripts/cli/test_high-availability_vrrp.py     | 53 ++++++++++++++++++++++
 1 file changed, 53 insertions(+)

(limited to 'smoketest/scripts/cli/test_high-availability_vrrp.py')

diff --git a/smoketest/scripts/cli/test_high-availability_vrrp.py b/smoketest/scripts/cli/test_high-availability_vrrp.py
index 1bb35e422..9ba06aef6 100755
--- a/smoketest/scripts/cli/test_high-availability_vrrp.py
+++ b/smoketest/scripts/cli/test_high-availability_vrrp.py
@@ -264,5 +264,58 @@ class TestVRRP(VyOSUnitTestSHIM.TestCase):
         self.assertIn(f'    {peer_address_1}', config)
         self.assertIn(f'    {peer_address_2}', config)
 
+    def test_check_health_script(self):
+        sync_group = 'VyOS'
+
+        for group in groups:
+            vlan_id = group.lstrip('VLAN')
+            vip = f'100.64.{vlan_id}.1/24'
+            group_base = base_path + ['vrrp', 'group', group]
+
+            self.cli_set(['interfaces', 'ethernet', vrrp_interface, 'vif', vlan_id, 'address', inc_ip(vip, 1) + '/' + vip.split('/')[-1]])
+
+            self.cli_set(group_base + ['interface', f'{vrrp_interface}.{vlan_id}'])
+            self.cli_set(group_base + ['address', vip])
+            self.cli_set(group_base + ['vrid', vlan_id])
+
+            self.cli_set(group_base + ['health-check', 'ping', '127.0.0.1'])
+
+        # commit changes
+        self.cli_commit()
+
+        for group in groups:
+            config = getConfig(f'vrrp_instance {group}')
+            self.assertIn(f'track_script', config)
+
+        self.cli_set(base_path + ['vrrp', 'sync-group', sync_group, 'member', groups[0]])
+
+        with self.assertRaises(ConfigSessionError):
+            self.cli_commit()
+
+        self.cli_delete(base_path + ['vrrp', 'group', groups[0], 'health-check'])
+        self.cli_commit()
+
+        for group in groups[1:]:
+            config = getConfig(f'vrrp_instance {group}')
+            self.assertIn(f'track_script', config)
+
+        config = getConfig(f'vrrp_instance {groups[0]}')
+        self.assertNotIn(f'track_script', config)
+
+        config = getConfig(f'vrrp_sync_group {sync_group}')
+        self.assertNotIn(f'track_script', config)
+
+        self.cli_set(base_path + ['vrrp', 'sync-group', sync_group, 'health-check', 'ping', '127.0.0.1'])
+
+        # commit changes
+        self.cli_commit()
+
+        config = getConfig(f'vrrp_instance {groups[0]}')
+        self.assertNotIn(f'track_script', config)
+
+        config = getConfig(f'vrrp_sync_group {sync_group}')
+        self.assertIn(f'track_script', config)
+
+
 if __name__ == '__main__':
     unittest.main(verbosity=2)
-- 
cgit v1.2.3