Skip to content
9 changes: 9 additions & 0 deletions tests/everflow/everflow_test_utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,15 @@ def validate_mirror_session_up(duthost, session_name):
return False


def validate_acl_rules_in_asic_db(duthost):
"""
Validate the number of ACL rules in ASIC DB is the same as the number of ACL rules in CONFIG DB.
"""
config_rules = duthost.shell("sonic-db-cli CONFIG_DB KEYS *ACL_RULE*")['stdout_lines']
asic_rules = duthost.shell("sonic-db-cli ASIC_DB KEYS *SAI_OBJECT_TYPE_ACL_ENTRY*")['stdout_lines']
return len(config_rules) == len(asic_rules)


# TODO: This should be refactored to some common area of sonic-mgmt.
def add_route(duthost, prefix, nexthop, namespace):
"""
Expand Down
65 changes: 55 additions & 10 deletions tests/everflow/test_everflow_testbed.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,8 @@ def test_everflow_multi_binding_acl(self, setup_info, setup_mirror_session,
multi_binding_acl=True
)



def test_everflow_basic_forwarding(self, setup_info, setup_mirror_session, # noqa F811
dest_port_type, ptfadapter, tbinfo, mux_config, # noqa F811
toggle_all_simulator_ports_to_rand_selected_tor, # noqa F811
Expand Down Expand Up @@ -297,7 +299,10 @@ def test_everflow_basic_forwarding(self, setup_info, setup_mirror_session,
everflow_utils.add_route(remote_dut, session_prefixes[0], peer_ip,
setup_info[dest_port_type]["remote_namespace"])

time.sleep(15)
pytest_assert(
wait_until(120, 10, 0, everflow_utils.validate_asic_route, remote_dut, session_prefixes[0])
)
pytest_assert(wait_until(120, 10, 0, everflow_utils.validate_acl_rules_in_asic_db, everflow_dut))

# Verify that mirrored traffic is sent along the route we installed
rx_port_ptf_id = setup_info[dest_port_type]["src_port_ptf_id"]
Expand Down Expand Up @@ -342,7 +347,11 @@ def test_everflow_basic_forwarding(self, setup_info, setup_mirror_session,
peer_ip = everflow_utils.get_neighbor_info(remote_dut, tx_port, tbinfo, ip_version=erspan_ip_ver)
everflow_utils.add_route(remote_dut, session_prefixes[1], peer_ip,
setup_info[dest_port_type]["remote_namespace"])
time.sleep(15)
pytest_assert(
wait_until(
120, 10, 0, everflow_utils.validate_asic_route, remote_dut, session_prefixes[1]
)
)

# Verify that mirrored traffic uses the new route
tx_port_ptf_id = setup_info[dest_port_type]["dest_port_ptf_id"][1]
Expand All @@ -361,7 +370,12 @@ def test_everflow_basic_forwarding(self, setup_info, setup_mirror_session,
# Remove the better route.
everflow_utils.remove_route(remote_dut, session_prefixes[1], peer_ip,
setup_info[dest_port_type]["remote_namespace"])
time.sleep(15)
pytest_assert(
wait_until(
120, 10, 0,
lambda: not everflow_utils.validate_asic_route(remote_dut, session_prefixes[1])
)
)

# Verify that mirrored traffic switches back to the original route
tx_port_ptf_id = setup_info[dest_port_type]["dest_port_ptf_id"][0]
Expand Down Expand Up @@ -398,7 +412,10 @@ def test_everflow_neighbor_mac_change(self, setup_info, setup_mirror_session,
else setup_mirror_session["session_prefixes_ipv6"]
everflow_utils.add_route(remote_dut, session_prefixes[0], peer_ip,
setup_info[dest_port_type]["remote_namespace"])
time.sleep(15)
pytest_assert(
wait_until(120, 10, 0, everflow_utils.validate_asic_route, remote_dut, session_prefixes[0])
)
pytest_assert(wait_until(120, 10, 0, everflow_utils.validate_acl_rules_in_asic_db, everflow_dut))

# Verify that mirrored traffic is sent along the route we installed
rx_port_ptf_id = setup_info[dest_port_type]["src_port_ptf_id"]
Expand Down Expand Up @@ -477,7 +494,10 @@ def test_everflow_remove_unused_ecmp_next_hop(self, setup_info, setup_mirror_ses
else setup_mirror_session["session_prefixes_ipv6"]
everflow_utils.add_route(remote_dut, session_prefixes[0], peer_ip_0,
setup_info[dest_port_type]["remote_namespace"])
time.sleep(15)
pytest_assert(
wait_until(120, 10, 0, everflow_utils.validate_asic_route, remote_dut, session_prefixes[0])
)
pytest_assert(wait_until(120, 10, 0, everflow_utils.validate_acl_rules_in_asic_db, everflow_dut))

tx_port = setup_info[dest_port_type]["dest_port"][1]
peer_ip_1 = everflow_utils.get_neighbor_info(remote_dut, tx_port, tbinfo, ip_version=erspan_ip_ver)
Expand Down Expand Up @@ -588,7 +608,10 @@ def test_everflow_remove_used_ecmp_next_hop(self, setup_info, setup_mirror_sessi
else setup_mirror_session["session_prefixes_ipv6"]
everflow_utils.add_route(remote_dut, session_prefixes[0], peer_ip_0,
setup_info[dest_port_type]["remote_namespace"])
time.sleep(15)
pytest_assert(
wait_until(120, 10, 0, everflow_utils.validate_asic_route, remote_dut, session_prefixes[0])
)
pytest_assert(wait_until(120, 10, 0, everflow_utils.validate_acl_rules_in_asic_db, everflow_dut))

# Verify that mirrored traffic is sent along the route we installed
rx_port_ptf_id = setup_info[dest_port_type]["src_port_ptf_id"]
Expand Down Expand Up @@ -782,6 +805,8 @@ def test_everflow_dscp_with_policer(
config_method,
rules=EVERFLOW_DSCP_RULES)

pytest_assert(wait_until(120, 10, 0, everflow_utils.validate_acl_rules_in_asic_db, everflow_dut))

# Run test with expected CIR/CBS in packets/sec and tolerance %
partial_ptf_runner(setup_info,
dest_port_type,
Expand Down Expand Up @@ -834,7 +859,10 @@ def test_everflow_frwd_with_bkg_trf(self,
everflow_utils.add_route(remote_dut, session_prefixes[0], peer_ip,
setup_info[dest_port_type]["remote_namespace"])

time.sleep(15)
pytest_assert(
wait_until(120, 10, 0, everflow_utils.validate_asic_route, remote_dut, session_prefixes[0])
)
pytest_assert(wait_until(120, 10, 0, everflow_utils.validate_acl_rules_in_asic_db, everflow_dut))

# Verify that mirrored traffic is sent along the route we installed
rx_port_ptf_id = setup_info[dest_port_type]["src_port_ptf_id"]
Expand Down Expand Up @@ -941,7 +969,11 @@ def background_traffic(run_count=None):
peer_ip = everflow_utils.get_neighbor_info(remote_dut, tx_port, tbinfo, ip_version=erspan_ip_ver)
everflow_utils.add_route(remote_dut, session_prefixes[1], peer_ip,
setup_info[dest_port_type]["remote_namespace"])
time.sleep(15)
pytest_assert(
wait_until(
120, 10, 0, everflow_utils.validate_asic_route, remote_dut, session_prefixes[1]
)
)
background_traffic(run_count=1)
# Verify that mirrored traffic uses the new route
tx_port_ptf_id = setup_info[dest_port_type]["dest_port_ptf_id"][1]
Expand All @@ -960,7 +992,12 @@ def background_traffic(run_count=None):
# Remove the better route.
everflow_utils.remove_route(remote_dut, session_prefixes[1], peer_ip,
setup_info[dest_port_type]["remote_namespace"])
time.sleep(15)
pytest_assert(
wait_until(
120, 10, 0,
lambda: not everflow_utils.validate_asic_route(remote_dut, session_prefixes[1])
)
)
background_traffic(run_count=1)
# Verify that mirrored traffic switches back to the original route
tx_port_ptf_id = setup_info[dest_port_type]["dest_port_ptf_id"][0]
Expand Down Expand Up @@ -1066,7 +1103,13 @@ def configure_mirror_session_with_queue(mirror_session, queue_num, erspan_ip_ver
everflow_utils.add_route(remote_dut, session_prefixes[0], peer_ip,
setup_info[dest_port_type]["remote_namespace"])

time.sleep(15)
pytest_assert(
wait_until(
120, 10, 0,
everflow_utils.validate_asic_route, remote_dut, session_prefixes[0]
)
)
pytest_assert(wait_until(120, 10, 0, everflow_utils.validate_acl_rules_in_asic_db, remote_dut))

# Verify that mirrored traffic is sent along the route we installed
rx_port_ptf_id = setup_info[dest_port_type]["src_port_ptf_id"]
Expand Down Expand Up @@ -1097,6 +1140,8 @@ def configure_mirror_session_with_queue(mirror_session, queue_num, erspan_ip_ver
erspan_ip_ver
)
finally:
everflow_utils.remove_route(remote_dut, session_prefixes[0],
peer_ip, setup_info[dest_port_type]["remote_namespace"])
remote_dut.shell(remote_dut.get_vtysh_cmd_for_namespace(
"vtysh -c \"configure terminal\" -c \"ip nht resolve-via-default\"",
setup_info[dest_port_type]["remote_namespace"]))
Expand Down
Loading