#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
#
# test_bgp_remove_private_as.py
# Copyright (C) 2022 NVIDIA Corporation
# Trey Aspelund
#
-# Permission to use, copy, modify, and/or distribute this software
-# for any purpose with or without fee is hereby granted, provided
-# that the above copyright notice and this permission notice appear
-# in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND NVIDIA DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NVIDIA BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
-# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
-# OF THIS SOFTWARE.
-#
"""
test_bgp_remove_private_as.py tests the following conditions:
return True
return False
- def _get_pfx_path_from_nh(router, prefix, nh):
- """Return as-path for a specific route + path."""
- output = json.loads(tgen.gears[router].vtysh_cmd(f"show ip bgp {prefix} json"))
- for path in output[prefix]:
- if path["nexthops"]["ip"] == nh:
- return path["aspath"]["string"]
-
def _routers_up(tx_rtrs, rx_rtrs):
"""Ensure all BGP sessions are up and all routes are installed."""
# all sessions go through tx_routers, so ensure all their peers are up
for pfx in prefixes:
good_path = expected_paths[rtr][remove_type][peer][pfx]
real_path = adj_rib_in["receivedRoutes"][pfx]["path"]
- msg = (
- f"{rtr} received incorrect AS-Path from {peer} "
- f'({p_ip}) for {pfx}. remove_type: "{remove_type}"'
- )
- assert real_path == good_path, msg
+ return real_path == good_path
#######################
# Begin Test
# test each variation of remove-private-AS
for rmv_type in remove_types:
_change_remove_type(rmv_type, "add")
- _validate_paths(rmv_type)
+
+ test_func = partial(_validate_paths, rmv_type)
+ _, result = topotest.run_and_expect(test_func, True, count=60, wait=0.5)
+ assert result == True, "Not all routes have correct AS-Path values!"
+
# each variation sets a separate peer flag in bgpd. we need to clear
# the old flag after each iteration so we only test the flags we expect.
_change_remove_type(rmv_type, "del")