diff --git a/tests/generic_config_updater/test_ip_bgp.py b/tests/generic_config_updater/test_ip_bgp.py index 9e3ec8b1c44..4755c257755 100644 --- a/tests/generic_config_updater/test_ip_bgp.py +++ b/tests/generic_config_updater/test_ip_bgp.py @@ -12,7 +12,7 @@ logger = logging.getLogger(__name__) pytestmark = [ - pytest.mark.topology('t0', 't1', 'm0', 'mx'), + pytest.mark.topology('t0', 't1', 't2', 'm0', 'mx'), ] @@ -25,7 +25,6 @@ def ensure_dut_readiness(duthost): Args: duthost: DUT host object under test """ - create_checkpoint(duthost) yield @@ -37,16 +36,19 @@ def ensure_dut_readiness(duthost): delete_checkpoint(duthost) -def get_ip_neighbor(duthost, ip_version=6): +def get_ip_neighbor(duthost, namespace=None, ip_version=6): """ Returns ip BGP neighbor address, properties of BGP neighbor Args: duthost: DUT host object - ip_version: Ip version of the bgp neighbor + namespace: DUT asic namespace. asic0, asic1, None + ip_version: IP version. 4, 6 """ - config_facts = duthost.config_facts(host=duthost.hostname, source="running")['ansible_facts'] + config_facts = duthost.config_facts(host=duthost.hostname, source="running", + verbose=False, namespace=namespace)['ansible_facts'] + bgp_neighbors_data = config_facts['BGP_NEIGHBOR'] for neighbor_address in list(bgp_neighbors_data.keys()): if ipaddress.ip_address((neighbor_address.encode().decode())).version == ip_version: @@ -60,8 +62,8 @@ def check_neighbor_existence(duthost, neighbor_address, ip_version=6): return re.search(r'\b{}\b'.format(neighbor_address), ip_bgp_su) -def add_deleted_ip_neighbor(duthost, ip_version=6): - ip_neighbor_address, ip_neighbor_config = get_ip_neighbor(duthost, ip_version) +def add_deleted_ip_neighbor(duthost, namespace=None, ip_version=6): + ip_neighbor_address, ip_neighbor_config = get_ip_neighbor(duthost, namespace, ip_version) neighbor_exists = check_neighbor_existence(duthost, ip_neighbor_address, ip_version) pytest_assert(neighbor_exists, "Nonexistent ipv{} BGP neighbor".format(ip_version)) @@ -70,10 +72,11 @@ def add_deleted_ip_neighbor(duthost, ip_version=6): pytest_assert(not neighbor_exists, "Failed to remove ipv{} BGP neighbor under test".format(ip_version)) + json_namespace = '' if namespace is None else '/' + namespace json_patch = [ { "op": "add", - "path": "/BGP_NEIGHBOR/{}".format(ip_neighbor_address), + "path": "{}/BGP_NEIGHBOR/{}".format(json_namespace, ip_neighbor_address), "value": ip_neighbor_config } ] @@ -92,13 +95,14 @@ def add_deleted_ip_neighbor(duthost, ip_version=6): delete_tmpfile(duthost, tmpfile) -def add_duplicate_ip_neighbor(duthost, ip_version=6): - ip_neighbor_address, ip_neighbor_config = get_ip_neighbor(duthost, ip_version) +def add_duplicate_ip_neighbor(duthost, namespace=None, ip_version=6): + ip_neighbor_address, ip_neighbor_config = get_ip_neighbor(duthost, namespace, ip_version) + json_namespace = '' if namespace is None else '/' + namespace json_patch = [ { "op": "add", - "path": "/BGP_NEIGHBOR/{}".format(ip_neighbor_address), + "path": "{}/BGP_NEIGHBOR/{}".format(json_namespace, ip_neighbor_address), "value": ip_neighbor_config } ] @@ -117,7 +121,7 @@ def add_duplicate_ip_neighbor(duthost, ip_version=6): delete_tmpfile(duthost, tmpfile) -def invalid_ip_neighbor(duthost, ip_version=6): +def invalid_ip_neighbor(duthost, namespace=None, ip_version=6): xfailv6_input = [ ("add", "FC00::xyz/126"), ("remove", "FC00::01/126") @@ -126,12 +130,14 @@ def invalid_ip_neighbor(duthost, ip_version=6): ("add", "10.0.0.256/31"), ("remove", "10.0.0.0/31") ] + xfail_input = xfailv4_input if ip_version == 4 else xfailv6_input + json_namespace = '' if namespace is None else '/' + namespace for op, dummy_neighbor_ip_address in xfail_input: json_patch = [ { "op": "{}".format(op), - "path": "/BGP_NEIGHBOR/{}".format(dummy_neighbor_ip_address), + "path": "{}/BGP_NEIGHBOR/{}".format(json_namespace, dummy_neighbor_ip_address), "value": {} } ] @@ -147,17 +153,18 @@ def invalid_ip_neighbor(duthost, ip_version=6): delete_tmpfile(duthost, tmpfile) -def ip_neighbor_admin_change(duthost, ip_version=6): - ip_neighbor_address, ip_neighbor_config = get_ip_neighbor(duthost, ip_version) +def ip_neighbor_admin_change(duthost, namespace=None, ip_version=6): + ip_neighbor_address, ip_neighbor_config = get_ip_neighbor(duthost, namespace, ip_version) + json_namespace = '' if namespace is None else '/' + namespace json_patch = [ { "op": "add", - "path": "/BGP_NEIGHBOR/{}/admin_status".format(ip_neighbor_address), + "path": "{}/BGP_NEIGHBOR/{}/admin_status".format(json_namespace, ip_neighbor_address), "value": "up" }, { "op": "replace", - "path": "/BGP_NEIGHBOR/{}/admin_status".format(ip_neighbor_address), + "path": "{}/BGP_NEIGHBOR/{}/admin_status".format(json_namespace, ip_neighbor_address), "value": "down" } ] @@ -170,7 +177,7 @@ def ip_neighbor_admin_change(duthost, ip_version=6): output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) expect_op_success(duthost, output) - ip_type = "ip" if ip_version == 4 else 'ipv6' + ip_type = 'ip' if ip_version == 4 else 'ipv6' cmds = "show {} bgp su | grep -w {}".format(ip_type, ip_neighbor_address) output = duthost.shell(cmds) pytest_assert(not output['rc'] and "Idle (Admin)" in output['stdout'], @@ -179,13 +186,13 @@ def ip_neighbor_admin_change(duthost, ip_version=6): delete_tmpfile(duthost, tmpfile) -def delete_ip_neighbor(duthost, ip_version=6): +def delete_ip_neighbor(duthost, namespace=None, ip_version=6): ip_neighbor_address, ip_neighbor_config = get_ip_neighbor(duthost, ip_version) - + json_namespace = '' if namespace is None else '/' + namespace json_patch = [ { "op": "remove", - "path": "/BGP_NEIGHBOR/{}".format(ip_neighbor_address) + "path": "{}/BGP_NEIGHBOR/{}".format(json_namespace, ip_neighbor_address) } ] json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) @@ -204,9 +211,10 @@ def delete_ip_neighbor(duthost, ip_version=6): @pytest.mark.parametrize("ip_version", [6, 4]) -def test_ip_suite(duthost, ensure_dut_readiness, ip_version): - add_deleted_ip_neighbor(duthost, ip_version) - add_duplicate_ip_neighbor(duthost, ip_version) - invalid_ip_neighbor(duthost, ip_version) - ip_neighbor_admin_change(duthost, ip_version) - delete_ip_neighbor(duthost, ip_version) +def test_ip_suite(duthost, ensure_dut_readiness, rand_asic_namespace, ip_version): + asic_namespace, _asic_id = rand_asic_namespace + add_deleted_ip_neighbor(duthost, asic_namespace, ip_version) + add_duplicate_ip_neighbor(duthost, asic_namespace, ip_version) + invalid_ip_neighbor(duthost, asic_namespace, ip_version) + ip_neighbor_admin_change(duthost, asic_namespace, ip_version) + delete_ip_neighbor(duthost, asic_namespace, ip_version)