mirror_frr/tests/topotests/lib/common_check.py
Philippe Guibert d0bac2796b topotests: add bgp duplicate nexthop test
Add a topotest that ensures that when addpath is enabled and two
paths with same nexthop are received, they are sent to ZEBRA which
detects 'duplicate nexthop'.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2024-06-11 10:01:56 +02:00

49 lines
1.3 KiB
Python

#!/usr/bin/env python
# SPDX-License-Identifier: ISC
#
# common_check.py
#
# Copyright 2024 6WIND S.A.
#
import json
from lib import topotest
def ip_check_path_selection(router, ipaddr_str, expected, vrf_name=None):
if vrf_name:
cmdstr = f'show ip route vrf {vrf_name} {ipaddr_str} json'
else:
cmdstr = f'show ip route {ipaddr_str} json'
try:
output = json.loads(router.vtysh_cmd(cmdstr))
except:
output = {}
ret = topotest.json_cmp(output, expected)
if ret is None:
num_nh_expected = len(expected[ipaddr_str][0]["nexthops"])
num_nh_observed = len(output[ipaddr_str][0]["nexthops"])
if num_nh_expected == num_nh_observed:
return ret
return "{}, prefix {} does not have the correct number of nexthops : observed {}, expected {}".format(
router.name, ipaddr_str, num_nh_observed, num_nh_expected
)
return ret
def iproute2_check_path_selection(router, ipaddr_str, expected, vrf_name=None):
if not topotest.iproute2_is_json_capable():
return None
if vrf_name:
cmdstr = f'ip -json route show vrf {vrf_name} {ipaddr_str}'
else:
cmdstr = f'ip -json route show {ipaddr_str}'
try:
output = json.loads(cmdstr)
except:
output = []
return topotest.json_cmp(output, expected)