From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 492488E71 for ; Fri, 11 Dec 2015 04:24:10 +0100 (CET) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP; 10 Dec 2015 19:24:09 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,411,1444719600"; d="scan'208";a="869298046" Received: from shilc102.sh.intel.com ([10.239.39.44]) by orsmga002.jf.intel.com with ESMTP; 10 Dec 2015 19:24:08 -0800 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shilc102.sh.intel.com with ESMTP id tBB3O6c5018645; Fri, 11 Dec 2015 11:24:06 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id tBB3O2do009769; Fri, 11 Dec 2015 11:24:04 +0800 Received: (from hengdinx@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id tBB3O21U009765; Fri, 11 Dec 2015 11:24:02 +0800 From: Ding Heng To: dts@dpdk.org Date: Fri, 11 Dec 2015 11:24:01 +0800 Message-Id: <1449804241-9734-1-git-send-email-hengx.ding@intel.com> X-Mailer: git-send-email 1.7.4.1 Cc: Ding Heng Subject: [dts] [PATCH] framework: enable RFC2544 support X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Dec 2015 03:24:11 -0000 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. Affected case vmdq has been changed to adapt the added return value. Signed-off-by: Ding Heng diff --git a/framework/etgen.py b/framework/etgen.py index 508439b..364499c 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,12 @@ 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: + #if the packet size is large than 1518, this line will avoid return + #a wrong number + return self._stat_cget_value('oversize') def get_flow_control_frames(self): """ diff --git a/framework/tester.py b/framework/tester.py index b102065..e47160f 100644 --- a/framework/tester.py +++ b/framework/tester.py @@ -414,7 +414,33 @@ class Tester(Crb): return None return self.packet_gen.throughput(portList, rate_percent) - def traffic_generator_loss(self, portList, ratePercent): + 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, delay=60): """ Run loss performance test on specified ports. """ @@ -423,7 +449,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): """ diff --git a/tests/TestSuite_vmdq.py b/tests/TestSuite_vmdq.py index de5a86f..429870a 100644 --- a/tests/TestSuite_vmdq.py +++ b/tests/TestSuite_vmdq.py @@ -115,7 +115,7 @@ class TestVmdq(TestCase, IxiaPacketGenerator): self.tester.scapy_execute() tgen_input.append((tx_port, rx_port, "test%d.pcap" %p)) - loss = self.tester.traffic_generator_loss(tgen_input, 10) + loss, _, _ = self.tester.traffic_generator_loss(tgen_input, 10) print "loss is %s !" % loss # Verify the accurate -- 1.9.3