From 8d369e517315d2f1e8a94878f16b2916bc22d131 Mon Sep 17 00:00:00 2001 From: rbpittman Date: Tue, 15 Apr 2025 04:20:08 -0400 Subject: [PATCH] Disable PFC-WD during PCBB and some wmk test improvements (#17889) * Improve validation so multiple failures can be reported. * Disable PFC-WD during PCBB tests. * Wait for PFC-WD to stop. * Remove packet aging code from pfcwd fixture. --- tests/qos/test_tunnel_qos_remap.py | 36 +++++++++++++++++++++++++----- tests/qos/tunnel_qos_remap_base.py | 2 ++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/tests/qos/test_tunnel_qos_remap.py b/tests/qos/test_tunnel_qos_remap.py index 9aa9d45a757..ae13b45e5d2 100644 --- a/tests/qos/test_tunnel_qos_remap.py +++ b/tests/qos/test_tunnel_qos_remap.py @@ -13,6 +13,8 @@ from tests.common.fixtures.duthost_utils import dut_qos_maps_module # noqa F401 from tests.common.fixtures.duthost_utils import separated_dscp_to_tc_map_on_uplink from tests.common.helpers.assertions import pytest_require, pytest_assert +from tests.common.snappi_tests.qos_fixtures import get_pfcwd_config, reapply_pfcwd +from tests.common.snappi_tests.common_helpers import stop_pfcwd from tests.common.dualtor.mux_simulator_control import toggle_all_simulator_ports_to_lower_tor,\ toggle_all_simulator_ports_to_rand_selected_tor, toggle_all_simulator_ports_to_rand_unselected_tor # noqa F401 @@ -65,6 +67,18 @@ def check_running_condition(tbinfo, duthost): "Only run when tunnel_qos_remap is enabled", True) +@pytest.fixture(scope='module', autouse=True) +def disable_pfcwd(duthosts): + pfcwd_value = {} + for duthost in duthosts: + pfcwd_value[duthost.hostname] = get_pfcwd_config(duthost) + stop_pfcwd(duthost) + yield + for duthost in duthosts: + reapply_pfcwd(duthost, pfcwd_value[duthost.hostname]) + return + + def _last_port_in_last_lag(lags): """ A helper function to get the last LAG member in the last portchannel @@ -552,6 +566,7 @@ def test_pfc_watermark_extra_lossless_standby(ptfhost, fanouthosts, rand_selecte active_tor_mac = rand_unselected_dut.facts['router_mac'] mg_facts = rand_selected_dut.get_extended_minigraph_facts(tbinfo) ptfadapter.dataplane.flush() + failures = [] for inner_dscp, outer_dscp, prio, queue in TEST_DATA: wmk_stat_queue = queue if "cisco-8000" in dut_config["asic_type"]: @@ -612,9 +627,14 @@ def test_pfc_watermark_extra_lossless_standby(ptfhost, fanouthosts, rand_selecte logger.info(("Congested queue watermark on {}|{} is {}, increased by {}," + "minimum required increase is {}").format( actual_port_name, wmk_stat_queue, queue_wmk, queue_wmk - base_queue_wmk, required_wmk_inc_bytes)) - assert queue_wmk > required_wmk_bytes, \ - "Failed to detect congestion due to PFC pause, failed check {} > {}".format( + if queue_wmk <= required_wmk_bytes: + msg = "For inner_dscp, outer_dscp, prio, queue = ({}, {}, {}, {}):\n".format( + inner_dscp, outer_dscp, prio, queue) + msg += " Failed to detect congestion due to PFC pause, failed check {} > {}".format( queue_wmk, required_wmk_bytes) + logger.info(msg) + failures.append(msg) + assert len(failures) == 0, "Watermark failures were found:\n{}".format("\n".join(failures)) def test_pfc_watermark_extra_lossless_active(ptfhost, fanouthosts, rand_selected_dut, rand_unselected_dut, @@ -645,6 +665,7 @@ def test_pfc_watermark_extra_lossless_active(ptfhost, fanouthosts, rand_selected active_tor_mac = rand_selected_dut.facts['router_mac'] mg_facts = rand_unselected_dut.get_extended_minigraph_facts(tbinfo) ptfadapter.dataplane.flush() + failures = [] for inner_dscp, outer_dscp, prio, queue in TEST_DATA: pkt, tunnel_pkt = build_testing_packet(src_ip=DUMMY_IP, dst_ip=dualtor_meta['target_server_ip'], @@ -703,9 +724,14 @@ def test_pfc_watermark_extra_lossless_active(ptfhost, fanouthosts, rand_selected "minimum required increase is {}").format( dualtor_meta['selected_port'], queue, queue_wmk, queue_wmk - base_queue_wmk, required_wmk_inc_bytes)) - assert queue_wmk > required_wmk_bytes, \ - "Failed to detect congestion due to PFC pause, failed check {} > {}".format( - queue_wmk, base_queue_wmk) + if queue_wmk <= required_wmk_bytes: + msg = "For inner_dscp, outer_dscp, prio, queue = ({}, {}, {}, {}):\n".format( + inner_dscp, outer_dscp, prio, queue) + msg += " Failed to detect congestion due to PFC pause, failed check {} > {}".format( + queue_wmk, required_wmk_bytes) + logger.info(msg) + failures.append(msg) + assert len(failures) == 0, "Watermark failures were found:\n{}".format("\n".join(failures)) @pytest.mark.disable_loganalyzer diff --git a/tests/qos/tunnel_qos_remap_base.py b/tests/qos/tunnel_qos_remap_base.py index 6d24f3ae960..4025b6e6424 100644 --- a/tests/qos/tunnel_qos_remap_base.py +++ b/tests/qos/tunnel_qos_remap_base.py @@ -504,6 +504,8 @@ def stop_pfc_storm(storm_handler): Stop sending PFC pause frames from fanout switch """ storm_handler.stop_storm() + # Wait for PFC pause to stop + time.sleep(2) def run_ptf_test(ptfhost, test_case='', test_params={}):