Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 35 additions & 27 deletions tests/generic_config_updater/test_ip_bgp.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
logger = logging.getLogger(__name__)

pytestmark = [
pytest.mark.topology('t0', 't1', 'm0', 'mx'),
pytest.mark.topology('t0', 't1', 't2', 'm0', 'mx'),
]


Expand All @@ -25,7 +25,6 @@ def ensure_dut_readiness(duthost):
Args:
duthost: DUT host object under test
"""

create_checkpoint(duthost)

yield
Expand All @@ -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:
Expand All @@ -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))

Expand All @@ -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
}
]
Expand All @@ -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
}
]
Expand All @@ -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")
Expand All @@ -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": {}
}
]
Expand All @@ -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"
}
]
Expand All @@ -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'],
Expand All @@ -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)
Expand All @@ -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)