Skip to content

Commit b8d15ff

Browse files
authored
[Snappi][master] Adding support for tgen_port_info in PFC tx_drop_counter and global_pause test-script (sonic-net#22490)
Description of PR Added support for tgen_port_info in: tests/snappi_tests/pfc/test_global_pause_with_snappi.py tests/snappi_tests/pfc/test_tx_drop_counter_with_snappi.py Summary: Fixes # (issue) Type of change Bug fix Testbed and Framework(new/improvement) New Test case Skipped for non-supported platforms Test case improvement Back port request 202205 202305 202311 202405 202411 202505 202511 Approach What is the motivation for this PR? The tgen_port_info was added as part of Snappi test infra improvement, which enabled users to select between static (from variables.override.yml) and dynamic (select 100 and 400Gbps ports) ports. This was NOT included in test_tx_drop_counter and test_global_pause test-scripts under snappi_tests/pfc section. How did you do it? Imported the tgen_port_info from snappi_fixtures.py and removed any reference to old setup_dut_port function for both test-scripts. How did you verify/test it? Verification on 202511 is present in pull-request sonic-net#22380. Verification steps for master: azureuser@7e081020c2c7:/data/tests$ date;python3 -m pytest --inventory ../ansible/ixia-sonic --host-pattern ixre-egl-board73,ixre-egl-board74 --testbed ixre-chassis17-t2 --testbed_file ../ansible/testbed.csv --show-capture=stdout --log-cli-level info --showlocals -ra --allow_recover --junit-xml=/tmp/y.xml --skip_sanity --log-file=/tmp/y.log --topology multidut-tgen -cache-clear --disable_loganalyzer snappi_tests/pfc/test_global_pause_with_snappi.py --pdb Fri Feb 20 00:07:16 UTC 2026 ====================================================================================================================== test session starts ======================================================================================================================= platform linux -- Python 3.8.10, pytest-7.4.0, pluggy-1.5.0 ---- curtailed output ---- INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Config validation 0.014s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Ports configuration 1.261s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Captures configuration 0.116s ---- curtailed output ---- INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:837 DUT polling complete INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:850 Checking if all flows have stopped. Attempt #1 INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:856 All test and background traffic flows stopped INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:894 Dumping per-flow statistics INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:899 Stopping transmit on all remaining flows INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Flows stop 5.353s PASSED [ 50%] ---- curtailed output ---- INFO tests.common.plugins.memory_utilization:__init__.py:64 Before test: collected memory_values {'before_test': {}, 'after_test': {}} ------------------------------------------------------------------------------------------------------------------------- live log call -------------------------------------------------------------------------------------------------------------------------- INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Config validation 0.014s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Ports configuration 1.059s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Captures configuration 0.110s ---- curtailed output ---- INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:837 DUT polling complete INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:850 Checking if all flows have stopped. Attempt #1 INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:856 All test and background traffic flows stopped INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:894 Dumping per-flow statistics INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:899 Stopping transmit on all remaining flows INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Flows stop 5.514s PASSED [100%] ---- curtailed output ---- ----------------------------------------------------------------------------------------------------------------- generated xml file: /tmp/y.xml ----------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------- live log sessionfinish --------------------------------------------------------------------------------------------------------------------- INFO root:__init__.py:67 Can not get Allure report URL. Please check logs =========================================================================================================== 2 passed, 9 warnings in 789.04s (0:13:09) ============================================================================================================ INFO:root:Can not get Allure report URL. Please check logs azureuser@7e081020c2c7:/data/tests$ date;python3 -m pytest --inventory ../ansible/ixia-sonic --host-pattern ixre-egl-board73,ixre-egl-board74 --testbed ixre-chassis17-t2 --testbed_file ../ansible/testbed.csv --show-capture=stdout --log-cli-level info --showlocals -ra --allow_recover --junit-xml=/tmp/y.xml --skip_sanity --log-file=/tmp/y.log --topology multidut-tgen -cache-clear --disable_loganalyzer snappi_tests/pfc/test_tx_drop_counter_with_snappi.py --pdb Fri Feb 20 00:21:03 UTC 2026 ---- curtailed output ---- INFO ixnetwork_restpy.connection:connection.py:329 User info IxNetwork/tgen-ixia-03/admin-112-3670867 INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 snappi-1.27.1 INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 snappi_ixnetwork-1.27.2 INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 ixnetwork_restpy-1.6.1 INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Config validation 0.000s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Ports configuration 0.213s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Captures configuration 0.122s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Aggregation mode speed change 0.000s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Location configuration 0.288s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Layer1 configuration 0.000s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Lag Configuration 0.061s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Convert device config : 0.155s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Create IxNetwork device config : 0.000s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Push IxNetwork device config : 0.093s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Devices configuration 0.299s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Flows configuration 0.120s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Start interfaces 0.155s INFO root:__init__.py:76 -------------------- fixture tgen_port_info setup ends -------------------- INFO root:__init__.py:81 -------------------- fixture disable_pfcwd setup starts -------------------- INFO root:__init__.py:85 -------------------- fixture disable_pfcwd setup ends -------------------- INFO root:conftest.py:3818 skip setup dualtor mux cables on non-dualtor testbed ---- curtailed output ---- INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Config validation 0.012s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Ports configuration 1.265s INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Captures configuration 0.112s ---- curtailed output ---- INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:837 DUT polling complete INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:850 Checking if all flows have stopped. Attempt #1 INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:856 All test and background traffic flows stopped INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:894 Dumping per-flow statistics INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:899 Stopping transmit on all remaining flows ---- curtailed output ---- INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:837 DUT polling complete INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:850 Checking if all flows have stopped. Attempt #1 INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:856 All test and background traffic flows stopped INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:894 Dumping per-flow statistics INFO tests.common.snappi_tests.traffic_generation:traffic_generation.py:899 Stopping transmit on all remaining flows INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Link State operation 0.052s INFO tests.snappi_tests.pfc.files.helper:helper.py:452 Snappi port Port 0 is set to DOWN INFO tests.snappi_tests.pfc.files.helper:helper.py:457 Sleeping for 90 seconds INFO snappi_ixnetwork.snappi_api:snappi_api.py:1419 Link State operation 0.058s INFO tests.snappi_tests.pfc.files.helper:helper.py:469 Snappi port Port 0 is set to UP ---- curtailed output ---- INFO root:__init__.py:67 Can not get Allure report URL. Please check logs =========================================================================================================== 2 passed, 9 warnings in 906.71s (0:15:06) ============================================================================================================ INFO:root:Can not get Allure report URL. Please check logs Signed-off-by: amitpawa <[email protected]> * snappi: issue-22363 removed multidut-port-info import from pfc tx_drop_counter testcase Signed-off-by: amitpawa <[email protected]> --------- Signed-off-by: amitpawa <[email protected]>
1 parent 6286b96 commit b8d15ff

File tree

2 files changed

+39
-66
lines changed

2 files changed

+39
-66
lines changed
Lines changed: 24 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,36 @@
11
import pytest
22
import logging
3-
from tests.common.helpers.assertions import pytest_require, pytest_assert # noqa: F401
3+
from tests.common.helpers.assertions import pytest_require, pytest_assert # noqa: F401
44
from tests.common.fixtures.conn_graph_facts import conn_graph_facts, fanout_graph_facts, \
5-
fanout_graph_facts_multidut # noqa: F401
5+
fanout_graph_facts_multidut # noqa: F401
66
from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \
7-
snappi_api, get_snappi_ports, is_snappi_multidut, \
8-
get_snappi_ports_single_dut, snappi_testbed_config, \
9-
get_snappi_ports_multi_dut, snappi_dut_base_config, cleanup_config, get_snappi_ports_for_rdma # noqa: F401
10-
from tests.common.snappi_tests.qos_fixtures import lossless_prio_list, prio_dscp_map, disable_pfcwd # noqa: F401
11-
from tests.snappi_tests.pfc.files.helper import run_pfc_test # noqa: F401
7+
snappi_api, snappi_dut_base_config, get_snappi_ports_for_rdma, cleanup_config, \
8+
snappi_testbed_config, get_snappi_ports_single_dut, snappi_port_selection, \
9+
get_snappi_ports, tgen_port_info, is_snappi_multidut, get_snappi_ports_multi_dut # noqa: F401
10+
from tests.common.snappi_tests.qos_fixtures import lossless_prio_list, prio_dscp_map, disable_pfcwd # noqa: F401
11+
from tests.snappi_tests.pfc.files.helper import run_pfc_test # noqa: F401
1212
from tests.common.snappi_tests.snappi_test_params import SnappiTestParams
13-
from tests.snappi_tests.variables import MULTIDUT_PORT_INFO, MULTIDUT_TESTBED
14-
from tests.snappi_tests.cisco.helper import disable_voq_watchdog # noqa: F401
13+
from tests.snappi_tests.cisco.helper import disable_voq_watchdog # noqa: F401
1514

1615
logger = logging.getLogger(__name__)
1716

1817
pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')]
1918

2019

21-
@pytest.mark.parametrize("multidut_port_info", MULTIDUT_PORT_INFO[MULTIDUT_TESTBED])
22-
def test_global_pause(snappi_api, # noqa: F811
23-
conn_graph_facts, # noqa: F811
24-
fanout_graph_facts_multidut, # noqa: F811
25-
get_snappi_ports, # noqa: F811
20+
@pytest.fixture(autouse=True, scope='module')
21+
def number_of_tx_rx_ports():
22+
yield (1, 1)
23+
24+
25+
def test_global_pause(snappi_api, # noqa: F811
26+
conn_graph_facts, # noqa: F811
27+
fanout_graph_facts_multidut, # noqa: F811
2628
duthosts,
27-
prio_dscp_map, # noqa: F811
28-
lossless_prio_list, # noqa: F811
29-
tbinfo, # noqa: F811
30-
multidut_port_info,
31-
disable_pfcwd): # noqa: F811
29+
prio_dscp_map, # noqa: F811
30+
lossless_prio_list, # noqa: F811
31+
tbinfo, # noqa: F811
32+
tgen_port_info, # noqa: F811
33+
disable_pfcwd): # noqa: F811
3234
"""
3335
Test if IEEE 802.3X pause (a.k.a., global pause) will impact any priority
3436
@@ -41,39 +43,13 @@ def test_global_pause(snappi_api, # noqa: F811
4143
lossless_prio_list (pytest fixture): list of all the lossless priorities
4244
prio_dscp_map (pytest fixture): priority vs. DSCP map (key = priority).
4345
tbinfo (pytest fixture): fixture provides information about testbed
44-
get_snappi_ports (pytest fixture): gets snappi ports and connected DUT port info and returns as a list
46+
tgen_port_info (pytest fixture): fixtures returns port_config_list, snappi_ports and testbed_config
4547
Returns:
4648
N/A
4749
"""
48-
snappi_port_list = get_snappi_ports
49-
50-
tbname = tbinfo.get('conf-name', None)
51-
52-
tx_port_count = 1
53-
rx_port_count = 1
50+
testbed_config, port_config_list, snappi_ports = tgen_port_info
5451

55-
pytest_require(len(snappi_port_list) >= tx_port_count + rx_port_count,
56-
"Need Minimum of 2 ports defined in ansible/files/*links.csv file")
57-
58-
for testbed_subtype, rdma_ports in multidut_port_info.items():
59-
pytest_require(len(rdma_ports['tx_ports']) >= tx_port_count,
60-
'MULTIDUT_PORT_INFO doesn\'t have the required Tx ports defined for \
61-
testbed {}, subtype {} in variables.py'.
62-
format(MULTIDUT_TESTBED, testbed_subtype))
63-
64-
pytest_require(len(rdma_ports['rx_ports']) >= rx_port_count,
65-
'MULTIDUT_PORT_INFO doesn\'t have the required Rx ports defined for \
66-
testbed {}, subtype {} in variables.py'.
67-
format(tbname, testbed_subtype))
68-
logger.info('Running test for testbed subtype: {}'.format(testbed_subtype))
69-
if is_snappi_multidut(duthosts):
70-
snappi_ports = get_snappi_ports_for_rdma(snappi_port_list, rdma_ports,
71-
tx_port_count, rx_port_count, MULTIDUT_TESTBED)
72-
else:
73-
snappi_ports = snappi_port_list
74-
testbed_config, port_config_list, snappi_ports = snappi_dut_base_config(duthosts,
75-
snappi_ports,
76-
snappi_api)
52+
logger.info("Snappi Ports : {}".format(snappi_ports))
7753

7854
all_prio_list = prio_dscp_map.keys()
7955
test_prio_list = lossless_prio_list
@@ -93,5 +69,3 @@ def test_global_pause(snappi_api, # noqa: F811
9369
prio_dscp_map=prio_dscp_map,
9470
test_traffic_pause=False,
9571
snappi_extra_params=snappi_extra_params)
96-
97-
cleanup_config(duthosts, snappi_ports)

tests/snappi_tests/pfc/test_tx_drop_counter_with_snappi.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,34 @@
11
import pytest
22
import logging
33

4-
from tests.common.helpers.assertions import pytest_require # noqa: F401
5-
from tests.common.fixtures.conn_graph_facts import conn_graph_facts,\
6-
fanout_graph_facts, fanout_graph_facts_multidut # noqa: F401
4+
from tests.common.helpers.assertions import pytest_require # noqa: F401
5+
from tests.common.fixtures.conn_graph_facts import conn_graph_facts, \
6+
fanout_graph_facts, fanout_graph_facts_multidut # noqa: F401
77
from tests.common.snappi_tests.snappi_fixtures import snappi_api_serv_ip, snappi_api_serv_port, \
8-
snappi_api, snappi_dut_base_config, get_snappi_ports_for_rdma, cleanup_config, get_snappi_ports_multi_dut, \
9-
snappi_testbed_config, get_snappi_ports_single_dut, \
10-
get_snappi_ports, is_snappi_multidut # noqa: F401
8+
snappi_api, snappi_dut_base_config, get_snappi_ports_for_rdma, cleanup_config, \
9+
snappi_testbed_config, get_snappi_ports_single_dut, snappi_port_selection, \
10+
get_snappi_ports, tgen_port_info, is_snappi_multidut, get_snappi_ports_multi_dut # noqa: F401
1111
from tests.common.snappi_tests.qos_fixtures import prio_dscp_map, \
12-
lossless_prio_list, disable_pfcwd # noqa: F401
12+
lossless_prio_list, disable_pfcwd # noqa: F401
1313
from tests.snappi_tests.pfc.files.helper import run_tx_drop_counter
1414
from tests.common.snappi_tests.snappi_test_params import SnappiTestParams
15-
from tests.snappi_tests.files.helper import multidut_port_info, setup_ports_and_dut # noqa: F401
16-
from tests.snappi_tests.cisco.helper import disable_voq_watchdog # noqa: F401
15+
from tests.snappi_tests.cisco.helper import disable_voq_watchdog # noqa: F401
1716

1817
logger = logging.getLogger(__name__)
1918
pytestmark = [pytest.mark.topology('multidut-tgen', 'tgen')]
2019

2120

22-
@pytest.fixture(autouse=True)
21+
@pytest.fixture(autouse=True, scope='module')
2322
def number_of_tx_rx_ports():
2423
yield (1, 1)
2524

2625

2726
def test_tx_drop_counter(
28-
snappi_api, # noqa: F811
29-
lossless_prio_list, # noqa: F811
30-
prio_dscp_map, # noqa: F811
31-
setup_ports_and_dut, # noqa: F811
32-
disable_pfcwd # noqa: F811
27+
snappi_api, # noqa: F811
28+
lossless_prio_list, # noqa: F811
29+
prio_dscp_map, # noqa: F811
30+
tgen_port_info, # noqa: F811
31+
disable_pfcwd # noqa: F811
3332
):
3433
"""
3534
Test if device under test (DUT) is incrementing
@@ -52,7 +51,7 @@ def test_tx_drop_counter(
5251
N/A
5352
"""
5453

55-
testbed_config, port_config_list, snappi_ports = setup_ports_and_dut
54+
testbed_config, port_config_list, snappi_ports = tgen_port_info
5655

5756
logger.info("Snappi Ports : {}".format(snappi_ports))
5857

0 commit comments

Comments
 (0)