From 9a0d6a86aadb5dfcc9fb55af2a8efc4881540579 Mon Sep 17 00:00:00 2001 From: Yulong Pei Date: Mon, 6 Feb 2023 08:09:02 +0000 Subject: [PATCH] Fix issue in csit hoststack test 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 Signed-off-by: Xinfeng Zhao Signed-off-by: Yulong Pei Change-Id: I1cffa28d8492bcc27ae188f1e084b80afad60502 --- resources/libraries/python/DUTSetup.py | 37 +++++++++------------------------- resources/tools/ab/ABTools.py | 12 ++++++----- 2 files changed, 17 insertions(+), 32 deletions(-) diff --git a/resources/libraries/python/DUTSetup.py b/resources/libraries/python/DUTSetup.py index 6e3530277a..419a4e291f 100644 --- a/resources/libraries/python/DUTSetup.py +++ b/resources/libraries/python/DUTSetup.py @@ -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): diff --git a/resources/tools/ab/ABTools.py b/resources/tools/ab/ABTools.py index bb21ea351f..b929b49fdd 100644 --- a/resources/tools/ab/ABTools.py +++ b/resources/tools/ab/ABTools.py @@ -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, -- 2.16.6