# Copyright (c) 2023-2025 Arista Networks, Inc. # Use of this source code is governed by the Apache License 2.0 # that can be found in the LICENSE file. """Tests for anta.tests.bfd.py.""" # pylint: disable=C0302 from __future__ import annotations import sys from typing import TYPE_CHECKING, Any from anta.models import AntaTest from anta.result_manager.models import AntaTestStatus from anta.tests.bfd import VerifyBFDPeersHealth, VerifyBFDPeersIntervals, VerifyBFDPeersRegProtocols, VerifyBFDSpecificPeers from tests.units.anta_tests import test if TYPE_CHECKING: from tests.units.anta_tests import AntaUnitTestDataDict DATA: AntaUnitTestDataDict = { (VerifyBFDPeersIntervals, "success"): { "eos_data": [ { "vrfs": { "default": { "ipv4Neighbors": { "192.0.255.7": { "peerStats": { "": {"peerStatsDetail": {"operTxInterval": 1200000, "operRxInterval": 1200000, "detectMult": 3, "detectTime": 3600000}} } } } }, "MGMT": { "ipv4Neighbors": { "192.0.255.70": { "peerStats": { "": {"peerStatsDetail": {"operTxInterval": 1200000, "operRxInterval": 1200000, "detectMult": 3, "detectTime": 3600000}} } } } }, } } ], "inputs": { "bfd_peers": [ {"peer_address": "192.0.255.7", "vrf": "default", "tx_interval": 1200, "rx_interval": 1200, "multiplier": 3}, {"peer_address": "192.0.255.70", "vrf": "MGMT", "tx_interval": 1200, "rx_interval": 1200, "multiplier": 3}, ] }, "expected": {"result": AntaTestStatus.SUCCESS}, }, (VerifyBFDPeersIntervals, "success-detection-time"): { "eos_data": [ { "vrfs": { "default": { "ipv4Neighbors": { "192.0.255.7": { "peerStats": { "": {"peerStatsDetail": {"operTxInterval": 1200000, "operRxInterval": 1200000, "detectMult": 3, "detectTime": 3600000}} } } } }, "MGMT": { "ipv4Neighbors": { "192.0.255.70": { "peerStats": { "": {"peerStatsDetail": {"operTxInterval": 1200000, "operRxInterval": 1200000, "detectMult": 3, "detectTime": 3600000}} } } } }, } } ], "inputs": { "bfd_peers": [ {"peer_address": "192.0.255.7", "vrf": "default", "tx_interval": 1200, "rx_interval": 1200, "multiplier": 3, "detection_time": 3600}, {"peer_address": "192.0.255.70", "vrf": "MGMT", "tx_interval": 1200, "rx_interval": 1200, "multiplier": 3, "detection_time": 3600}, ] }, "expected": {"result": AntaTestStatus.SUCCESS}, }, (VerifyBFDPeersIntervals, "failure-no-peer"): { "eos_data": [ { "vrfs": { "default": { "ipv4Neighbors": { "192.0.255.7": { "peerStats": { "": {"peerStatsDetail": {"operTxInterval": 1200000, "operRxInterval": 1200000, "detectMult": 3, "detectTime": 3600000}} } } } }, "MGMT": { "ipv4Neighbors": { "192.0.255.71": { "peerStats": { "": {"peerStatsDetail": {"operTxInterval": 1200000, "operRxInterval": 1200000, "detectMult": 3, "detectTime": 3600000}} } } } }, } } ], "inputs": { "bfd_peers": [ {"peer_address": "192.0.255.7", "vrf": "CS", "tx_interval": 1200, "rx_interval": 1200, "multiplier": 3, "detection_time": 3600}, {"peer_address": "192.0.255.70", "vrf": "MGMT", "tx_interval": 1200, "rx_interval": 1200, "multiplier": 3, "detection_time": 3600}, ] }, "expected": {"result": AntaTestStatus.FAILURE, "messages": ["Peer: 192.0.255.7 VRF: CS - Not found", "Peer: 192.0.255.70 VRF: MGMT - Not found"]}, }, (VerifyBFDPeersIntervals, "failure-incorrect-timers"): { "eos_data": [ { "vrfs": { "default": { "ipv4Neighbors": { "192.0.255.7": { "peerStats": { "": {"peerStatsDetail": {"operTxInterval": 1300000, "operRxInterval": 1200000, "detectMult": 4, "detectTime": 4000000}} } } } }, "MGMT": { "ipv4Neighbors": { "192.0.255.70": { "peerStats": {"": {"peerStatsDetail": {"operTxInterval": 120000, "operRxInterval": 120000, "detectMult": 5, "detectTime": 4000000}}} } } }, } } ], "inputs": { "bfd_peers": [ {"peer_address": "192.0.255.7", "vrf": "default", "tx_interval": 1200, "rx_interval": 1200, "multiplier": 3}, {"peer_address": "192.0.255.70", "vrf": "MGMT", "tx_interval": 1200, "rx_interval": 1200, "multiplier": 3}, ] }, "expected": { "result": AntaTestStatus.FAILURE, "messages": [ "Peer: 192.0.255.7 VRF: default - Incorrect Transmit interval - Expected: 1200 Actual: 1300", "Peer: 192.0.255.7 VRF: default - Incorrect Multiplier - Expected: 3 Actual: 4", "Peer: 192.0.255.70 VRF: MGMT - Incorrect Transmit interval - Expected: 1200 Actual: 120", "Peer: 192.0.255.70 VRF: MGMT - Incorrect Receive interval - Expected: 1200 Actual: 120", "Peer: 192.0.255.70 VRF: MGMT - Incorrect Multiplier - Expected: 3 Actual: 5", ], }, }, (VerifyBFDPeersIntervals, "failure-incorrect-timers-with-detection-time"): { "eos_data": [ { "vrfs": { "default": { "ipv4Neighbors": { "192.0.255.7": { "peerStats": { "": {"peerStatsDetail": {"operTxInterval": 1300000, "operRxInterval": 1200000, "detectMult": 4, "detectTime": 4000000}} } } } }, "MGMT": { "ipv4Neighbors": { "192.0.255.70": { "peerStats": {"": {"peerStatsDetail": {"operTxInterval": 120000, "operRxInterval": 120000, "detectMult": 5, "detectTime": 4000000}}} } } }, } } ], "inputs": { "bfd_peers": [ {"peer_address": "192.0.255.7", "vrf": "default", "tx_interval": 1200, "rx_interval": 1200, "multiplier": 3, "detection_time": 3600}, {"peer_address": "192.0.255.70", "vrf": "MGMT", "tx_interval": 1200, "rx_interval": 1200, "multiplier": 3, "detection_time": 3600}, ] }, "expected": { "result": AntaTestStatus.FAILURE, "messages": [ "Peer: 192.0.255.7 VRF: default - Incorrect Transmit interval - Expected: 1200 Actual: 1300", "Peer: 192.0.255.7 VRF: default - Incorrect Multiplier - Expected: 3 Actual: 4", "Peer: 192.0.255.7 VRF: default - Incorrect Detection Time - Expected: 3600 Actual: 4000", "Peer: 192.0.255.70 VRF: MGMT - Incorrect Transmit interval - Expected: 1200 Actual: 120", "Peer: 192.0.255.70 VRF: MGMT - Incorrect Receive interval - Expected: 1200 Actual: 120", "Peer: 192.0.255.70 VRF: MGMT - Incorrect Multiplier - Expected: 3 Actual: 5", "Peer: 192.0.255.70 VRF: MGMT - Incorrect Detection Time - Expected: 3600 Actual: 4000", ], }, }, (VerifyBFDSpecificPeers, "success"): { "eos_data": [ { "vrfs": { "default": {"ipv4Neighbors": {"192.0.255.7": {"peerStats": {"": {"status": "up", "remoteDisc": 108328132}}}}}, "MGMT": {"ipv4Neighbors": {"192.0.255.70": {"peerStats": {"": {"status": "up", "remoteDisc": 108328132}}}}}, } } ], "inputs": {"bfd_peers": [{"peer_address": "192.0.255.7", "vrf": "default"}, {"peer_address": "192.0.255.70", "vrf": "MGMT"}]}, "expected": {"result": AntaTestStatus.SUCCESS}, }, (VerifyBFDSpecificPeers, "failure-no-peer"): { "eos_data": [ { "vrfs": { "default": {"ipv4Neighbors": {"192.0.255.7": {"peerStats": {"": {"status": "up", "remoteDisc": 108328132}}}}}, "MGMT": {"ipv4Neighbors": {"192.0.255.71": {"peerStats": {"": {"status": "up", "remoteDisc": 108328132}}}}}, } } ], "inputs": {"bfd_peers": [{"peer_address": "192.0.255.7", "vrf": "CS"}, {"peer_address": "192.0.255.70", "vrf": "MGMT"}]}, "expected": {"result": AntaTestStatus.FAILURE, "messages": ["Peer: 192.0.255.7 VRF: CS - Not found", "Peer: 192.0.255.70 VRF: MGMT - Not found"]}, }, (VerifyBFDSpecificPeers, "failure-session-down"): { "eos_data": [ { "vrfs": { "default": {"ipv4Neighbors": {"192.0.255.7": {"peerStats": {"": {"status": "down", "remoteDisc": 108328132}}}}}, "MGMT": {"ipv4Neighbors": {"192.0.255.70": {"peerStats": {"": {"status": "down", "remoteDisc": 0}}}}}, } } ], "inputs": {"bfd_peers": [{"peer_address": "192.0.255.7", "vrf": "default"}, {"peer_address": "192.0.255.70", "vrf": "MGMT"}]}, "expected": { "result": AntaTestStatus.FAILURE, "messages": [ "Peer: 192.0.255.7 VRF: default - Session not properly established - State: down Remote Discriminator: 108328132", "Peer: 192.0.255.70 VRF: MGMT - Session not properly established - State: down Remote Discriminator: 0", ], }, }, (VerifyBFDPeersHealth, "success"): { "eos_data": [ { "vrfs": { "default": { "ipv4Neighbors": { "192.0.255.7": {"peerStats": {"": {"status": "up", "remoteDisc": 3940685114, "lastDown": 1703657258.652725, "l3intf": ""}}} }, "ipv6Neighbors": {}, }, "MGMT": { "ipv4Neighbors": { "192.0.255.71": {"peerStats": {"": {"status": "up", "remoteDisc": 3940685114, "lastDown": 1703657258.652725, "l3intf": ""}}} }, "ipv6Neighbors": {}, }, } }, {"utcTime": 1703667348.111288}, ], "inputs": {"down_threshold": 2}, "expected": {"result": AntaTestStatus.SUCCESS}, }, (VerifyBFDPeersHealth, "failure-no-peer"): { "eos_data": [ {"vrfs": {"MGMT": {"ipv6Neighbors": {}, "ipv4Neighbors": {}}, "default": {"ipv6Neighbors": {}, "ipv4Neighbors": {}}}}, {"utcTime": 1703658481.8778424}, ], "expected": {"result": AntaTestStatus.FAILURE, "messages": ["No IPv4 BFD peers are configured for any VRF"]}, }, (VerifyBFDPeersHealth, "failure-session-down"): { "eos_data": [ { "vrfs": { "default": { "ipv4Neighbors": { "192.0.255.7": {"peerStats": {"": {"status": "down", "remoteDisc": 0, "lastDown": 1703657258.652725, "l3intf": ""}}}, "192.0.255.70": {"peerStats": {"": {"status": "up", "remoteDisc": 3940685114, "lastDown": 1703657258.652725, "l3intf": ""}}}, }, "ipv6Neighbors": {}, }, "MGMT": { "ipv4Neighbors": {"192.0.255.71": {"peerStats": {"": {"status": "down", "remoteDisc": 0, "lastDown": 1703657258.652725, "l3intf": ""}}}}, "ipv6Neighbors": {}, }, } }, {"utcTime": 1703658481.8778424}, ], "inputs": {}, "expected": { "result": AntaTestStatus.FAILURE, "messages": [ "Peer: 192.0.255.7 VRF: default - Session not properly established - State: down Remote Discriminator: 0", "Peer: 192.0.255.71 VRF: MGMT - Session not properly established - State: down Remote Discriminator: 0", ], }, }, (VerifyBFDPeersHealth, "failure-session-up-disc"): { "eos_data": [ { "vrfs": { "default": { "ipv4Neighbors": { "192.0.255.7": {"peerStats": {"": {"status": "up", "remoteDisc": 0, "lastDown": 1703657258.652725, "l3intf": "Ethernet2"}}}, "192.0.255.71": {"peerStats": {"": {"status": "up", "remoteDisc": 0, "lastDown": 1703657258.652725, "l3intf": "Ethernet2"}}}, }, "ipv6Neighbors": {}, } } }, {"utcTime": 1703658481.8778424}, ], "inputs": {}, "expected": { "result": AntaTestStatus.FAILURE, "messages": [ "Peer: 192.0.255.7 VRF: default - Session not properly established - State: up Remote Discriminator: 0", "Peer: 192.0.255.71 VRF: default - Session not properly established - State: up Remote Discriminator: 0", ], }, }, (VerifyBFDPeersHealth, "failure-last-down"): { "eos_data": [ { "vrfs": { "default": { "ipv4Neighbors": { "192.0.255.7": {"peerStats": {"": {"status": "up", "remoteDisc": 3940685114, "lastDown": 1703657258.652725, "l3intf": ""}}}, "192.0.255.71": {"peerStats": {"": {"status": "up", "remoteDisc": 3940685114, "lastDown": 1703657258.652725, "l3intf": ""}}}, "192.0.255.17": {"peerStats": {"": {"status": "up", "remoteDisc": 3940685114, "lastDown": 1703657258.652725, "l3intf": ""}}}, }, "ipv6Neighbors": {}, } } }, {"utcTime": 1703667348.111288}, ], "inputs": {"down_threshold": 4}, "expected": { "result": AntaTestStatus.FAILURE, "messages": [ "Peer: 192.0.255.7 VRF: default - Session failure detected within the expected uptime threshold (3 hours ago)", "Peer: 192.0.255.71 VRF: default - Session failure detected within the expected uptime threshold (3 hours ago)", "Peer: 192.0.255.17 VRF: default - Session failure detected within the expected uptime threshold (3 hours ago)", ], }, }, (VerifyBFDPeersRegProtocols, "success"): { "eos_data": [ { "vrfs": { "default": { "ipv4Neighbors": { "192.0.255.7": {"peerStats": {"": {"status": "up", "remoteDisc": 108328132, "peerStatsDetail": {"role": "active", "apps": ["ospf"]}}}} } }, "MGMT": { "ipv4Neighbors": { "192.0.255.70": {"peerStats": {"": {"status": "up", "remoteDisc": 108328132, "peerStatsDetail": {"role": "active", "apps": ["bgp"]}}}} } }, } } ], "inputs": { "bfd_peers": [ {"peer_address": "192.0.255.7", "vrf": "default", "protocols": ["ospf"]}, {"peer_address": "192.0.255.70", "vrf": "MGMT", "protocols": ["bgp"]}, ] }, "expected": {"result": AntaTestStatus.SUCCESS}, }, (VerifyBFDPeersRegProtocols, "failure"): { "eos_data": [ { "vrfs": { "default": {"ipv4Neighbors": {"192.0.255.7": {"peerStats": {"": {"status": "up", "peerStatsDetail": {"role": "active", "apps": ["ospf"]}}}}}}, "MGMT": { "ipv4Neighbors": { "192.0.255.70": {"peerStats": {"": {"status": "up", "remoteDisc": 0, "peerStatsDetail": {"role": "active", "apps": ["bgp"]}}}} } }, } } ], "inputs": { "bfd_peers": [ {"peer_address": "192.0.255.7", "vrf": "default", "protocols": ["isis"]}, {"peer_address": "192.0.255.70", "vrf": "MGMT", "protocols": ["isis", "ospf"]}, ] }, "expected": { "result": AntaTestStatus.FAILURE, "messages": [ "Peer: 192.0.255.7 VRF: default - `isis` routing protocol(s) not configured", "Peer: 192.0.255.70 VRF: MGMT - `isis`, `ospf` routing protocol(s) not configured", ], }, }, (VerifyBFDPeersRegProtocols, "failure-not-found"): { "eos_data": [{"vrfs": {"default": {}, "MGMT": {}}}], "inputs": { "bfd_peers": [ {"peer_address": "192.0.255.7", "vrf": "default", "protocols": ["isis"]}, {"peer_address": "192.0.255.70", "vrf": "MGMT", "protocols": ["isis"]}, ] }, "expected": {"result": AntaTestStatus.FAILURE, "messages": ["Peer: 192.0.255.7 VRF: default - Not found", "Peer: 192.0.255.70 VRF: MGMT - Not found"]}, }, }