perf: QUIC transport hoststack test suite
[csit.git] / resources / libraries / python / HoststackUtil.py
index ad95d51..dde5cf6 100644 (file)
@@ -44,6 +44,8 @@ class HoststackUtil():
             f"socket-name {vpp_echo_attributes[u'vpp_api_socket']} " \
             f"{vpp_echo_attributes[u'json_output']} " \
             f"uri {proto}://{addr}/{port} " \
+            f"nthreads {vpp_echo_attributes[u'nthreads']} " \
+            f"mq-size {vpp_echo_attributes[u'mq_size']} " \
             f"nclients {vpp_echo_attributes[u'nclients']} " \
             f"quic-streams {vpp_echo_attributes[u'quic_streams']} " \
             f"time {vpp_echo_attributes[u'time']} " \
@@ -94,9 +96,9 @@ class HoststackUtil():
             if u"parallel" in iperf3_attributes:
                 iperf3_cmd[u"args"] += \
                     f" --parallel {iperf3_attributes[u'parallel']}"
-            if u"bytes" in iperf3_attributes:
+            if u"time" in iperf3_attributes:
                 iperf3_cmd[u"args"] += \
-                    f" --bytes {iperf3_attributes[u'bytes']}"
+                    f" --time {iperf3_attributes[u'time']}"
         return iperf3_cmd
 
     @staticmethod
@@ -121,7 +123,7 @@ class HoststackUtil():
         :type node: dict
         :type quic_crypto_engine: str
         """
-        vpp_crypto_engines = {u"openssl", u"ia32", u"ipsecmb"}
+        vpp_crypto_engines = {u"openssl", u"native", u"ipsecmb"}
         if quic_crypto_engine == u"nocrypto":
             logger.trace(u"No QUIC crypto engine.")
             return
@@ -162,20 +164,22 @@ class HoststackUtil():
         return stdout_log, stderr_log
 
     @staticmethod
-    def start_hoststack_test_program(node, namespace, program):
+    def start_hoststack_test_program(node, namespace, core_list, program):
         """Start the specified HostStack test program.
 
         :param node: DUT node.
         :param namespace: Net Namespace to run program in.
+        :param core_list: List of cpu's to pass to taskset to pin the test
+            program to a different set of cores on the same numa node as VPP.
         :param program: Test program.
         :type node: dict
         :type namespace: str
+        :type core_list: str
         :type program: dict
         :returns: Process ID
         :rtype: int
         :raises RuntimeError: If node subtype is not a DUT or startup failed.
         """
-        # TODO: Pin test program to core(s) on same numa node as VPP.
         if node[u"type"] != u"DUT":
             raise RuntimeError(u"Node type is not a DUT!")
 
@@ -189,8 +193,8 @@ class HoststackUtil():
 
         env_vars = f"{program[u'env_vars']} " if u"env_vars" in program else u""
         args = program[u"args"]
-        cmd = f"nohup {shell_cmd} \'{env_vars}{program_name} {args} " \
-            f">/tmp/{program_name}_stdout.log " \
+        cmd = f"nohup {shell_cmd} \'{env_vars}taskset --cpu-list {core_list} " \
+            f"{program_name} {args} >/tmp/{program_name}_stdout.log " \
             f"2>/tmp/{program_name}_stderr.log &\'"
         try:
             exec_cmd_no_error(node, cmd, sudo=True)
@@ -297,10 +301,20 @@ class HoststackUtil():
             raise RuntimeError(test_results)
         if program_stdout:
             bad_test_results = False
-            if program == u"vpp_echo" and u"JSON stats" not in program_stdout:
-                test_results += u"Invalid test data output!\n"
-                bad_test_results = True
-            test_results += program_stdout
+            if program[u"name"] == u"vpp_echo":
+                if u"JSON stats" in program_stdout:
+                    test_results += program_stdout
+                    # TODO: Decode vpp_echo output when JSON format is correct.
+                    # json_start = program_stdout.find(u"{")
+                    # vpp_echo_results = json.loads(program_stdout[json_start:])
+                    if u'"has_failed": "0"' not in program_stdout:
+                        bad_test_results = True
+                else:
+                    test_results += u"Invalid test data output!\n" + \
+                                    program_stdout
+                    bad_test_results = True
+            else:
+                test_results += program_stdout
             if bad_test_results:
                 raise RuntimeError(test_results)
         else: