diff mbox series

[V2,4/4] tests/quota_watermark: remove test suite and plan

Message ID 20200824103457.26447-4-jianweix.mei@intel.com (mailing list archive)
State Accepted
Headers show
Series [V2,1/4] test_plans/nvgre:add the change CONFIG_RTE_LIBRTE_I40E_INC_VECTOR to N in test plan | expand

Commit Message

Mei, JianweiX Aug. 24, 2020, 10:34 a.m. UTC
The qw app removed from DPDK, so remove the test suite and plan too.

Signed-off-by: Jianwei Mei <jianweix.mei@intel.com>
---
 test_plans/quota_watermark_test_plan.rst | 192 ---------
 tests/TestSuite_quota_watermark.py       | 481 -----------------------
 2 files changed, 673 deletions(-)
 delete mode 100644 test_plans/quota_watermark_test_plan.rst
 delete mode 100644 tests/TestSuite_quota_watermark.py

Comments

Tu, Lijuan Aug. 27, 2020, 2:33 a.m. UTC | #1
> Subject: [dts] [PATCH V2 4/4] tests/quota_watermark: remove test suite and
> plan
> 
> The qw app removed from DPDK, so remove the test suite and plan too.
> 
> Signed-off-by: Jianwei Mei <jianweix.mei@intel.com>

Applied the series.
diff mbox series

Patch

