mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 04:47:05 +00:00
tests: Adding API verify_bgp_attributes() to bgp.py
This API is to verify BGP attribute values set by route maps Signed-off-by: Kuldeep Kashyap <kashyapk@vmware.com>
This commit is contained in:
parent
5300176ff8
commit
7f55cb6a88
@ -1229,6 +1229,150 @@ def verify_bgp_timers_and_functionality(tgen, topo, input_dict):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@retry(attempts=3, wait=4, return_is_str=True)
|
||||||
|
def verify_bgp_attributes(tgen, addr_type, dut, static_routes, rmap_name,
|
||||||
|
input_dict, seq_id=None):
|
||||||
|
"""
|
||||||
|
API will verify BGP attributes set by Route-map for given prefix and
|
||||||
|
DUT. it will run "show bgp ipv4/ipv6 {prefix_address} json" command
|
||||||
|
in DUT to verify BGP attributes set by route-map, Set attributes
|
||||||
|
values will be read from input_dict and verified with command output.
|
||||||
|
|
||||||
|
* `tgen`: topogen object
|
||||||
|
* `addr_type` : ip type, ipv4/ipv6
|
||||||
|
* `dut`: Device Under Test
|
||||||
|
* `static_routes`: Static Routes for which BGP set attributes needs to be
|
||||||
|
verified
|
||||||
|
* `rmap_name`: route map name for which set criteria needs to be verified
|
||||||
|
* `input_dict`: defines for which router, AS numbers needs
|
||||||
|
* `seq_id`: sequence number of rmap, default is None
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
input_dict = {
|
||||||
|
"r3": {
|
||||||
|
"route_maps": {
|
||||||
|
"rmap_match_pf_1_ipv4": [{
|
||||||
|
"action": "permit",
|
||||||
|
'seq_id': '5',
|
||||||
|
"match": {
|
||||||
|
addr_type: {
|
||||||
|
"prefix_lists": "pf_list_1_" + addr_type
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"set": {
|
||||||
|
"localpref": 150,
|
||||||
|
"weight": 100
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
"rmap_match_pf_2_ipv6": [{
|
||||||
|
"action": "permit",
|
||||||
|
'seq_id': '5',
|
||||||
|
"match": {
|
||||||
|
addr_type: {
|
||||||
|
"prefix_lists": "pf_list_1_" + addr_type
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"set": {
|
||||||
|
"med": 50
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = verify_bgp_attributes(tgen, 'ipv4', "r1", "10.0.20.1/32",
|
||||||
|
rmap_match_pf_1_ipv4, input_dict)
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
errormsg(str) or True
|
||||||
|
"""
|
||||||
|
|
||||||
|
logger.debug("Entering lib API: verify_bgp_attributes()")
|
||||||
|
for router, rnode in tgen.routers().iteritems():
|
||||||
|
if router != dut:
|
||||||
|
continue
|
||||||
|
|
||||||
|
logger.info('Verifying BGP set attributes for dut {}:'.format(router))
|
||||||
|
|
||||||
|
for static_route in static_routes:
|
||||||
|
cmd = "show bgp {} {} json".format(addr_type, static_route)
|
||||||
|
show_bgp_json = run_frr_cmd(rnode, cmd, isjson=True)
|
||||||
|
print("show_bgp_json $$$$$", show_bgp_json)
|
||||||
|
|
||||||
|
dict_to_test = []
|
||||||
|
tmp_list = []
|
||||||
|
for rmap_router in input_dict.keys():
|
||||||
|
for rmap, values in input_dict[rmap_router][
|
||||||
|
"route_maps"].items():
|
||||||
|
print("rmap == rmap_name $$$$1", rmap, rmap_name)
|
||||||
|
if rmap == rmap_name:
|
||||||
|
print("rmap == rmap_name $$$$", rmap, rmap_name)
|
||||||
|
dict_to_test = values
|
||||||
|
for rmap_dict in values:
|
||||||
|
if seq_id is not None:
|
||||||
|
if type(seq_id) is not list:
|
||||||
|
seq_id = [seq_id]
|
||||||
|
|
||||||
|
if "seq_id" in rmap_dict:
|
||||||
|
rmap_seq_id = \
|
||||||
|
rmap_dict["seq_id"]
|
||||||
|
for _seq_id in seq_id:
|
||||||
|
if _seq_id == rmap_seq_id:
|
||||||
|
tmp_list.append(rmap_dict)
|
||||||
|
if tmp_list:
|
||||||
|
dict_to_test = tmp_list
|
||||||
|
|
||||||
|
print("dict_to_test $$$$", dict_to_test)
|
||||||
|
for rmap_dict in dict_to_test:
|
||||||
|
if "set" in rmap_dict:
|
||||||
|
for criteria in rmap_dict["set"].keys():
|
||||||
|
if criteria not in show_bgp_json[
|
||||||
|
"paths"][0]:
|
||||||
|
errormsg = ("BGP attribute: {}"
|
||||||
|
" is not found in"
|
||||||
|
" cli: {} output "
|
||||||
|
"in router {}".
|
||||||
|
format(criteria,
|
||||||
|
cmd,
|
||||||
|
router))
|
||||||
|
return errormsg
|
||||||
|
|
||||||
|
if rmap_dict["set"][criteria] == \
|
||||||
|
show_bgp_json["paths"][0][
|
||||||
|
criteria]:
|
||||||
|
logger.info("Verifying BGP "
|
||||||
|
"attribute {} for"
|
||||||
|
" route: {} in "
|
||||||
|
"router: {}, found"
|
||||||
|
" expected value:"
|
||||||
|
" {}".
|
||||||
|
format(criteria,
|
||||||
|
static_route,
|
||||||
|
dut,
|
||||||
|
rmap_dict[
|
||||||
|
"set"][
|
||||||
|
criteria]))
|
||||||
|
else:
|
||||||
|
errormsg = \
|
||||||
|
("Failed: Verifying BGP "
|
||||||
|
"attribute {} for route:"
|
||||||
|
" {} in router: {}, "
|
||||||
|
" expected value: {} but"
|
||||||
|
" found: {}".
|
||||||
|
format(criteria,
|
||||||
|
static_route,
|
||||||
|
dut,
|
||||||
|
rmap_dict["set"]
|
||||||
|
[criteria],
|
||||||
|
show_bgp_json[
|
||||||
|
'paths'][
|
||||||
|
0][criteria]))
|
||||||
|
return errormsg
|
||||||
|
|
||||||
|
logger.debug("Exiting lib API: verify_bgp_attributes()")
|
||||||
|
return True
|
||||||
|
|
||||||
@retry(attempts=3, wait=2, return_is_str=True)
|
@retry(attempts=3, wait=2, return_is_str=True)
|
||||||
def verify_best_path_as_per_bgp_attribute(tgen, addr_type, router, input_dict,
|
def verify_best_path_as_per_bgp_attribute(tgen, addr_type, router, input_dict,
|
||||||
attribute):
|
attribute):
|
||||||
|
Loading…
Reference in New Issue
Block a user