diff --git a/tests/qos/files/qos.yml b/tests/qos/files/qos.yml index 6ccf3880988..17b1629544d 100644 --- a/tests/qos/files/qos.yml +++ b/tests/qos/files/qos.yml @@ -807,15 +807,15 @@ qos_params: dscp: 3 ecn: 1 pg: 3 - pkts_num_trig_pfc: 13012 - pkts_num_trig_ingr_drp: 13252 + pkts_num_trig_pfc: 12964 + pkts_num_trig_ingr_drp: 13204 pkts_num_margin: 4 xoff_2: dscp: 4 ecn: 1 pg: 4 - pkts_num_trig_pfc: 13012 - pkts_num_trig_ingr_drp: 13252 + pkts_num_trig_pfc: 12964 + pkts_num_trig_ingr_drp: 13204 pkts_num_margin: 4 hdrm_pool_size: dscps: [3, 4] @@ -824,40 +824,40 @@ qos_params: src_port_ids: [1, 2, 3, 4, 5, 6, 7, 8, 9] dst_port_id: 10 pgs_num: 18 - pkts_num_trig_pfc: 4519 + pkts_num_trig_pfc: 4478 pkts_num_hdrm_full: 240 pkts_num_hdrm_partial: 182 wm_pg_headroom: dscp: 3 ecn: 1 pg: 3 - pkts_num_trig_pfc: 13012 - pkts_num_trig_ingr_drp: 13252 + pkts_num_trig_pfc: 12964 + pkts_num_trig_ingr_drp: 13204 cell_size: 256 pkts_num_margin: 2 xon_1: dscp: 3 ecn: 1 pg: 3 - pkts_num_trig_pfc: 13012 + pkts_num_trig_pfc: 12964 pkts_num_dismiss_pfc: 18 xon_2: dscp: 4 ecn: 1 pg: 4 - pkts_num_trig_pfc: 13012 + pkts_num_trig_pfc: 12964 pkts_num_dismiss_pfc: 18 lossy_queue_1: dscp: 8 ecn: 1 pg: 0 - pkts_num_trig_egr_drp: 31304 + pkts_num_trig_egr_drp: 31134 wm_pg_shared_lossless: dscp: 3 ecn: 1 pg: 3 pkts_num_fill_min: 18 - pkts_num_trig_pfc: 13012 + pkts_num_trig_pfc: 12964 packet_size: 64 cell_size: 256 wm_pg_shared_lossy: @@ -865,7 +865,7 @@ qos_params: ecn: 1 pg: 0 pkts_num_fill_min: 0 - pkts_num_trig_egr_drp: 31304 + pkts_num_trig_egr_drp: 31134 packet_size: 64 cell_size: 256 wm_q_shared_lossless: @@ -873,7 +873,7 @@ qos_params: ecn: 1 queue: 3 pkts_num_fill_min: 0 - pkts_num_trig_ingr_drp: 13252 + pkts_num_trig_ingr_drp: 13204 cell_size: 256 wm_buf_pool_lossless: dscp: 3 @@ -881,8 +881,8 @@ qos_params: pg: 3 queue: 3 pkts_num_fill_ingr_min: 6 - pkts_num_trig_pfc: 13012 - pkts_num_trig_ingr_drp: 13252 + pkts_num_trig_pfc: 12964 + pkts_num_trig_ingr_drp: 13204 pkts_num_fill_egr_min: 8 cell_size: 256 wm_q_shared_lossy: @@ -890,7 +890,7 @@ qos_params: ecn: 1 queue: 0 pkts_num_fill_min: 7 - pkts_num_trig_egr_drp: 31304 + pkts_num_trig_egr_drp: 31134 cell_size: 256 wm_buf_pool_lossy: dscp: 8 @@ -898,7 +898,7 @@ qos_params: pg: 0 queue: 0 pkts_num_fill_ingr_min: 0 - pkts_num_trig_egr_drp: 31304 + pkts_num_trig_egr_drp: 31134 pkts_num_fill_egr_min: 14 cell_size: 256 100000_300m: diff --git a/tests/qos/qos_sai_base.py b/tests/qos/qos_sai_base.py index 2a4e2025340..c34b533f51e 100644 --- a/tests/qos/qos_sai_base.py +++ b/tests/qos/qos_sai_base.py @@ -467,7 +467,7 @@ def __buildTestPorts(self, request, testPortIds, testPortIps, src_port_ids, dst_ @pytest.fixture(scope='class', autouse=True) def dutConfig( self, request, duthosts, rand_one_dut_hostname, tbinfo, - enum_frontend_asic_index + enum_frontend_asic_index, lower_tor_host ): """ Build DUT host config pertaining to QoS SAI tests @@ -480,7 +480,11 @@ def dutConfig( dutConfig (dict): Map of DUT config containing dut interfaces, test port IDs, test port IPs, and test ports """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + dut_asic = duthost.asic_instance(enum_frontend_asic_index) dutLagInterfaces = [] dutPortIps = {} @@ -605,9 +609,12 @@ def dutConfig( @pytest.fixture(scope='class') def ssh_tunnel_to_syncd_rpc( self, duthosts, rand_one_dut_hostname, enum_frontend_asic_index, - swapSyncd + swapSyncd, tbinfo, lower_tor_host ): - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] dut_asic = duthost.asic_instance(enum_frontend_asic_index) dut_asic.create_ssh_tunnel_sai_rpc() @@ -617,7 +624,7 @@ def ssh_tunnel_to_syncd_rpc( @pytest.fixture(scope='class') def updateIptables( - self, duthosts, rand_one_dut_hostname, enum_frontend_asic_index, swapSyncd + self, duthosts, rand_one_dut_hostname, enum_frontend_asic_index, swapSyncd, tbinfo, lower_tor_host ): """ Update iptables on DUT host with drop rule for BGP SYNC packets @@ -629,7 +636,10 @@ def updateIptables( Returns: None """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] dut_asic = duthost.asic_instance(enum_frontend_asic_index) ipVersions = [{"ip_version": "ipv4"}, {"ip_version": "ipv6"}] @@ -661,8 +671,8 @@ def stopServices( None """ if 'dualtor' in tbinfo['topo']['name']: - duthost = upper_tor_host - duthost_lower = lower_tor_host + duthost = lower_tor_host + duthost_upper = upper_tor_host else: duthost = duthosts[rand_one_dut_hostname] @@ -698,7 +708,7 @@ def updateDockerService(host, docker="", action="", service=""): feature_list = ['lldp', 'bgp', 'syncd', 'swss'] if 'dualtor' in tbinfo['topo']['name']: - disable_container_autorestart(duthost_lower, testcase="test_qos_sai", feature_list=feature_list) + disable_container_autorestart(duthost_upper, testcase="test_qos_sai", feature_list=feature_list) disable_container_autorestart(duthost, testcase="test_qos_sai", feature_list=feature_list) for service in services: @@ -708,7 +718,7 @@ def updateDockerService(host, docker="", action="", service=""): if 'dualtor' in tbinfo['topo']['name']: file = "/usr/local/bin/write_standby.py" backup_file = "/usr/local/bin/write_standby.py.bkup" - toggle_all_simulator_ports(UPPER_TOR) + toggle_all_simulator_ports(LOWER_TOR) try: duthost.shell("ls %s" % file) @@ -718,7 +728,7 @@ def updateDockerService(host, docker="", action="", service=""): except: pytest.skip('file {} not found'.format(file)) - duthost_lower.shell('sudo config feature state mux disabled') + duthost_upper.shell('sudo config feature state mux disabled') duthost.shell('sudo config feature state mux disabled') yield @@ -737,12 +747,12 @@ def updateDockerService(host, docker="", action="", service=""): pytest.skip('file {} not found'.format(backup_file)) duthost.shell('sudo config feature state mux enabled') - duthost_lower.shell('sudo config feature state mux enabled') + duthost_upper.shell('sudo config feature state mux enabled') logger.info("Start mux container for dual ToR testbed") enable_container_autorestart(duthost, testcase="test_qos_sai", feature_list=feature_list) if 'dualtor' in tbinfo['topo']['name']: - enable_container_autorestart(duthost_lower, testcase="test_qos_sai", feature_list=feature_list) + enable_container_autorestart(duthost_upper, testcase="test_qos_sai", feature_list=feature_list) @pytest.fixture(autouse=True) @@ -817,7 +827,7 @@ def dutQosConfig( self, duthosts, enum_frontend_asic_index, rand_one_dut_hostname, dutConfig, ingressLosslessProfile, ingressLossyProfile, egressLosslessProfile, egressLossyProfile, sharedHeadroomPoolSize, - tbinfo + tbinfo, lower_tor_host ): """ Prepares DUT host QoS configuration @@ -830,7 +840,11 @@ def dutQosConfig( Returns: QoSConfig (dict): Map containing DUT host QoS configuration """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + dut_asic = duthost.asic_instance(enum_frontend_asic_index) mgFacts = duthost.get_extended_minigraph_facts(tbinfo) pytest_assert("minigraph_hwsku" in mgFacts, "Could not find DUT SKU") @@ -973,7 +987,7 @@ def handleFdbAging(self, duthosts, rand_one_dut_hostname): @pytest.fixture(scope='class', autouse=True) def populateArpEntries( self, duthosts, enum_frontend_asic_index, rand_one_dut_hostname, - ptfhost, dutTestParams, dutConfig, releaseAllPorts, handleFdbAging, + ptfhost, dutTestParams, dutConfig, releaseAllPorts, handleFdbAging, tbinfo, lower_tor_host ): """ Update ARP entries of QoS SAI test ports @@ -992,7 +1006,11 @@ def populateArpEntries( Raises: RunAnsibleModuleFail if ptf test fails """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + dut_asic = duthost.asic_instance(enum_frontend_asic_index) saiQosTest = None if dutTestParams["topo"] in self.SUPPORTED_T0_TOPOS: @@ -1013,8 +1031,12 @@ def populateArpEntries( ) @pytest.fixture(scope='class', autouse=True) - def dut_disable_ipv6(self, duthosts, rand_one_dut_hostname): - duthost = duthosts[rand_one_dut_hostname] + def dut_disable_ipv6(self, duthosts, rand_one_dut_hostname, tbinfo, lower_tor_host): + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + duthost.shell("sysctl -w net.ipv6.conf.all.disable_ipv6=1") yield @@ -1023,7 +1045,7 @@ def dut_disable_ipv6(self, duthosts, rand_one_dut_hostname): @pytest.fixture(scope='class', autouse=True) def sharedHeadroomPoolSize( self, request, duthosts, enum_frontend_asic_index, - rand_one_dut_hostname + rand_one_dut_hostname, tbinfo, lower_tor_host ): """ Retreives shared headroom pool size @@ -1036,7 +1058,11 @@ def sharedHeadroomPoolSize( size: shared headroom pool size none if it is not defined """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + yield self.__getSharedHeadroomPoolSize( request, duthost.asic_instance(enum_frontend_asic_index) @@ -1045,7 +1071,7 @@ def sharedHeadroomPoolSize( @pytest.fixture(scope='class', autouse=True) def ingressLosslessProfile( self, request, duthosts, enum_frontend_asic_index, - rand_one_dut_hostname, dutConfig + rand_one_dut_hostname, dutConfig, tbinfo, lower_tor_host ): """ Retreives ingress lossless profile @@ -1059,7 +1085,11 @@ def ingressLosslessProfile( Returns: ingressLosslessProfile (dict): Map of ingress lossless buffer profile attributes """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + dut_asic = duthost.asic_instance(enum_frontend_asic_index) yield self.__getBufferProfile( request, @@ -1073,7 +1103,7 @@ def ingressLosslessProfile( @pytest.fixture(scope='class', autouse=True) def ingressLossyProfile( self, request, duthosts, enum_frontend_asic_index, - rand_one_dut_hostname, dutConfig + rand_one_dut_hostname, dutConfig, tbinfo, lower_tor_host ): """ Retreives ingress lossy profile @@ -1087,7 +1117,11 @@ def ingressLossyProfile( Returns: ingressLossyProfile (dict): Map of ingress lossy buffer profile attributes """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + dut_asic = duthost.asic_instance(enum_frontend_asic_index) yield self.__getBufferProfile( request, @@ -1101,7 +1135,7 @@ def ingressLossyProfile( @pytest.fixture(scope='class', autouse=True) def egressLosslessProfile( self, request, duthosts, enum_frontend_asic_index, - rand_one_dut_hostname, dutConfig + rand_one_dut_hostname, dutConfig, tbinfo, lower_tor_host ): """ Retreives egress lossless profile @@ -1115,7 +1149,11 @@ def egressLosslessProfile( Returns: egressLosslessProfile (dict): Map of egress lossless buffer profile attributes """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + dut_asic = duthost.asic_instance(enum_frontend_asic_index) yield self.__getBufferProfile( request, @@ -1129,7 +1167,7 @@ def egressLosslessProfile( @pytest.fixture(scope='class', autouse=True) def egressLossyProfile( self, request, duthosts, enum_frontend_asic_index, - rand_one_dut_hostname, dutConfig + rand_one_dut_hostname, dutConfig, tbinfo, lower_tor_host ): """ Retreives egress lossy profile @@ -1143,7 +1181,11 @@ def egressLossyProfile( Returns: egressLossyProfile (dict): Map of egress lossy buffer profile attributes """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + dut_asic = duthost.asic_instance(enum_frontend_asic_index) yield self.__getBufferProfile( request, @@ -1157,7 +1199,7 @@ def egressLossyProfile( @pytest.fixture(scope='class') def losslessSchedProfile( self, duthosts, enum_frontend_asic_index, rand_one_dut_hostname, - dutConfig + dutConfig, tbinfo, lower_tor_host ): """ Retreives lossless scheduler profile @@ -1170,7 +1212,11 @@ def losslessSchedProfile( Returns: losslessSchedProfile (dict): Map of scheduler parameters """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + yield self.__getSchedulerParam( duthost.asic_instance(enum_frontend_asic_index), dutConfig["dutInterfaces"][dutConfig["testPorts"]["src_port_id"]], @@ -1180,7 +1226,7 @@ def losslessSchedProfile( @pytest.fixture(scope='class') def lossySchedProfile( self, duthosts, enum_frontend_asic_index, rand_one_dut_hostname, - dutConfig + dutConfig, tbinfo, lower_tor_host ): """ Retreives lossy scheduler profile @@ -1193,7 +1239,11 @@ def lossySchedProfile( Returns: lossySchedProfile (dict): Map of scheduler parameters """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + yield self.__getSchedulerParam( duthost.asic_instance(enum_frontend_asic_index), dutConfig["dutInterfaces"][dutConfig["testPorts"]["src_port_id"]], @@ -1203,7 +1253,7 @@ def lossySchedProfile( @pytest.fixture def updateSchedProfile( self, duthosts, enum_frontend_asic_index, rand_one_dut_hostname, - dutQosConfig, losslessSchedProfile, lossySchedProfile + dutQosConfig, losslessSchedProfile, lossySchedProfile, tbinfo, lower_tor_host ): """ Updates lossless/lossy scheduler profiles @@ -1217,7 +1267,11 @@ def updateSchedProfile( Returns: None """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + def updateRedisSchedParam(schedParam): """ Helper function to updates lossless/lossy scheduler profiles @@ -1272,7 +1326,7 @@ def updateRedisSchedParam(schedParam): @pytest.fixture def resetWatermark( - self, duthosts, enum_frontend_asic_index, rand_one_dut_hostname + self, duthosts, enum_frontend_asic_index, rand_one_dut_hostname, tbinfo, lower_tor_host ): """ Reset queue watermark @@ -1283,7 +1337,11 @@ def resetWatermark( Returns: None """ - duthost = duthosts[rand_one_dut_hostname] + if 'dualtor' in tbinfo['topo']['name']: + duthost = lower_tor_host + else: + duthost = duthosts[rand_one_dut_hostname] + dut_asic = duthost.asic_instance(enum_frontend_asic_index) dut_asic.command("counterpoll watermark enable") dut_asic.command("sleep 70")