From 7cde43d0afcf8bb86a6d7f2211297a64b35a64c5 Mon Sep 17 00:00:00 2001 From: karavasi Date: Tue, 29 Oct 2024 10:08:30 +0100 Subject: [PATCH 1/3] [GCU] [MA] Adding support in existing tests - ip bgp --- tests/generic_config_updater/test_ip_bgp.py | 66 ++++++++++++--------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/tests/generic_config_updater/test_ip_bgp.py b/tests/generic_config_updater/test_ip_bgp.py index 70b9f318b67..d76dff9d224 100644 --- a/tests/generic_config_updater/test_ip_bgp.py +++ b/tests/generic_config_updater/test_ip_bgp.py @@ -11,7 +11,7 @@ logger = logging.getLogger(__name__) pytestmark = [ - pytest.mark.topology('t0', 't1', 'm0', 'mx'), + pytest.mark.topology('t0', 't1', 't2', 'm0', 'mx'), ] @@ -24,7 +24,6 @@ def ensure_dut_readiness(duthost): Args: duthost: DUT host object under test """ - create_checkpoint(duthost) yield @@ -36,16 +35,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: @@ -59,8 +61,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)) @@ -69,10 +71,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 } ] @@ -90,13 +93,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 } ] @@ -114,7 +118,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") @@ -123,12 +127,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": {} } ] @@ -143,17 +149,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" } ] @@ -165,7 +172,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'], @@ -174,13 +181,13 @@ def ip_neighbor_admin_change(duthost, ip_version=6): delete_tmpfile(duthost, tmpfile) -def delete_ip_neighbor(duthost, ip_version=6): - ip_neighbor_address, ip_neighbor_config = get_ip_neighbor(duthost, ip_version) - +def delete_ip_neighbor(duthost, namespace=None, ip_version=6): + ipv6_neighbor_address, ipv6_neighbor_config = get_ip_neighbor(duthost, namespace, 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, ipv6_neighbor_address) } ] @@ -190,7 +197,7 @@ def delete_ip_neighbor(duthost, ip_version=6): try: output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) expect_op_success(duthost, output) - neighbor_exists = check_neighbor_existence(duthost, ip_neighbor_address, ip_version) + neighbor_exists = check_neighbor_existence(duthost, ipv6_neighbor_address, ip_version) pytest_assert(not neighbor_exists, "Failed to remove ipv{} BGP neighbor under test".format(ip_version)) finally: @@ -198,9 +205,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_front_end_asic_namespace, ip_version): + asic_namespace, asic_id = rand_front_end_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) From 519bc5748dd9e98840d769db4ccb8ebbbc8235cb Mon Sep 17 00:00:00 2001 From: karavasi Date: Fri, 29 Nov 2024 12:18:30 -0500 Subject: [PATCH 2/3] Update ASIC namespace fixture following changes in dependent PR #15182 --- tests/generic_config_updater/test_ip_bgp.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/generic_config_updater/test_ip_bgp.py b/tests/generic_config_updater/test_ip_bgp.py index 5209460d6d0..d80d0a13792 100644 --- a/tests/generic_config_updater/test_ip_bgp.py +++ b/tests/generic_config_updater/test_ip_bgp.py @@ -211,8 +211,8 @@ def delete_ip_neighbor(duthost, namespace=None, ip_version=6): @pytest.mark.parametrize("ip_version", [6, 4]) -def test_ip_suite(duthost, ensure_dut_readiness, rand_front_end_asic_namespace, ip_version): - asic_namespace, asic_id = rand_front_end_asic_namespace +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) From e668a54d29f24f900248f074ba790dad6208c5ba Mon Sep 17 00:00:00 2001 From: karavasi Date: Fri, 29 Nov 2024 12:22:05 -0500 Subject: [PATCH 3/3] Fixing merge failures --- tests/generic_config_updater/test_ip_bgp.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/generic_config_updater/test_ip_bgp.py b/tests/generic_config_updater/test_ip_bgp.py index d80d0a13792..4755c257755 100644 --- a/tests/generic_config_updater/test_ip_bgp.py +++ b/tests/generic_config_updater/test_ip_bgp.py @@ -187,12 +187,12 @@ def ip_neighbor_admin_change(duthost, namespace=None, ip_version=6): def delete_ip_neighbor(duthost, namespace=None, ip_version=6): - ipv6_neighbor_address, ipv6_neighbor_config = get_ip_neighbor(duthost, namespace, ip_version) + 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(json_namespace, ipv6_neighbor_address) + "path": "{}/BGP_NEIGHBOR/{}".format(json_namespace, ip_neighbor_address) } ] json_patch = format_json_patch_for_multiasic(duthost=duthost, json_data=json_patch) @@ -203,7 +203,7 @@ def delete_ip_neighbor(duthost, namespace=None, ip_version=6): try: output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile) expect_op_success(duthost, output) - neighbor_exists = check_neighbor_existence(duthost, ipv6_neighbor_address, ip_version) + neighbor_exists = check_neighbor_existence(duthost, ip_neighbor_address, ip_version) pytest_assert(not neighbor_exists, "Failed to remove ipv{} BGP neighbor under test".format(ip_version)) finally: @@ -212,7 +212,7 @@ def delete_ip_neighbor(duthost, namespace=None, ip_version=6): @pytest.mark.parametrize("ip_version", [6, 4]) def test_ip_suite(duthost, ensure_dut_readiness, rand_asic_namespace, ip_version): - asic_namespace, asic_id = rand_asic_namespace + 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)