diff --git a/anta/tests/routing/bgp.py b/anta/tests/routing/bgp.py index f081f045b..adc68096a 100644 --- a/anta/tests/routing/bgp.py +++ b/anta/tests/routing/bgp.py @@ -408,12 +408,14 @@ def test(self) -> None: received_routes_cmd = self.instance_commands[peer_idx + num_peers] # Get the BGP route entries of each command - advertised_routes_entries = get_value(advertised_routes_cmd.json_output, f"vrfs.{peer.vrf}.bgpRouteEntries", default={}) - received_routes_entries = get_value(received_routes_cmd.json_output, f"vrfs.{peer.vrf}.bgpRouteEntries", default={}) + command_output = { + "Advertised": get_value(advertised_routes_cmd.json_output, f"vrfs.{peer.vrf}.bgpRouteEntries", default={}), + "Received": get_value(received_routes_cmd.json_output, f"vrfs.{peer.vrf}.bgpRouteEntries", default={}), + } # Validate both advertised and received routes for route_type, routes in zip(["Advertised", "Received"], [peer.advertised_routes, peer.received_routes]): - entries = advertised_routes_entries if route_type == "Advertised" else received_routes_entries + entries = command_output[route_type] for route in routes: # Check if the route is found if str(route) not in entries: @@ -516,7 +518,7 @@ def test(self) -> None: # If strict is True, check if only the specified capabilities are configured if peer.strict and sorted(peer.capabilities) != sorted(act_mp_caps): - self.result.is_failure(f"{peer} - Mismatch; Expected: {', '.join(peer.capabilities)} Actual: {', '.join(act_mp_caps)}") + self.result.is_failure(f"{peer} - Mismatch - Expected: {', '.join(peer.capabilities)} Actual: {', '.join(act_mp_caps)}") continue # Check each capability @@ -527,7 +529,7 @@ def test(self) -> None: # Check if the capability is advertised, received, and enabled elif not _check_bgp_neighbor_capability(capability_status): - self.result.is_failure(f"{peer} - {capability} not negotiated; {format_data(capability_status)}") + self.result.is_failure(f"{peer} - {capability} not negotiated - {format_data(capability_status)}") class VerifyBGPPeerASNCap(AntaTest): @@ -596,7 +598,7 @@ def test(self) -> None: # Check if the 4-octet ASN capability is advertised, received, and enabled if not _check_bgp_neighbor_capability(capablity_status): - self.result.is_failure(f"{peer} - 4-octet ASN capability not negotiated; {format_data(capablity_status)}") + self.result.is_failure(f"{peer} - 4-octet ASN capability not negotiated - {format_data(capablity_status)}") class VerifyBGPPeerRouteRefreshCap(AntaTest): @@ -665,7 +667,7 @@ def test(self) -> None: # Check if the route refresh capability is advertised, received, and enabled if not _check_bgp_neighbor_capability(capablity_status): - self.result.is_failure(f"{peer} - Route refresh capability not negotiated; {format_data(capablity_status)}") + self.result.is_failure(f"{peer} - Route refresh capability not negotiated - {format_data(capablity_status)}") class VerifyBGPPeerMD5Auth(AntaTest): @@ -733,7 +735,7 @@ def test(self) -> None: state = peer_data.get("state") md5_auth_enabled = peer_data.get("md5AuthEnabled") if state != "Established": - self.result.is_failure(f"{peer} - Session state is not established; State: {state}") + self.result.is_failure(f"{peer} - Session state is not established - State: {state}") if not md5_auth_enabled: self.result.is_failure(f"{peer} - Session does not have MD5 authentication enabled") @@ -845,7 +847,6 @@ class VerifyBGPAdvCommunities(AntaTest): ``` """ - description = "Verifies the advertised communities of a BGP peer." categories: ClassVar[list[str]] = ["bgp"] commands: ClassVar[list[AntaCommand | AntaTemplate]] = [AntaCommand(command="show bgp neighbors vrf all", revision=3)] @@ -951,9 +952,9 @@ def test(self) -> None: # Check BGP peer timers if peer_data["holdTime"] != peer.hold_time: - self.result.is_failure(f"{peer} - Hold time mismatch; Expected: {peer.hold_time} Actual: {peer_data['holdTime']}") + self.result.is_failure(f"{peer} - Hold time mismatch - Expected: {peer.hold_time}, Actual: {peer_data['holdTime']}") if peer_data["keepaliveTime"] != peer.keep_alive_time: - self.result.is_failure(f"{peer} - Keepalive time mismatch; Expected: {peer.keep_alive_time} Actual: {peer_data['keepaliveTime']}") + self.result.is_failure(f"{peer} - Keepalive time mismatch - Expected: {peer.keep_alive_time}, Actual: {peer_data['keepaliveTime']}") class VerifyBGPPeerDropStats(AntaTest): @@ -1030,7 +1031,7 @@ def test(self) -> None: # Verify BGP peer's drop stats for drop_stat in drop_stats_input: if (stat_value := drop_stats_output.get(drop_stat, 0)) != 0: - self.result.is_failure(f"{peer} - Non-zero NLRI drop statistics counter; {drop_stat}: {stat_value}") + self.result.is_failure(f"{peer} - Non-zero NLRI drop statistics counter - {drop_stat}: {stat_value}") class VerifyBGPPeerUpdateErrors(AntaTest): @@ -1108,7 +1109,7 @@ def test(self) -> None: # Verify BGP peer's update error counters for error_counter in update_errors_input: if (stat_value := error_counters_output.get(error_counter, "Not Found")) != 0 and stat_value != "None": - self.result.is_failure(f"{peer} - Non-zero update error counter; {error_counter}: {stat_value}") + self.result.is_failure(f"{peer} - Non-zero update error counter - {error_counter}: {stat_value}") class VerifyBgpRouteMaps(AntaTest): @@ -1186,11 +1187,11 @@ def test(self) -> None: # Verify Inbound route-map if inbound_route_map and (inbound_map := peer_data.get("routeMapInbound", "Not Configured")) != inbound_route_map: - self.result.is_failure(f"{peer} - Inbound route-map mismatch; Expected: {inbound_route_map} Actual: {inbound_map}") + self.result.is_failure(f"{peer} - Inbound route-map mismatch - Expected: {inbound_route_map}, Actual: {inbound_map}") # Verify Outbound route-map if outbound_route_map and (outbound_map := peer_data.get("routeMapOutbound", "Not Configured")) != outbound_route_map: - self.result.is_failure(f"{peer} - Outbound route-map mismatch; Expected: {outbound_route_map} Actual: {outbound_map}") + self.result.is_failure(f"{peer} - Outbound route-map mismatch - Expected: {outbound_route_map}, Actual: {outbound_map}") class VerifyBGPPeerRouteLimit(AntaTest): @@ -1265,8 +1266,8 @@ def test(self) -> None: # Verify maximum routes configured. if (actual_routes := peer_data.get("maxTotalRoutes", "Not Found")) != maximum_routes: - self.result.is_failure(f"{peer} - Maximum routes mismatch; Expected: {maximum_routes} Actual: {actual_routes}") + self.result.is_failure(f"{peer} - Maximum routes mismatch - Expected: {maximum_routes}, Actual: {actual_routes}") # Verify warning limit if given. if warning_limit and (actual_warning_limit := peer_data.get("totalRoutesWarnLimit", "Not Found")) != warning_limit: - self.result.is_failure(f"{peer} - Maximum route warning limit mismatch; Expected: {warning_limit} Actual: {actual_warning_limit}") + self.result.is_failure(f"{peer} - Maximum route warning limit mismatch - Expected: {warning_limit}, Actual: {actual_warning_limit}") diff --git a/tests/units/anta_tests/routing/test_bgp.py b/tests/units/anta_tests/routing/test_bgp.py index b86a295b5..33cede386 100644 --- a/tests/units/anta_tests/routing/test_bgp.py +++ b/tests/units/anta_tests/routing/test_bgp.py @@ -1639,14 +1639,14 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 172.30.11.1 VRF: default - ipv4Unicast not negotiated; Advertised: False, Received: False, Enabled: False", - "Peer: 172.30.11.1 VRF: default - ipv4MplsVpn not negotiated; Advertised: False, Received: True, Enabled: False", + "Peer: 172.30.11.1 VRF: default - ipv4Unicast not negotiated - Advertised: False, Received: False, Enabled: False", + "Peer: 172.30.11.1 VRF: default - ipv4MplsVpn not negotiated - Advertised: False, Received: True, Enabled: False", "Peer: 172.30.11.1 VRF: default - l2VpnEvpn not found", "Peer: 172.30.11.10 VRF: MGMT - ipv4Unicast not found", - "Peer: 172.30.11.10 VRF: MGMT - ipv4MplsVpn not negotiated; Advertised: False, Received: False, Enabled: True", - "Peer: 172.30.11.10 VRF: MGMT - l2VpnEvpn not negotiated; Advertised: True, Received: False, Enabled: False", - "Peer: 172.30.11.11 VRF: MGMT - ipv4Unicast not negotiated; Advertised: False, Received: False, Enabled: False", - "Peer: 172.30.11.11 VRF: MGMT - ipv4MplsVpn not negotiated; Advertised: False, Received: False, Enabled: False", + "Peer: 172.30.11.10 VRF: MGMT - ipv4MplsVpn not negotiated - Advertised: False, Received: False, Enabled: True", + "Peer: 172.30.11.10 VRF: MGMT - l2VpnEvpn not negotiated - Advertised: True, Received: False, Enabled: False", + "Peer: 172.30.11.11 VRF: MGMT - ipv4Unicast not negotiated - Advertised: False, Received: False, Enabled: False", + "Peer: 172.30.11.11 VRF: MGMT - ipv4MplsVpn not negotiated - Advertised: False, Received: False, Enabled: False", "Peer: 172.30.11.11 VRF: MGMT - l2VpnEvpn not found", ], }, @@ -1790,8 +1790,8 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 172.30.11.1 VRF: default - Mismatch; Expected: ipv4Unicast Actual: ipv4Unicast, ipv4MplsLabels", - "Peer: 172.30.11.10 VRF: MGMT - Mismatch; Expected: ipv4MplsVpn, l2VpnEvpn Actual: ipv4Unicast, ipv4MplsVpn", + "Peer: 172.30.11.1 VRF: default - Mismatch - Expected: ipv4Unicast Actual: ipv4Unicast, ipv4MplsLabels", + "Peer: 172.30.11.10 VRF: MGMT - Mismatch - Expected: ipv4MplsVpn, l2VpnEvpn Actual: ipv4Unicast, ipv4MplsVpn", ], }, }, @@ -1985,8 +1985,8 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 172.30.11.1 VRF: default - 4-octet ASN capability not negotiated; Advertised: False, Received: False, Enabled: False", - "Peer: 172.30.11.10 VRF: MGMT - 4-octet ASN capability not negotiated; Advertised: True, Received: False, Enabled: True", + "Peer: 172.30.11.1 VRF: default - 4-octet ASN capability not negotiated - Advertised: False, Received: False, Enabled: False", + "Peer: 172.30.11.10 VRF: MGMT - 4-octet ASN capability not negotiated - Advertised: True, Received: False, Enabled: True", ], }, }, @@ -2203,7 +2203,7 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 172.30.11.1 VRF: default - Route refresh capability not negotiated; Advertised: False, Received: False, Enabled: False", + "Peer: 172.30.11.1 VRF: default - Route refresh capability not negotiated - Advertised: False, Received: False, Enabled: False", ], }, }, @@ -2337,8 +2337,8 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 172.30.11.1 VRF: default - Session state is not established; State: Idle", - "Peer: 172.30.11.10 VRF: MGMT - Session state is not established; State: Idle", + "Peer: 172.30.11.1 VRF: default - Session state is not established - State: Idle", + "Peer: 172.30.11.10 VRF: MGMT - Session state is not established - State: Idle", ], }, }, @@ -2995,9 +2995,9 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 172.30.11.1 VRF: default - Hold time mismatch; Expected: 180 Actual: 160", - "Peer: 172.30.11.11 VRF: MGMT - Hold time mismatch; Expected: 180 Actual: 120", - "Peer: 172.30.11.11 VRF: MGMT - Keepalive time mismatch; Expected: 60 Actual: 40", + "Peer: 172.30.11.1 VRF: default - Hold time mismatch - Expected: 180, Actual: 160", + "Peer: 172.30.11.11 VRF: MGMT - Hold time mismatch - Expected: 180, Actual: 120", + "Peer: 172.30.11.11 VRF: MGMT - Keepalive time mismatch - Expected: 60, Actual: 40", ], }, }, @@ -3138,10 +3138,10 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter; prefixDroppedMartianV4: 1", - "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter; prefixDroppedMaxRouteLimitViolatedV4: 1", - "Peer: 10.100.0.9 VRF: MGMT - Non-zero NLRI drop statistics counter; inDropOrigId: 1", - "Peer: 10.100.0.9 VRF: MGMT - Non-zero NLRI drop statistics counter; inDropNhLocal: 1", + "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter - prefixDroppedMartianV4: 1", + "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter - prefixDroppedMaxRouteLimitViolatedV4: 1", + "Peer: 10.100.0.9 VRF: MGMT - Non-zero NLRI drop statistics counter - inDropOrigId: 1", + "Peer: 10.100.0.9 VRF: MGMT - Non-zero NLRI drop statistics counter - inDropNhLocal: 1", ], }, }, @@ -3252,14 +3252,14 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter; inDropAsloop: 3", - "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter; inDropOrigId: 1", - "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter; inDropNhLocal: 1", - "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter; prefixDroppedMartianV4: 1", - "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter; prefixDroppedMaxRouteLimitViolatedV4: 1", - "Peer: 10.100.0.9 VRF: MGMT - Non-zero NLRI drop statistics counter; inDropAsloop: 2", - "Peer: 10.100.0.9 VRF: MGMT - Non-zero NLRI drop statistics counter; inDropOrigId: 1", - "Peer: 10.100.0.9 VRF: MGMT - Non-zero NLRI drop statistics counter; inDropNhLocal: 1", + "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter - inDropAsloop: 3", + "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter - inDropOrigId: 1", + "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter - inDropNhLocal: 1", + "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter - prefixDroppedMartianV4: 1", + "Peer: 10.100.0.8 VRF: default - Non-zero NLRI drop statistics counter - prefixDroppedMaxRouteLimitViolatedV4: 1", + "Peer: 10.100.0.9 VRF: MGMT - Non-zero NLRI drop statistics counter - inDropAsloop: 2", + "Peer: 10.100.0.9 VRF: MGMT - Non-zero NLRI drop statistics counter - inDropOrigId: 1", + "Peer: 10.100.0.9 VRF: MGMT - Non-zero NLRI drop statistics counter - inDropNhLocal: 1", ], }, }, @@ -3374,8 +3374,8 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 10.100.0.8 VRF: default - Non-zero update error counter; disabledAfiSafi: ipv4Unicast", - "Peer: 10.100.0.9 VRF: MGMT - Non-zero update error counter; inUpdErrWithdraw: 1", + "Peer: 10.100.0.8 VRF: default - Non-zero update error counter - disabledAfiSafi: ipv4Unicast", + "Peer: 10.100.0.9 VRF: MGMT - Non-zero update error counter - inUpdErrWithdraw: 1", ], }, }, @@ -3474,10 +3474,10 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 10.100.0.8 VRF: default - Non-zero update error counter; inUpdErrWithdraw: 1", - "Peer: 10.100.0.8 VRF: default - Non-zero update error counter; disabledAfiSafi: ipv4Unicast", - "Peer: 10.100.0.9 VRF: MGMT - Non-zero update error counter; inUpdErrWithdraw: 1", - "Peer: 10.100.0.9 VRF: MGMT - Non-zero update error counter; inUpdErrDisableAfiSafi: 1", + "Peer: 10.100.0.8 VRF: default - Non-zero update error counter - inUpdErrWithdraw: 1", + "Peer: 10.100.0.8 VRF: default - Non-zero update error counter - disabledAfiSafi: ipv4Unicast", + "Peer: 10.100.0.9 VRF: MGMT - Non-zero update error counter - inUpdErrWithdraw: 1", + "Peer: 10.100.0.9 VRF: MGMT - Non-zero update error counter - inUpdErrDisableAfiSafi: 1", ], }, }, @@ -3529,10 +3529,10 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 10.100.0.8 VRF: default - Non-zero update error counter; inUpdErrWithdraw: Not Found", - "Peer: 10.100.0.8 VRF: default - Non-zero update error counter; disabledAfiSafi: ipv4Unicast", - "Peer: 10.100.0.9 VRF: MGMT - Non-zero update error counter; inUpdErrWithdraw: 1", - "Peer: 10.100.0.9 VRF: MGMT - Non-zero update error counter; inUpdErrDisableAfiSafi: Not Found", + "Peer: 10.100.0.8 VRF: default - Non-zero update error counter - inUpdErrWithdraw: Not Found", + "Peer: 10.100.0.8 VRF: default - Non-zero update error counter - disabledAfiSafi: ipv4Unicast", + "Peer: 10.100.0.9 VRF: MGMT - Non-zero update error counter - inUpdErrWithdraw: 1", + "Peer: 10.100.0.9 VRF: MGMT - Non-zero update error counter - inUpdErrDisableAfiSafi: Not Found", ], }, }, @@ -3607,10 +3607,10 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 10.100.0.8 VRF: default - Inbound route-map mismatch; Expected: RM-MLAG-PEER-IN Actual: RM-MLAG-PEER", - "Peer: 10.100.0.8 VRF: default - Outbound route-map mismatch; Expected: RM-MLAG-PEER-OUT Actual: RM-MLAG-PEER", - "Peer: 10.100.0.10 VRF: MGMT - Inbound route-map mismatch; Expected: RM-MLAG-PEER-IN Actual: RM-MLAG-PEER", - "Peer: 10.100.0.10 VRF: MGMT - Outbound route-map mismatch; Expected: RM-MLAG-PEER-OUT Actual: RM-MLAG-PEER", + "Peer: 10.100.0.8 VRF: default - Inbound route-map mismatch - Expected: RM-MLAG-PEER-IN, Actual: RM-MLAG-PEER", + "Peer: 10.100.0.8 VRF: default - Outbound route-map mismatch - Expected: RM-MLAG-PEER-OUT, Actual: RM-MLAG-PEER", + "Peer: 10.100.0.10 VRF: MGMT - Inbound route-map mismatch - Expected: RM-MLAG-PEER-IN, Actual: RM-MLAG-PEER", + "Peer: 10.100.0.10 VRF: MGMT - Outbound route-map mismatch - Expected: RM-MLAG-PEER-OUT, Actual: RM-MLAG-PEER", ], }, }, @@ -3650,8 +3650,8 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 10.100.0.8 VRF: default - Inbound route-map mismatch; Expected: RM-MLAG-PEER-IN Actual: RM-MLAG-PEER", - "Peer: 10.100.0.10 VRF: MGMT - Inbound route-map mismatch; Expected: RM-MLAG-PEER-IN Actual: RM-MLAG-PEER", + "Peer: 10.100.0.8 VRF: default - Inbound route-map mismatch - Expected: RM-MLAG-PEER-IN, Actual: RM-MLAG-PEER", + "Peer: 10.100.0.10 VRF: MGMT - Inbound route-map mismatch - Expected: RM-MLAG-PEER-IN, Actual: RM-MLAG-PEER", ], }, }, @@ -3687,10 +3687,10 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 10.100.0.8 VRF: default - Inbound route-map mismatch; Expected: RM-MLAG-PEER-IN Actual: Not Configured", - "Peer: 10.100.0.8 VRF: default - Outbound route-map mismatch; Expected: RM-MLAG-PEER-OUT Actual: Not Configured", - "Peer: 10.100.0.10 VRF: MGMT - Inbound route-map mismatch; Expected: RM-MLAG-PEER-IN Actual: Not Configured", - "Peer: 10.100.0.10 VRF: MGMT - Outbound route-map mismatch; Expected: RM-MLAG-PEER-OUT Actual: Not Configured", + "Peer: 10.100.0.8 VRF: default - Inbound route-map mismatch - Expected: RM-MLAG-PEER-IN, Actual: Not Configured", + "Peer: 10.100.0.8 VRF: default - Outbound route-map mismatch - Expected: RM-MLAG-PEER-OUT, Actual: Not Configured", + "Peer: 10.100.0.10 VRF: MGMT - Inbound route-map mismatch - Expected: RM-MLAG-PEER-IN, Actual: Not Configured", + "Peer: 10.100.0.10 VRF: MGMT - Outbound route-map mismatch - Expected: RM-MLAG-PEER-OUT, Actual: Not Configured", ], }, }, @@ -3815,10 +3815,10 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 10.100.0.8 VRF: default - Maximum routes mismatch; Expected: 12000 Actual: 13000", - "Peer: 10.100.0.8 VRF: default - Maximum route warning limit mismatch; Expected: 10000 Actual: 11000", - "Peer: 10.100.0.9 VRF: MGMT - Maximum routes mismatch; Expected: 10000 Actual: 11000", - "Peer: 10.100.0.9 VRF: MGMT - Maximum route warning limit mismatch; Expected: 9000 Actual: 10000", + "Peer: 10.100.0.8 VRF: default - Maximum routes mismatch - Expected: 12000, Actual: 13000", + "Peer: 10.100.0.8 VRF: default - Maximum route warning limit mismatch - Expected: 10000, Actual: 11000", + "Peer: 10.100.0.9 VRF: MGMT - Maximum routes mismatch - Expected: 10000, Actual: 11000", + "Peer: 10.100.0.9 VRF: MGMT - Maximum route warning limit mismatch - Expected: 9000, Actual: 10000", ], }, }, @@ -3855,9 +3855,9 @@ def test_check_bgp_neighbor_capability(input_dict: dict[str, bool], expected: bo "expected": { "result": "failure", "messages": [ - "Peer: 10.100.0.8 VRF: default - Maximum route warning limit mismatch; Expected: 10000 Actual: Not Found", - "Peer: 10.100.0.9 VRF: MGMT - Maximum routes mismatch; Expected: 10000 Actual: Not Found", - "Peer: 10.100.0.9 VRF: MGMT - Maximum route warning limit mismatch; Expected: 9000 Actual: Not Found", + "Peer: 10.100.0.8 VRF: default - Maximum route warning limit mismatch - Expected: 10000, Actual: Not Found", + "Peer: 10.100.0.9 VRF: MGMT - Maximum routes mismatch - Expected: 10000, Actual: Not Found", + "Peer: 10.100.0.9 VRF: MGMT - Maximum route warning limit mismatch - Expected: 9000, Actual: Not Found", ], }, },