test suite reviews and discussions
 help / color / mirror / Atom feed
From: Ding Heng <hengx.ding@intel.com>
To: dts@dpdk.org
Cc: Ding Heng <hengx.ding@intel.com>
Subject: [dts] [PATCH] framework: enable RFC2544 support
Date: Thu, 10 Dec 2015 14:10:15 +0800	[thread overview]
Message-ID: <1449727815-22305-1-git-send-email-hengx.ding@intel.com> (raw)

Enable RFC2544 support for dts framework, add "delay" parameter for some of the
functions in file etgen.py and tester.py to make sure that test cases could
control the time to run.

Signed-off-by: Ding Heng <hengx.ding@intel.com>

diff --git a/framework/etgen.py b/framework/etgen.py
index 508439b..37c4ff3 100644
--- a/framework/etgen.py
+++ b/framework/etgen.py
@@ -476,18 +476,18 @@ class IxiaPacketGenerator(SSHConnection):
 
         return {'card': int(m.group(1)), 'port': int(m.group(2))}
 
-    def loss(self, portList, ratePercent):
+    def loss(self, portList, ratePercent, delay=5):
         """
         Run loss performance test and return loss rate.
         """
         rxPortlist, txPortlist = self._configure_everything(portList, ratePercent)
-        return self.get_loss_packet_rate(rxPortlist, txPortlist)
+        return self.get_loss_packet_rate(rxPortlist, txPortlist, delay)
 
-    def get_loss_packet_rate(self, rxPortlist, txPortlist):
+    def get_loss_packet_rate(self, rxPortlist, txPortlist, delay=5):
         """
         Get RX/TX packet statistics and calculate loss rate.
         """
-        time.sleep(3)
+        time.sleep(delay)
 
         self.send_expect("ixStopTransmit portList", "%", 10)
         time.sleep(2)
@@ -507,7 +507,7 @@ class IxiaPacketGenerator(SSHConnection):
             revNumber += self.get_frames_received()
         self.logger.info("rev  :%f" % revNumber)
 
-        return float(sendNumber - revNumber) / sendNumber
+        return float(sendNumber - revNumber) / sendNumber, sendNumber, revNumber
 
     def latency(self, portList, ratePercent, delay=5):
         """
@@ -801,7 +801,10 @@ class IxiaPacketGenerator(SSHConnection):
         Returns the number of packets captured by IXIA on a previously set
         port. Call self.stat_get_stat_all_stats(port) before.
         """
-        return self._stat_cget_value('framesReceived')
+        if self._stat_cget_value('framesReceived') !=0:
+            return self._stat_cget_value('framesReceived')
+        else:
+            return self._stat_cget_value('oversize')
 
     def get_flow_control_frames(self):
         """
diff --git a/framework/tester.py b/framework/tester.py
index b102065..9446854 100644
--- a/framework/tester.py
+++ b/framework/tester.py
@@ -413,8 +413,33 @@ class Tester(Crb):
             self.logger.warning("exception by mixed port types")
             return None
         return self.packet_gen.throughput(portList, rate_percent)
+    def run_rfc2544(self, portlist, delay=120):
+        """
+        zero_rate: dpdk will not lost packet in this line rate.
+        loss_rate: dpdk will loss packet in this line rate.
+        test_rate: the line rate we are going to test.
+        """
+        zero_rate = 0.0
+        loss_rate = 100.0
+        test_rate = 100.0
+
+        while (loss_rate - zero_rate) > 0.002:
+                self.logger.info("test rate: %f " % test_rate)
+                if test_rate == 100:
+                        lost, tx_num, rx_num = self.traffic_generator_loss(portlist, test_rate, delay)
+                else:
+                        lost, _, _ = self.traffic_generator_loss(portlist, test_rate, delay)
+                if lost != 0:
+                        loss_rate = test_rate
+                        test_rate = (test_rate + zero_rate)/2
+                else:
+                        zero_rate = test_rate
+                        test_rate = (test_rate + loss_rate)/2
+
+        self.logger.info("zero loss rate is %s" % test_rate)
+        return test_rate, tx_num, rx_num
 
-    def traffic_generator_loss(self, portList, ratePercent):
+    def traffic_generator_loss(self, portList, ratePercent, delay=60):
         """
         Run loss performance test on specified ports.
         """
@@ -423,7 +448,7 @@ class Tester(Crb):
         elif not self.check_port_list(portList):
             self.logger.warning("exception by mixed port types")
             return None
-        return self.packet_gen.loss(portList, ratePercent)
+        return self.packet_gen.loss(portList, ratePercenti, delay)
 
     def traffic_generator_latency(self, portList, ratePercent=100, delay=5):
         """
-- 
1.9.3

             reply	other threads:[~2015-12-10  6:10 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-10  6:10 Ding Heng [this message]
2015-12-11  0:58 ` Liu, Yong
2015-12-11  3:24 Ding Heng
2015-12-11  9:07 ` Liu, Yong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1449727815-22305-1-git-send-email-hengx.ding@intel.com \
    --to=hengx.ding@intel.com \
    --cc=dts@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).