Fix issue in csit hoststack test 37/38137/4
authorYulong Pei <yulong.pei@intel.com>
Mon, 6 Feb 2023 08:09:02 +0000 (08:09 +0000)
committerPeter Mikus <peter.mikus@protonmail.ch>
Mon, 13 Feb 2023 10:47:03 +0000 (10:47 +0000)
1. ABTool.py, fix error in parsing the return result of ab
2. DUTSetup.py, add sleep to wait for the program to start

Signed-off-by: Peng Lu <pengx.lu@intel.com>
Signed-off-by: Xinfeng Zhao <xinfengx.zhao@intel.com>
Signed-off-by: Yulong Pei <yulong.pei@intel.com>
Change-Id: I1cffa28d8492bcc27ae188f1e084b80afad60502

resources/libraries/python/DUTSetup.py
resources/tools/ab/ABTools.py

index 6e35302..419a4e2 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2022 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -207,42 +207,25 @@ class DUTSetup:
         exec_cmd_no_error(node, cmd, message=f"{program} is not installed")
 
     @staticmethod
-    def get_pid(node, process):
+    def get_pid(node, process, retries=3):
         """Get PID of running process.
 
         :param node: DUT node.
         :param process: process name.
+        :param retries: How many times to retry on failure.
         :type node: dict
         :type process: str
+        :type retries: int
         :returns: PID
         :rtype: int
         :raises RuntimeError: If it is not possible to get the PID.
         """
-        ssh = SSH()
-        ssh.connect(node)
-
-        retval = None
-        for i in range(3):
-            logger.trace(f"Try {i}: Get {process} PID")
-            ret_code, stdout, stderr = ssh.exec_command(f"pidof {process}")
-
-            if int(ret_code):
-                raise RuntimeError(
-                    f"Not possible to get PID of {process} process on node: "
-                    f"{node[u'host']}\n {stdout + stderr}"
-                )
-
-            pid_list = stdout.split()
-            if len(pid_list) == 1:
-                return [int(stdout)]
-            if not pid_list:
-                logger.debug(f"No {process} PID found on node {node[u'host']}")
-                continue
-            logger.debug(f"More than one {process} PID found " \
-                         f"on node {node[u'host']}")
-            retval = [int(pid) for pid in pid_list]
-
-        return retval
+        cmd = f"pidof {process}"
+        stdout, _ = exec_cmd_no_error(
+            node, cmd, retries=retries,
+            message=f"No {process} PID found on node {node[u'host']}")
+        pid_list = stdout.split()
+        return [int(pid) for pid in pid_list]
 
     @staticmethod
     def get_vpp_pids(nodes):
index bb21ea3..b929b49 100644 (file)
@@ -13,6 +13,7 @@
 
 """ab implementation into CSIT framework."""
 
+from re import search
 from resources.libraries.python.Constants import Constants
 from resources.libraries.python.model.ExportResult import (
     export_hoststack_results
@@ -167,15 +168,16 @@ class ABTools:
         failed_requests = None
         for line in stdout.splitlines():
             if f"Connection {rps_cps} rate:" in line:
-                rate = float(line.split(" ")[3])
+                rate = float(search(r":\s*(\d+\.?\d+)", line).group(1))
             elif "Transfer Rate:" in line:
-                bandwidth = float(line.split(" ")[2]) * 8000
+                bandwidth = \
+                    float(search(r":\s*(\d+\.?\d+)", line).group(1)) * 8000
             elif "Latency:" in line:
-                latency = float(line.split(" ")[1])
+                latency = float(search(r":\s*(\d+\.?\d+)", line).group(1))
             elif "Completed requests:" in line:
-                completed_requests = int(line.split(" ")[2])
+                completed_requests = int(search(r":\s*(\d+)", line).group(1))
             elif "Failed requests" in line:
-                failed_requests = int(line.split(" ")[2])
+                failed_requests = int(search(r":\s*(\d+)", line).group(1))
 
         export_hoststack_results(
             bandwidth, rate, rate_unit, latency, failed_requests,