diff --git a/test_plans/quota_watermark_test_plan.rst b/test_plans/quota_watermark_test_plan.rst
deleted file mode 100644
index 6759fbd..0000000
--- a/test_plans/quota_watermark_test_plan.rst
+++ /dev/null
@@ -1,192 +0,0 @@ 
-.. Copyright (c) <2013-2017>, Intel Corporation
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-
-   - Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in
-     the documentation and/or other materials provided with the
-     distribution.
-
-   - Neither the name of Intel Corporation nor the names of its
-     contributors may be used to endorse or promote products derived
-     from this software without specific prior written permission.
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-   OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-
-==============================================
-Sample Application Tests: Quota and Water-mark
-==============================================
-
-This document provides test plan for benchmarking of the Quota and Water-mark
-sample application. This is a simple example app featuring packet processing
-using Intel® Data Plane Development Kit (Intel® DPDK) that show-cases the use
-of a quota as the maximum number of packets enqueue/dequeue at a time and low
-and high water-marks to signal low and high ring usage respectively.
-Additionally, it shows how ring water-marks can be used to feedback congestion
-notifications to data producers by temporarily stopping processing overloaded
-rings and sending Ethernet flow control frames.
-
-
-Prerequisites
--------------
-
-2x Intel® 82599 (Niantic) NICs (2x 10GbE full duplex optical ports per NIC)
-plugged into the available PCIe Gen2 8-lane slots in two different
-configurations:
-
-1. card0 and card1 attached to socket0.
-2. card0 attached to socket0 and card1 to socket1.
-
-Test cases
-----------
-
-The idea behind the testing process is to send a fixed number of frames from
-the traffic generator to the DUT while these are being forwarded back by the
-app and measure some of statistics. Those configurable parameters exposed by
-the control app will be modified to see how these affect into the app's
-performance.Functional test is only used for checking packet transfer flow with
-low watermark packets.
-
-The statistics to be measured are explained below.
-A table will be presented showing all the different permutations.
-
-
-- Ring size
-
-  - Size of the rings that interconnect two adjacent cores within the
-    pipeline.
-
-- Quota
-
-  - Value controls how many packets are being moved through the pipeline per
-    en-queue and de-queue.
-
-- Low water-mark
-
-  - Global threshold that will resume en-queuing on a ring once its usage
-    goes below it.
-
-- High water-mark
-
-  - Threshold that will stop en-queuing on rings for which the usage has it.
-
-- Frames sent
-
-  - Number of frames sent from the traffic generator.
-
-- Frames received
-
-  - Number of frames received on the traffic generator once they were
-    forwarded back by the app.
-
-- Control flow frames received
-
-  - Number of Control flow frames (PAUSE frame defined by the IEEE 802.3x
-    standard) received on the traffic generator TX port.
-
-- Transmit rate (Mpps)
-
-  - Rate of transmission. It is calculated dividing the number of sent
-    packets over the time it took the traffic generator to send them.
-
-
-  +-----------+-------+----------------+-----------------+-------------+-----------------+------------------------------+----------------------+
-  | Ring size | Quota | Low water-mark | High water-mark | Frames sent | Frames received | Control flow frames received | Transmit rate (Mpps) |
-  +===========+=======+================+=================+=============+=================+==============================+======================+
-  | 64        | 5     | 1              | 5               | 15000000    |                 |                              |                      |
-  +-----------+-------+----------------+-----------------+-------------+-----------------+------------------------------+----------------------+
-  | 64        | 5     | 10             | 20              | 15000000    |                 |                              |                      |
-  +-----------+-------+----------------+-----------------+-------------+-----------------+------------------------------+----------------------+
-  | 64        | 5     | 10             | 99              | 15000000    |                 |                              |                      |
-  +-----------+-------+----------------+-----------------+-------------+-----------------+------------------------------+----------------------+
-  | 64        | 5     | 60             | 99              | 15000000    |                 |                              |                      |
-  +-----------+-------+----------------+-----------------+-------------+-----------------+------------------------------+----------------------+
-  | 64        | 5     | 90             | 99              | 15000000    |                 |                              |                      |
-  +-----------+-------+----------------+-----------------+-------------+-----------------+------------------------------+----------------------+
-  | 64        | 5     | 10             | 80              | 15000000    |                 |                              |                      |
-  +-----------+-------+----------------+-----------------+-------------+-----------------+------------------------------+----------------------+
-  | 64        | 5     | 50             | 80              | 15000000    |                 |                              |                      |
-  +-----------+-------+----------------+-----------------+-------------+-----------------+------------------------------+----------------------+
-
-
-Test Case 1: Quota and Water-mark one socket (functional)
----------------------------------------------------------
-
-Using No.1 card configuration.
-
-This test case calls the application using cores and ports masks similar to
-the ones shown below.
-
-- Core mask ``0xFF00``
-- Port mask ``0x280``
-
-This core mask will make use of eight physical cores within the same socket.
-The used ports belong to different NIC’s attached to the same socket.
-
-Sample command::
-
-  ./examples/quota_watermark/qw/build/qw -c 0xFF00 -n 4 -- -p 0x280
-
-After boot up qw and qwctl, send IP packets by scapy with low watermark value.
-Command format::
-
-   sendp([Ether()/IP()/("X"*26)]*<low watermark value>, iface="<port name>")
-
-Sample command::
-
-   sendp([Ether()/IP()/("X"*26)]*10, iface="p785p1")
-
-Test Case 2: Quota and Water-mark one socket (performance)
-----------------------------------------------------------
-
-This test case calls the application using cores and ports masks similar to
-the ones shown below.
-
-- Core mask ``0xFF00``
-- Port mask ``0x280``
-
-This core mask will make use of eight physical cores within the same socket.
-The used ports belong to different NIC’s attached to the same socket.
-
-Sample command::
-
-  ./examples/quota_watermark/qw/build/qw -c 0xFF00 -n 4 -- -p 0x280
-
-
-Test Case 3: Quota and Water-mark two sockets (performance)
------------------------------------------------------------
-
-
-This test case calls the application using a core and port mask similar to the
-ones shown below.
-
-- Core mask ``0x0FF0``
-- Port mask ``0x202``
-
-This core mask will make use of eight physical cores; four within the first
-socket and four on the second one. The RX port will be attached to the first
-socket whereas the TX is to the second. This configuration will provoke the
-traffic going through the pipeline pass through the ``QPI`` channel.
-
-Sample command::
-
-  ./examples/quota_watermark/qw/build/qw -c 0x8180706 -n 4 -- -p 0x202
diff --git a/tests/TestSuite_quota_watermark.py b/tests/TestSuite_quota_watermark.py
deleted file mode 100644
index 5f66727..0000000
--- a/tests/TestSuite_quota_watermark.py
+++ /dev/null
@@ -1,481 +0,0 @@ 
-# BSD LICENSE
-#
-# Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#   * Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-#   * Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in
-#     the documentation and/or other materials provided with the
-#     distribution.
-#   * Neither the name of Intel Corporation nor the names of its
-#     contributors may be used to endorse or promote products derived
-#     from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""
-DPDK Test suite.
-
-Quota & Watermark example app test cases.
-
-"""
-import time
-import utils
-from test_case import TestCase
-from etgen import IxiaPacketGenerator
-
-test_config = {
-    'frames_to_sent': 15 * 10 ** 6,
-    'ring_sizes': [64, 256, 1024],
-    'low_high_watermarks': [
-        (0o1, 0o5), 
-        (10, 20), 
-        (10, 99),
-        (60, 99), 
-        (90, 99), 
-        (10, 80),
-        (50, 80), 
-        (70, 80), 
-        (70, 90),
-        (80, 90)
-    ],
-    'quota_values': [5, 32, 60],
-}
-
-#
-#
-# Test class.
-#
-
-
-class TestQuotaWatermark(TestCase, IxiaPacketGenerator):
-
-    #
-    #
-    #
-    # Test cases.
-    #
-
-    def set_up_all(self):
-        """
-        Run at the start of each test suite.
-
-        Quota watermark prerequisites.
-        """
-
-        self.tester.extend_external_packet_generator(TestQuotaWatermark, self)
-
-    def add_report_headers(self, core_mask, port_mask):
-        """
-        Adds the table header and some info about the executed test
-        """
-        self.rst_report('Core mask: %s' % core_mask)
-        self.rst_report('Port mask: %s' % port_mask)
-        self.result_table_create([
-            'Ring size',
-            'Quota',
-            'Low water-mark',
-            'High water-mark',
-            'Frames sent',
-            'Frames received',
-            'Control flow frames received',
-            'Transmit rate (Mpps)'
-        ])
-
-    def set_app_ring_size(self, ring_size):
-        """
-        Changes the ring size by modifying the example app code.
-        """
-
-        sed_command = (r"sed -i 's/^\(.*RING_SIZE\)\s*[[:digit:]]*/\1 %d/' " +
-                       r"examples/quota_watermark/include/conf.h")
-        self.dut.send_expect(sed_command % int(ring_size), '# ')
-
-    def compile_quota_watermark_example_apps(self):
-        """
-        Builds the example app and checks for errors.
-        """
-
-        out = self.dut.build_dpdk_apps("examples/quota_watermark")
-        self.verify("Error" not in out and "No such file" not in out,
-                    "Compilation error")
-
-    def execute_qw_app(self, core_mask, port_mask, memory_channels):
-        """
-        Executes the main example app in the background.
-        """
-
-        command = ('./examples/quota_watermark/qw/%s/qw -c {core_mask}' % self.target +
-                   ' -n {memory_channels} -- -p {port_mask} 2>&1 > output.log &')
-        self.dut.send_expect(command.format(**locals()), '# ')
-
-    def execute_qwctl_app(self, memory_channels):
-        """
-        Executes the control app and returns waiting for commands.
-        """
-
-        command = './examples/quota_watermark/qwctl/%s/qwctl -c 1 -n %s --proc-type=secondary'
-        command = command % (self.target, str(memory_channels))
-        result = self.dut.send_expect(command, 'qwctl> ')
-        self.verify('Error' not in result, 'qwctl app failed to execute')
-
-    def execute_quota_watermark_example_apps(self, core_mask, port_mask, memory_channels):
-        """
-        Execute both example apps and checks for errors.
-        """
-        
-        self.execute_qw_app(core_mask, port_mask, memory_channels)
-        # We wait until the app starts and writes its output down to the log
-        # file
-        time.sleep(15)
-        result = self.dut.send_expect('cat output.log', '# ')
-        self.verify('probe driver:' in result,
-                    'qw app failed to execute')
-        self.execute_qwctl_app(memory_channels)
-
-    def close_quota_watermark_example_apps(self):
-        """
-        Close control app sending Ctrl-D. This app is always in foreground.
-        Also kills the main app which is in the background.
-        """
-
-        self.dut.send_expect('^D', '# ')
-        self.dut.send_expect('killall qw', '# ')
-
-    def send_qwctl_command(self, command, unexpected_outputs):
-        """
-        Sends a command to the control app and checks the given unexpected output
-        is not in the app's output.
-        """
-
-        result = self.dut.send_expect(command, 'qwctl>')
-        for output in unexpected_outputs:
-            self.verify(output not in result, "`%s' is incorrect" % command)
-
-    def set_quota_value(self, quota):
-        """
-        Sets the global quota value.
-        """
-
-        self.send_qwctl_command('set quota %d' % quota,
-                                ['quota must be between'])
-
-    def set_low_watermark(self, low_watermark):
-        """
-        Sets the global low watermark value.
-        """
-
-        self.send_qwctl_command('set low_watermark %d' % low_watermark,
-                                ['low_watermark must be between'])
-
-    def set_high_watermark_single_core_port(self, core, port, high_watermark):
-        """
-        Sets the high watermark value for a given ring identified by a core
-        and port number.
-        """
-
-        command = 'set core%d_port%d %d' % \
-                  (int(core), int(port), int(high_watermark))
-        unexpected = [
-            'ring high watermark must be between', 'Cannot find ring']
-        self.send_qwctl_command(command, unexpected)
-
-    def set_high_watermark_all_cores_ports(self, cores, ports, high_watermark):
-        """
-        Sets high watermark value to a list of cores/ports. Due to the app's way
-        to work the last core doesn't have any ring to enqueue in, that's why the
-        last core is avoided.
-        """
-
-        cores.sort(key=lambda core: int(core))
-        for core in cores[:-1]:
-            for port in ports:
-                self.set_high_watermark_single_core_port(
-                    core, port, high_watermark)
-
-    def prepare_scapy_packet(self, pkt_cnt=1):
-        """
-        Creates a simple scapy packet to run the tests with
-        """
-
-        self.tester.scapy_append('flow=[Ether(src="11:22:33:44:55:66")/IP()/("X"*26)]*%d'%pkt_cnt)
-        self.tester.scapy_append('wrpcap("file.pcap", flow)')
-        self.tester.scapy_execute()
-
-    def get_ports_config(self, dut_rx_port, dut_tx_port):
-        """
-        Creates a usable data structure where the ports configuration is stored.
-        """
-
-        ports_config = {}
-        ports_config['dut_rx'] = dut_rx_port
-        ports_config['dut_tx'] = dut_tx_port
-        ports_config[
-            'dut_port_mask'] = utils.create_mask([ports_config['dut_tx'],
-                                                ports_config['dut_rx']])
-        ports_config['tester_rx'] = self.tester.get_local_port(
-            ports_config['dut_rx'])
-        ports_config['tester_tx'] = self.tester.get_local_port(
-            ports_config['dut_tx'])
-        return ports_config
-
-    def generate_tgen_input(self, ports_config, pkt_cnt=1):
-        """
-        Generates the argument that the external traffic generator function
-        waits to receive as argument.
-        """
-
-        self.prepare_scapy_packet(pkt_cnt)
-        tgen_input = [[ports_config['tester_tx'],
-                       ports_config['tester_rx'],
-                       'file.pcap']]
-        return tgen_input
-
-    def send_pcap_pkt_by_scapy(self, tester=None, file='', intf=''):
-        if intf == '' or file == '' or tester is None:
-            print("Invalid option for send packet by scapy")
-            return
-
-        content = 'pkts=rdpcap(\"%s\");sendp(pkts, iface=\"%s\");exit()' % (file, intf)
-        cmd_file = '/tmp/scapy_%s.cmd' % intf
-
-        tester.create_file(content, cmd_file)
-        tester.send_expect("scapy -c scapy_%s.cmd &" % intf, "# ")
-
-    def iterate_through_qw_ring_sizes(self, ports_config, core_config):
-        """
-        It goes through the different ring values compiling the apps, executing
-        them, running the other test permutations and finally closing the apps.
-        The rings are the first to be covered because we need to build/start/stop
-        the apps to change them.
-        """
-
-        dut_ports = [ports_config['dut_rx'], ports_config['dut_tx']]
-        memory_channels = self.dut.get_memory_channels()
-        tgen_input = self.generate_tgen_input(ports_config)
-
-        for ring_size in test_config['ring_sizes']:
-            self.set_app_ring_size(ring_size)
-            self.compile_quota_watermark_example_apps()
-            self.execute_quota_watermark_example_apps(core_config['mask'],
-                                                      ports_config['dut_port_mask'],
-                                                      memory_channels)
-            self.iterate_through_qw_quota_watermarks( core_config['cores'], 
-                                                      dut_ports, 
-                                                      tgen_input, 
-                                                      ring_size)
-            self.close_quota_watermark_example_apps()
-
-    def iterate_through_qw_quota_watermarks(self, cores, ports, tgen_input, ring_size):
-        """
-        Goes through the other test permutations changing the quota and water-marks
-        values, calling IXIA and storing the results in the result table.
-        """
-
-        for quota in test_config['quota_values']:
-            for low_watermark, high_watermark in test_config['low_high_watermarks']:
-                self.set_quota_value(quota)
-                self.set_low_watermark(low_watermark)
-                self.set_high_watermark_all_cores_ports(cores, ports, high_watermark)
-                self.num_of_frames = test_config['frames_to_sent']
-                test_stats = self.tester.traffic_generator_throughput(tgen_input)
-
-                self.result_table_add([ring_size, quota, low_watermark, high_watermark] +
-                                          test_stats)
-
-    def check_packets_transfer(self, tx_port, rx_port, tgen_input, pkt_cnt=1):
-        '''
-        check packets transmission status
-        '''
-        # check forwarded mac has been changed
-        rev_port = self.tester.get_local_port(rx_port)
-        send_port = self.tester.get_local_port(tx_port)
-        dst_mac = self.dut.get_mac_address(rx_port)
-        rx_intf = self.tester.get_interface(rev_port)
-        tx_intf = self.tester.get_interface(send_port)
-        # send and sniff packet
-        rx_inst = self.tester.tcpdump_sniff_packets(rx_intf)
-        self.send_pcap_pkt_by_scapy(self.tester, tgen_input[0][2], tx_intf)
-        pkts = self.tester.load_tcpdump_sniff_packets(rx_inst, timeout=2)
-        self.verify(len(pkts) == pkt_cnt, "Packet not forwarded as expected")
-
-        return
-
-    def get_setting_parameters(self, para_type):
-        '''
-        get setting parameters from performance setting 
-        '''
-        settings = test_config[para_type][:1]
-        
-        return settings
-
-    def func_iterate_through_qw_quota_watermarks(self, cores, ports_config, ports, ring_size):
-        """
-        Goes through the other test permutations changing the quota and water-marks
-        values, send packets by scapy and check packets transmission status.
-        """
-        for quota in self.get_setting_parameters('quota_values'):
-            for low_watermark, high_watermark in self.get_setting_parameters('low_high_watermarks'):
-                self.set_quota_value(quota)
-                self.set_low_watermark(low_watermark)
-                self.set_high_watermark_all_cores_ports( cores, ports, high_watermark)
-                tgen_input = self.generate_tgen_input(ports_config, pkt_cnt=low_watermark)
-                test_stats = self.check_packets_transfer(ports[0], ports[1], tgen_input, pkt_cnt=low_watermark)
-
-    def func_iterate_through_qw_ring_sizes(self, ports_config, core_config):
-        """
-        It goes through the different ring values compiling the apps, executing
-        them, running the other test permutations and finally closing the apps.
-        The rings are the first to be covered because we need to build/start/stop
-        the apps to change them.
-        """
-
-        dut_ports = [ports_config['dut_rx'], ports_config['dut_tx']]
-        memory_channels = self.dut.get_memory_channels()
-        
-        for ring_size in self.get_setting_parameters('ring_sizes'):
-            self.set_app_ring_size(ring_size)
-            self.compile_quota_watermark_example_apps()
-            self.execute_quota_watermark_example_apps(core_config['mask'],
-                                                      ports_config['dut_port_mask'],
-                                                      memory_channels)
-            self.func_iterate_through_qw_quota_watermarks( core_config['cores'],
-                                                           ports_config, 
-                                                           dut_ports,
-                                                           ring_size)
-            self.close_quota_watermark_example_apps()
-
-    def config_ixia_stream(self, rate_percent, flows):
-        """
-        Work around that overrides the etgen.config_stream function in order to
-        change the way that IXIA gets called.
-        In this case IXIA sends a fixed number of packets and then stops.
-        """
-
-        self.add_tcl_cmd("ixGlobalSetDefault")
-        self.add_tcl_cmd("stream config -rateMode usePercentRate")
-        self.add_tcl_cmd("stream config -percentPacketRate %s" % rate_percent)
-
-        # We define one burst with num_frames packets on it and we also want IXIA
-        # to stop once all of them have been sent.
-        self.add_tcl_cmd("stream config -numBursts 1")
-        self.add_tcl_cmd("stream config -numFrames %d" % self.num_of_frames)
-        self.add_tcl_cmd("stream config -dma stopStream")
-
-    def configure_transmission(self):
-        """
-        Work around that substitute the etgen.Throughput function.
-        It makes IXIA to send a fixed number of packets and waits until is done.
-        Returns several stat values needed by the test cases.
-        """
-
-        # This basically means "start the packets transmission and don't return
-        # until you are done". Thanks to that, after we "source ixiaConfig.tcl" we
-        # are 100% sure that all the packets have been sent and IXIA is pretty much
-        # done so we can read the stats.
-        self.add_tcl_cmd("ixStartTransmit portList")
-        self.add_tcl_cmd('after 1000')
-        self.add_tcl_cmd('ixCheckTransmitDone portList')
-        # end configure_transmission
-
-    def get_transmission_results(self, rx_port_list, tx_port_list):
-        frames_received = 0
-        for port in rx_port_list:
-            self.stat_get_stat_all_stats(port)
-            frames_received += self.get_frames_received()
-
-        frames_sent = 0
-        control_flow_received = 0
-        transmit_duration = 0
-        for port in tx_port_list:
-            self.stat_get_stat_all_stats(port)
-            control_flow_received += self.get_flow_control_frames()
-            frames_sent += self.get_frames_sent()
-            # Time in nanoseconds
-            transmit_duration += self.get_transmit_duration()
-
-        rate = self.packet_2_millpacket(
-            frames_sent) / self.nanosec_2_sec(transmit_duration)
-        return [frames_sent, frames_received, control_flow_received, rate]
-
-    def nanosec_2_sec(self, nano_secs):
-        return float(nano_secs) / 10e9
-
-    def packet_2_millpacket(self, num_of_pkt):
-        return float(num_of_pkt) / 10e6
-
-    def test_quota_watermark(self):
-        """
-        Test case that runs the different test permutations by using cores on
-        a single socket and two ports attached to it.
-        """
-
-        dut_ports = self.dut.get_ports(self.nic, perf=True)
-        self.verify(len(dut_ports) >= 2,
-                    "Insufficient ports for speed testing")
-        ports_config = self.get_ports_config(dut_ports[0], dut_ports[1])
-
-        cores_one_socket = self.dut.get_core_list('1S/4C/1T')
-        core_config = {
-            'cores': cores_one_socket,
-            'mask': utils.create_mask(cores_one_socket)
-        }
-
-        self.func_iterate_through_qw_ring_sizes(ports_config, core_config)
-
-    def test_perf_quota_watermark_one_socket(self):
-        """
-        Test case that runs the different test permutations by using cores on
-        a single socket and two ports attached to it.
-        """
-
-        dut_ports = self.dut.get_ports(self.nic, perf=True)
-        self.verify(len(dut_ports) >= 2, "Insufficient ports for speed testing")
-        ports_config = self.get_ports_config(dut_ports[2], dut_ports[3])
-
-        cores_one_socket = self.dut.get_core_list('1S/4C/1T')
-        core_config = {
-            'cores':   cores_one_socket,
-            'mask':    utils.create_mask(cores_one_socket)
-        }
-
-        self.add_report_headers( core_config['mask'], 
-                                 ports_config['dut_port_mask'])
-        self.iterate_through_qw_ring_sizes(ports_config, core_config)
-        self.result_table_print()
-
-    def test_perf_quota_watermark_two_sockets(self):
-        """
-        Test case that runs the different test permutations by using cores on
-        two different sockets with a port attached to each one of them.
-        """
-
-        dut_ports = self.dut.get_ports(self.nic, perf=True)
-        self.verify(len(dut_ports) >= 4, "Insufficient ports for speed testing")
-        ports_config = self.get_ports_config(dut_ports[0], dut_ports[3])
-
-        cores_two_sockets = self.dut.get_core_list('2S/4C/1T')
-        core_config = {
-            'cores': cores_two_sockets,
-            'mask': utils.create_mask(cores_two_sockets)
-        }
-
-        self.add_report_headers( core_config['mask'], ports_config['dut_port_mask'])
-        self.iterate_through_qw_ring_sizes(ports_config, core_config)
-        self.result_table_print()