Spirent Support for Continuous Traffic 93/15293/1
authorSridhar Rao <sridhar.rao@spirent.com>
Wed, 8 Jun 2016 14:08:20 +0000 (19:38 +0530)
committersridharkn <sridhar.rao@spirent.com>
Wed, 8 Jun 2016 14:20:54 +0000 (19:50 +0530)
Adding changes for supporting continuous traffic for Spirent Testcenter
The changes are as follows:
1. From send_cont_traffic invoke function in testcenter-rfc2544-rest.py
2. In testcenter-rfc2544-rest.py check for the traffic_custom
3. If the traffic_custom is 'cont' do additional configuration on
traffic.

JIRA: VSPERF-146
Change-Id: Ic963f9f0c2bd013f6e676c9d18b151ae67ff77af

Signed-off-by: Sridhar Rao <sridhar.rao@spirent.com>
tools/pkt_gen/testcenter/testcenter-rfc2544-rest.py
tools/pkt_gen/testcenter/testcenter.py

index 428240a..91f7e27 100644 (file)
@@ -169,6 +169,11 @@ def main():
                                 default="PAIR",
                                 help="The traffic pattern between endpoints",
                                 dest="traffic_pattern")
+    optional_named.add_argument("--traffic_custom",
+                                required=False,
+                                default=None,
+                                help="The traffic pattern between endpoints",
+                                dest="traffic_custom")
     optional_named.add_argument("--search_mode",
                                 required=False,
                                 choices=["COMBO", "STEP", "BINARY"],
@@ -318,6 +323,12 @@ def main():
             logger.debug("Creating project ...")
         project = stc.get("System1", "children-Project")
 
+        # Configure any custom traffic parameters
+        if args.traffic_custom == "cont":
+            if args.verbose:
+                logger.debug("Configure Continuous Traffic")
+            stc.create("ContinuousTestConfig", under=project)
+
         # Create ports
         if args.verbose:
             logger.debug("Creating ports ...")
index 2adf6c9..f05ce33 100644 (file)
@@ -55,9 +55,125 @@ class TestCenter(trafficgen.ITrafficGenerator):
 
     def send_cont_traffic(self, traffic=None, duration=30):
         """
-        Do nothing.
+        Send Custom - Continuous Test traffic
+        Reuse RFC2544 throughput test specifications along with
+        'custom' configuration
         """
-        return None
+        verbose = False
+        custom = "cont"
+        framesize = settings.getValue("TRAFFICGEN_STC_FRAME_SIZE")
+        if traffic and 'l2' in traffic:
+            if 'framesize' in traffic['l2']:
+                framesize = traffic['l2']['framesize']
+        args = [settings.getValue("TRAFFICGEN_STC_PYTHON2_PATH"),
+                os.path.join(
+                    settings.getValue("TRAFFICGEN_STC_TESTCENTER_PATH"),
+                    settings.getValue(
+                        "TRAFFICGEN_STC_RFC2544_TPUT_TEST_FILE_NAME")),
+                "--lab_server_addr",
+                settings.getValue("TRAFFICGEN_STC_LAB_SERVER_ADDR"),
+                "--license_server_addr",
+                settings.getValue("TRAFFICGEN_STC_LICENSE_SERVER_ADDR"),
+                "--east_chassis_addr",
+                settings.getValue("TRAFFICGEN_STC_EAST_CHASSIS_ADDR"),
+                "--east_slot_num",
+                settings.getValue("TRAFFICGEN_STC_EAST_SLOT_NUM"),
+                "--east_port_num",
+                settings.getValue("TRAFFICGEN_STC_EAST_PORT_NUM"),
+                "--west_chassis_addr",
+                settings.getValue("TRAFFICGEN_STC_WEST_CHASSIS_ADDR"),
+                "--west_slot_num",
+                settings.getValue("TRAFFICGEN_STC_WEST_SLOT_NUM"),
+                "--west_port_num",
+                settings.getValue("TRAFFICGEN_STC_WEST_PORT_NUM"),
+                "--test_session_name",
+                settings.getValue("TRAFFICGEN_STC_TEST_SESSION_NAME"),
+                "--results_dir",
+                settings.getValue("TRAFFICGEN_STC_RESULTS_DIR"),
+                "--csv_results_file_prefix",
+                settings.getValue("TRAFFICGEN_STC_CSV_RESULTS_FILE_PREFIX"),
+                "--num_trials",
+                settings.getValue("TRAFFICGEN_STC_NUMBER_OF_TRIALS"),
+                "--trial_duration_sec",
+                settings.getValue("TRAFFICGEN_STC_TRIAL_DURATION_SEC"),
+                "--traffic_pattern",
+                settings.getValue("TRAFFICGEN_STC_TRAFFIC_PATTERN"),
+                "--traffic_custom",
+                str(custom),
+                "--search_mode",
+                settings.getValue("TRAFFICGEN_STC_SEARCH_MODE"),
+                "--learning_mode",
+                settings.getValue("TRAFFICGEN_STC_LEARNING_MODE"),
+                "--rate_lower_limit_pct",
+                settings.getValue("TRAFFICGEN_STC_RATE_LOWER_LIMIT_PCT"),
+                "--rate_upper_limit_pct",
+                settings.getValue("TRAFFICGEN_STC_RATE_UPPER_LIMIT_PCT"),
+                "--rate_initial_pct",
+                settings.getValue("TRAFFICGEN_STC_RATE_INITIAL_PCT"),
+                "--rate_step_pct",
+                settings.getValue("TRAFFICGEN_STC_RATE_STEP_PCT"),
+                "--resolution_pct",
+                settings.getValue("TRAFFICGEN_STC_RESOLUTION_PCT"),
+                "--frame_size_list",
+                str(framesize),
+                "--acceptable_frame_loss_pct",
+                settings.getValue("TRAFFICGEN_STC_ACCEPTABLE_FRAME_LOSS_PCT"),
+                "--east_intf_addr",
+                settings.getValue("TRAFFICGEN_STC_EAST_INTF_ADDR"),
+                "--east_intf_gateway_addr",
+                settings.getValue("TRAFFICGEN_STC_EAST_INTF_GATEWAY_ADDR"),
+                "--west_intf_addr",
+                settings.getValue("TRAFFICGEN_STC_WEST_INTF_ADDR"),
+                "--west_intf_gateway_addr",
+                settings.getValue("TRAFFICGEN_STC_WEST_INTF_GATEWAY_ADDR")]
+
+        if settings.getValue("TRAFFICGEN_STC_VERBOSE") is "True":
+            args.append("--verbose")
+            verbose = True
+            self._logger.debug("Arguments used to call test: %s", args)
+        subprocess.check_call(args)
+
+        filec = os.path.join(settings.getValue("TRAFFICGEN_STC_RESULTS_DIR"),
+                             settings.getValue(
+                                 "TRAFFICGEN_STC_CSV_RESULTS_FILE_PREFIX") +
+                             ".csv")
+
+        if verbose:
+            self._logger.info("file: %s", filec)
+
+        result = {}
+
+        with open(filec, "r") as csvfile:
+            csvreader = csv.DictReader(csvfile)
+            for row in csvreader:
+                self._logger.info("Row: %s", row)
+                tx_fps = ((float(row["TxFrameCount"])) /
+                          (float(row["Duration(sec)"])))
+                rx_fps = ((float(row["RxFrameCount"])) /
+                          (float(row["Duration(sec)"])))
+                tx_mbps = ((float(row["TxFrameCount"]) *
+                            float(row["ConfiguredFrameSize"])) /
+                           (float(row["Duration(sec)"]) * 1000000.0))
+                rx_mbps = ((float(row["RxFrameCount"]) *
+                            float(row["ConfiguredFrameSize"])) /
+                           (float(row["Duration(sec)"]) * 1000000.0))
+                result[ResultsConstants.TX_RATE_FPS] = tx_fps
+                result[ResultsConstants.THROUGHPUT_RX_FPS] = rx_fps
+                result[ResultsConstants.TX_RATE_MBPS] = tx_mbps
+                result[ResultsConstants.THROUGHPUT_RX_MBPS] = rx_mbps
+                result[ResultsConstants.TX_RATE_PERCENT] = float(
+                    row["OfferedLoad(%)"])
+                result[ResultsConstants.THROUGHPUT_RX_PERCENT] = float(
+                    row["Throughput(%)"])
+                result[ResultsConstants.MIN_LATENCY_NS] = float(
+                    row["MinimumLatency(us)"]) * 1000
+                result[ResultsConstants.MAX_LATENCY_NS] = float(
+                    row["MaximumLatency(us)"]) * 1000
+                result[ResultsConstants.AVG_LATENCY_NS] = float(
+                    row["AverageLatency(us)"]) * 1000
+                result[ResultsConstants.FRAME_LOSS_PERCENT] = float(
+                    row["PercentLoss"])
+        return result
 
     def send_rfc2544_throughput(self, traffic=None, trials=3, duration=20,
                                 lossrate=0.0):