fix(uti): Add TG type export 88/36088/9
authorPeter Mikus <pmikus@cisco.com>
Thu, 5 May 2022 11:08:10 +0000 (13:08 +0200)
committerPeter Mikus <pmikus@cisco.com>
Tue, 24 May 2022 08:25:08 +0000 (08:25 +0000)
- This is actually bug not a feature.
- AB to be added later
- Tested on TREX and iPerf3

Signed-off-by: Peter Mikus <pmikus@cisco.com>
Change-Id: Ib6f2d13e3b9401a9fb5759e42a8a310ee11b9d41

26 files changed:
docs/model/current/schema/test_case.info.schema.json
docs/model/current/schema/test_case.info.schema.yaml
docs/model/current/schema/todos.txt
docs/model/current/top.rst
resources/libraries/python/Constants.py
resources/libraries/python/Iperf3.py
resources/libraries/python/TrafficGenerator.py
resources/libraries/python/model/ExportResult.py
resources/libraries/python/model/export_json.py
resources/libraries/robot/shared/default.robot
resources/libraries/robot/shared/suite_setup.robot
resources/tools/ab/ABTools.py
tests/vpp/perf/gso/2n1l-10ge2p1x710-ethip4-ip4base-2tap-gso-iperf3-mrr.robot
tests/vpp/perf/gso/2n1l-10ge2p1x710-ethip4-ip4base-2tap-iperf3-mrr.robot
tests/vpp/perf/gso/2n1l-10ge2p1x710-ethip4-ip4base-2vhost-gso-iperf3-mrr.robot
tests/vpp/perf/gso/2n1l-10ge2p1x710-ethip4-ip4base-2vhost-iperf3-mrr.robot
tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4tcpbase-ldpreload-iperf3-bps.robot
tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4tcpbase-nsim-ldpreload-iperf3-bps.robot
tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4tcpscale1cl10s-ldpreload-iperf3-bps.robot
tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4tcpscale1cl10s-nsim-ldpreload-iperf3-bps.robot
tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4udpbase-ldpreload-iperf3-bps.robot
tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4udpquicbase-vppecho-bps.robot
tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4udpquicscale10cl10s-vppecho-bps.robot
tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4udpquicscale10cl1s-vppecho-bps.robot
tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4udpquicscale1cl10s-vppecho-bps.robot
tests/vpp/perf/hoststack/10ge2p1x710-eth-ip4udpscale1cl10s-ldpreload-iperf3-bps.robot

index 7df6caa..d99dd47 100644 (file)
@@ -1,5 +1,5 @@
 {
 {
-  "$id": "https://fd.io/FIXME/CSIT/UTI/test_case/info/1.0.0",
+  "$id": "https://fd.io/FIXME/CSIT/UTI/test_case/info/1.0.1",
   "$schema": "https://json-schema.org/draft/2020-12/schema",
   "description": "Schema for info output of test case.",
   "allOf": [
   "$schema": "https://json-schema.org/draft/2020-12/schema",
   "description": "Schema for info output of test case.",
   "allOf": [
         },
         "dut_type": {
           "description": "DUT type used, e.g. VPP or DPDK.",
         },
         "dut_type": {
           "description": "DUT type used, e.g. VPP or DPDK.",
-          "type": "string"
+          "type": "string",
+          "minLength": 1
         },
         "dut_version": {
           "description": "Version string appropriate to DUT type used.",
         },
         "dut_version": {
           "description": "Version string appropriate to DUT type used.",
-          "type": "string"
+          "type": "string",
+          "minLength": 1
         },
         "end_time": {
           "description": "UTC date and time in RFC 3339 format, specifying calendar time just before test case ended (at the end of test case teardown).",
         },
         "end_time": {
           "description": "UTC date and time in RFC 3339 format, specifying calendar time just before test case ended (at the end of test case teardown).",
             "vsap"
           ]
         },
             "vsap"
           ]
         },
+        "tg_type": {
+          "description": "TG type used, e.g. TREX.",
+          "type": "string",
+          "minLength": 1
+        },
+        "tg_version": {
+          "description": "Version string appropriate to TG type used.",
+          "type": "string",
+          "minLength": 1
+        },
         "version": {
           "description": "CSIT model version (semver format) the exporting code adhered to.",
           "type": "string",
         "version": {
           "description": "CSIT model version (semver format) the exporting code adhered to.",
           "type": "string",
-          "const": "1.0.0"
+          "const": "1.0.1"
         }
       },
       "required": [
         }
       },
       "required": [
         "test_name_long",
         "test_name_short",
         "test_type",
         "test_name_long",
         "test_name_short",
         "test_type",
+        "tg_type",
+        "tg_version",
         "version"
       ]
     },
         "version"
       ]
     },
           }
         }
       ]
           }
         }
       ]
-    },
-    {
-      "description": "Subschema validating relation between dut_type and dut_version.",
-      "oneOf": [
-        {
-          "description": "Subschema for tests with no DUT, e.g. TRex self-test.",
-          "type": "object",
-          "properties": {
-            "dut_type": {
-              "const": "none"
-            },
-            "dut_version": {
-              "const": ""
-            }
-          }
-        },
-        {
-          "description": "Subschema for DUT type VPP.",
-          "type": "object",
-          "properties": {
-            "dut_type": {
-              "const": "VPP"
-            },
-            "dut_version": {
-              "minLength": 1
-            }
-          }
-        },
-        {
-          "description": "Subschema for DUT type DPDK.",
-          "type": "object",
-          "properties": {
-            "dut_type": {
-              "const": "DPDK"
-            },
-            "dut_version": {
-              "minLength": 1
-            }
-          }
-        }
-      ]
     }
   ],
   "$defs": {
     }
   ],
   "$defs": {
index 295c2fa..9fd105a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -13,7 +13,7 @@
 
 ---
 
 
 ---
 
-$id: https://fd.io/FIXME/CSIT/UTI/test_case/info/1.0.0
+$id: https://fd.io/FIXME/CSIT/UTI/test_case/info/1.0.1
 $schema: https://json-schema.org/draft/2020-12/schema
 description: >-
     Schema for info output of test case.
 $schema: https://json-schema.org/draft/2020-12/schema
 description: >-
     Schema for info output of test case.
@@ -32,10 +32,12 @@ allOf:
             description: >-
                 DUT type used, e.g. VPP or DPDK.
             type: string
             description: >-
                 DUT type used, e.g. VPP or DPDK.
             type: string
+            minLength: 1
         dut_version:
             description: >-
                 Version string appropriate to DUT type used.
             type: string
         dut_version:
             description: >-
                 Version string appropriate to DUT type used.
             type: string
+            minLength: 1
         end_time:
             description: >-
                 UTC date and time in RFC 3339 format, specifying calendar time
         end_time:
             description: >-
                 UTC date and time in RFC 3339 format, specifying calendar time
@@ -281,12 +283,22 @@ allOf:
             -   reconf
             -   soak
             -   vsap
             -   reconf
             -   soak
             -   vsap
+        tg_type:
+            description: >-
+                TG type used, e.g. TREX.
+            type: string
+            minLength: 1
+        tg_version:
+            description: >-
+                Version string appropriate to TG type used.
+            type: string
+            minLength: 1
         version:
             description: >-
                 CSIT model version (semver format)
                 the exporting code adhered to.
             type: string
         version:
             description: >-
                 CSIT model version (semver format)
                 the exporting code adhered to.
             type: string
-            const: 1.0.0
+            const: 1.0.1
     required:
     -   duration
     -   dut_type
     required:
     -   duration
     -   dut_type
@@ -304,6 +316,8 @@ allOf:
     -   test_name_long
     -   test_name_short
     -   test_type
     -   test_name_long
     -   test_name_short
     -   test_type
+    -   tg_type
+    -   tg_version
     -   version
 -   description: >-
         Subschema validating relation between status and message.
     -   version
 -   description: >-
         Subschema validating relation between status and message.
@@ -324,33 +338,6 @@ allOf:
                 const: false
             message:
                 minLength: 1
                 const: false
             message:
                 minLength: 1
--   description: >-
-        Subschema validating relation between dut_type and dut_version.
-    oneOf:
-    -   description: >-
-            Subschema for tests with no DUT, e.g. TRex self-test.
-        type: object
-        properties:
-            dut_type:
-                const: none
-            dut_version:
-                const: ""
-    -   description: >-
-            Subschema for DUT type VPP.
-        type: object
-        properties:
-            dut_type:
-                const: VPP
-            dut_version:
-                minLength: 1
-    -   description: >-
-            Subschema for DUT type DPDK.
-        type: object
-        properties:
-            dut_type:
-                const: DPDK
-            dut_version:
-                minLength: 1
 
 $defs:
     types:
 
 $defs:
     types:
index 8e63b21..91e8bb4 100644 (file)
@@ -1,6 +1,4 @@
 
 
-Export also tg_type and tg_version properties.
-
 Add description with link to methodology for MRR, NDRPDR and SOAK.
 
 Add multiplicity field to MRR result, so PAL can detect incomplete samples.
 Add description with link to methodology for MRR, NDRPDR and SOAK.
 
 Add multiplicity field to MRR result, so PAL can detect incomplete samples.
@@ -8,9 +6,3 @@ Add multiplicity field to MRR result, so PAL can detect incomplete samples.
 Add link explaining our L1 bandwidth calculation.
 
 Add a link to URL explaining how to decode the hdrh data.
 Add link explaining our L1 bandwidth calculation.
 
 Add a link to URL explaining how to decode the hdrh data.
-
-Do we want to require more structure for dut_version, e.g. at least two dots?
-
-Should we parse version strings?
-E.g.: Turn dut_version from "21.11.0"
-into {"major": 21, "minor": 11, "patch": 0}.
index d86e3fd..ee33a29 100644 (file)
@@ -1,5 +1,5 @@
 ..
 ..
-   Copyright (c) 2021 Cisco and/or its affiliates.
+   Copyright (c) 2022 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:
    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:
@@ -22,7 +22,7 @@ especially the export side (UTI), not import side (PAL).
 Version
 ~~~~~~~
 
 Version
 ~~~~~~~
 
-This document is valid for CSIT model version 1.0.0.
+This document is valid for CSIT model version 1.0.1.
 
 It is recommended to use semantic versioning: https://semver.org/
 That means, if the new model misses a field present in the old model,
 
 It is recommended to use semantic versioning: https://semver.org/
 That means, if the new model misses a field present in the old model,
index 2ecf50b..a7bda21 100644 (file)
@@ -120,7 +120,7 @@ class Constants:
     """Constants used in CSIT."""
 
     # Version for CSIT data model. See docs/model/.
     """Constants used in CSIT."""
 
     # Version for CSIT data model. See docs/model/.
-    MODEL_VERSION = u"1.0.0"
+    MODEL_VERSION = u"1.0.1"
 
     # Global off-switch in case JSON export is large or slow.
     EXPORT_JSON = get_optimistic_bool_from_env(u"EXPORT_JSON")
 
     # Global off-switch in case JSON export is large or slow.
     EXPORT_JSON = get_optimistic_bool_from_env(u"EXPORT_JSON")
index ed186f0..12d0633 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -33,6 +33,31 @@ class Iperf3:
         # Computed affinity for iPerf client.
         self._c_affinity = None
 
         # Computed affinity for iPerf client.
         self._c_affinity = None
 
+    @staticmethod
+    def get_iperf_type(node):
+        """Log and return the installed traffic generator type.
+
+        :param node: Node from topology file.
+        :type node: dict
+        :returns: Traffic generator type string.
+        :rtype: str
+        """
+        return "IPERF"
+
+    @staticmethod
+    def get_iperf_version(node):
+        """Log and return the installed traffic generator version.
+
+        :param node: Node from topology file.
+        :type node: dict
+        :returns: Traffic generator version string.
+        :rtype: str
+        """
+        command = f"iperf3 --version | head -1"
+        message = u"Get iPerf version failed!"
+        stdout, _ = exec_cmd_no_error(node, command, message=message)
+        return stdout.strip()
+
     def initialize_iperf_server(
             self, node, pf_key, interface, bind, bind_gw, bind_mask,
             namespace=None, cpu_skip_cnt=0, cpu_cnt=1, instances=1):
     def initialize_iperf_server(
             self, node, pf_key, interface, bind, bind_gw, bind_mask,
             namespace=None, cpu_skip_cnt=0, cpu_cnt=1, instances=1):
index 03e3890..5d9a056 100644 (file)
@@ -252,7 +252,38 @@ class TrafficGenerator(AbstractMeasurer):
             f"{self._node[u'subtype']} not running in {expected_mode} mode!"
         )
 
             f"{self._node[u'subtype']} not running in {expected_mode} mode!"
         )
 
-    # TODO: pylint says disable=too-many-locals.
+    @staticmethod
+    def get_tg_type(tg_node):
+        """Log and return the installed traffic generator type.
+
+        :param tg_node: Node from topology file.
+        :type tg_node: dict
+        :returns: Traffic generator type string.
+        :rtype: str
+        :raises RuntimeError: If command returns nonzero return code.
+        """
+        return str(check_subtype(tg_node))
+
+    @staticmethod
+    def get_tg_version(tg_node):
+        """Log and return the installed traffic generator version.
+
+        :param tg_node: Node from topology file.
+        :type tg_node: dict
+        :returns: Traffic generator version string.
+        :rtype: str
+        :raises RuntimeError: If command returns nonzero return code.
+        """
+        subtype = check_subtype(tg_node)
+        if subtype == NodeSubTypeTG.TREX:
+            command = f"cat {Constants.TREX_INSTALL_DIR}/VERSION"
+            message = u"Get T-Rex version failed!"
+            stdout, _ = exec_cmd_no_error(tg_node, command, message=message)
+            return stdout.strip()
+        else:
+            return "none"
+
+    # TODO: pylint disable=too-many-locals.
     def initialize_traffic_generator(
             self, tg_node, tg_if1, tg_if2, tg_if1_adj_node, tg_if1_adj_if,
             tg_if2_adj_node, tg_if2_adj_if, osi_layer, tg_if1_dst_mac=None,
     def initialize_traffic_generator(
             self, tg_node, tg_if1, tg_if2, tg_if1_adj_node, tg_if1_adj_if,
             tg_if2_adj_node, tg_if2_adj_if, osi_layer, tg_if1_dst_mac=None,
index d74a6ab..16c6b89 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -39,18 +39,13 @@ def export_dut_type_and_version(dut_type=u"unknown", dut_version=u"unknown"):
     else:
         # We want to set a variable in higher level suite setup
         # to be available to test setup several levels lower.
     else:
         # We want to set a variable in higher level suite setup
         # to be available to test setup several levels lower.
-        # Documentation [0] looks like "children" is a keyword argument,
-        # but code [1] lines 1458 and 1511-1512 show
-        # it is just last stringy argument.
-        # [0] http://robotframework.org/robotframework/
-        #     3.1.2/libraries/BuiltIn.html#Set%20Suite%20Variable
-        # [1] https://github.com/robotframework/robotframework/blob/
-        #     v3.1.2/src/robot/libraries/BuiltIn.py
         BuiltIn().set_suite_variable(
             u"\\${DUT_TYPE}", dut_type, u"children=True"
         )
     if dut_version == u"unknown":
         BuiltIn().set_suite_variable(
             u"\\${DUT_TYPE}", dut_type, u"children=True"
         )
     if dut_version == u"unknown":
-        dut_version = BuiltIn().get_variable_value(u"\\${DUT_VERSION}", u"unknown")
+        dut_version = BuiltIn().get_variable_value(
+            u"\\${DUT_VERSION}", u"unknown"
+        )
         if dut_type == u"unknown":
             raise RuntimeError(u"Dut version not provided.")
     else:
         if dut_type == u"unknown":
             raise RuntimeError(u"Dut version not provided.")
     else:
@@ -58,10 +53,49 @@ def export_dut_type_and_version(dut_type=u"unknown", dut_version=u"unknown"):
             u"\\${DUT_VERSION}", dut_version, u"children=True"
         )
     data = get_export_data()
             u"\\${DUT_VERSION}", dut_version, u"children=True"
         )
     data = get_export_data()
-    data[u"dut_type"] = dut_type
+    data[u"dut_type"] = dut_type.lower()
     data[u"dut_version"] = dut_version
 
 
     data[u"dut_version"] = dut_version
 
 
+def export_tg_type_and_version(tg_type=u"unknown", tg_version=u"unknown"):
+    """Export the arguments as tg type and version.
+
+    Robot tends to convert "none" into None, hence the unusual default values.
+
+    If either argument is missing, the value from robot variable is used.
+    If argument is present, the value is also stored to robot suite variable.
+
+    :param tg_type: TG type, e.g. TREX.
+    :param tg_version: TG version as determined by the caller.
+    :type tg_type: Optional[str]
+    :type tg_version: Optiona[str]
+    :raises RuntimeError: If value is neither in argument not robot variable.
+    """
+    if tg_type == u"unknown":
+        tg_type = BuiltIn().get_variable_value(u"\\${TG_TYPE}", u"unknown")
+        if tg_type == u"unknown":
+            raise RuntimeError(u"TG type not provided.")
+    else:
+        # We want to set a variable in higher level suite setup
+        # to be available to test setup several levels lower.
+        BuiltIn().set_suite_variable(
+            u"\\${TG_TYPE}", tg_type, u"children=True"
+        )
+    if tg_version == u"unknown":
+        tg_version = BuiltIn().get_variable_value(
+            u"\\${TG_VERSION}", u"unknown"
+        )
+        if tg_type == u"unknown":
+            raise RuntimeError(u"TG version not provided.")
+    else:
+        BuiltIn().set_suite_variable(
+            u"\\${TG_VERSION}", tg_version, u"children=True"
+        )
+    data = get_export_data()
+    data[u"tg_type"] = tg_type.lower()
+    data[u"tg_version"] = tg_version
+
+
 def append_mrr_value(mrr_value, unit):
     """Store mrr value to proper place so it is dumped into json.
 
 def append_mrr_value(mrr_value, unit):
     """Store mrr value to proper place so it is dumped into json.
 
index b5d4328..840c49f 100644 (file)
@@ -34,7 +34,7 @@ from robot.libraries.BuiltIn import BuiltIn
 
 from resources.libraries.python.Constants import Constants
 from resources.libraries.python.model.ExportResult import (
 
 from resources.libraries.python.Constants import Constants
 from resources.libraries.python.model.ExportResult import (
-    export_dut_type_and_version
+    export_dut_type_and_version, export_tg_type_and_version
 )
 from resources.libraries.python.model.mem2raw import write_raw_output
 from resources.libraries.python.model.raw2info import convert_content_to_info
 )
 from resources.libraries.python.model.mem2raw import write_raw_output
 from resources.libraries.python.model.raw2info import convert_content_to_info
@@ -167,6 +167,7 @@ class export_json():
         self.raw_data[u"hosts"] = set()
         self.raw_data[u"log"] = list()
         export_dut_type_and_version()
         self.raw_data[u"hosts"] = set()
         self.raw_data[u"log"] = list()
         export_dut_type_and_version()
+        export_tg_type_and_version()
 
     def start_suite_teardown_export(self):
         """Set new file path, initialize data for the suite teardown.
 
     def start_suite_teardown_export(self):
         """Set new file path, initialize data for the suite teardown.
index 4f045da..b7eadbe 100644 (file)
 | | Run Keyword If | ${with_trace} | VPP Enable Traces On Dut
 | | ... | ${nodes['${dut}']}
 
 | | Run Keyword If | ${with_trace} | VPP Enable Traces On Dut
 | | ... | ${nodes['${dut}']}
 
-| Get And Export DPDK Version
-| | [Documentation] | Add version to test export as detected on DUT1.
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Get And Export DPDK Version \|
-| |
-| | ${version} = | Get Dpdk Version | ${nodes}[DUT1]
-| | Export Dut Type And Version | DPDK | ${version}
-
 | Save VPP PIDs
 | | [Documentation] | Get PIDs of VPP processes from all DUTs in topology and\
 | | ... | set it as a test variable. The PIDs are stored as dictionary items\
 | Save VPP PIDs
 | | [Documentation] | Get PIDs of VPP processes from all DUTs in topology and\
 | | ... | set it as a test variable. The PIDs are stored as dictionary items\
index 232158a..e227224 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -18,6 +18,7 @@
 | Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.NGINX.NGINXTools
 | Library | resources.tools.ab.ABTools
 | Library | resources.libraries.python.InterfaceUtil
 | Library | resources.libraries.python.NGINX.NGINXTools
 | Library | resources.tools.ab.ABTools
+| Library | resources.libraries.python.Iperf3
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.topology.Topology
 | Library | resources.libraries.python.TrafficGenerator
 | Library | resources.libraries.python.NodePath
 | Library | resources.libraries.python.topology.Topology
 | Library | resources.libraries.python.TrafficGenerator
 | | [Documentation]
 | | ... | Additional Setup for suites which uses scapy as Traffic generator.
 | |
 | | [Documentation]
 | | ... | Additional Setup for suites which uses scapy as Traffic generator.
 | |
+| | Export TG Type And Version | scapy | 2.4.3
 | | FOR | ${dut} | IN | @{duts}
 | | | Set Suite Variable | ${${dut}_vf1} | ${${dut}_${int}1}
 | | | Set Suite Variable | ${${dut}_vf2} | ${${dut}_${int}2}
 | | FOR | ${dut} | IN | @{duts}
 | | | Set Suite Variable | ${${dut}_vf1} | ${${dut}_${int}1}
 | | | Set Suite Variable | ${${dut}_vf2} | ${${dut}_${int}2}
 | | [Documentation]
 | | ... | Additional Setup for suites which uses dpdk.
 | |
 | | [Documentation]
 | | ... | Additional Setup for suites which uses dpdk.
 | |
+| | ${version} = | Get Dpdk Version | ${nodes}[DUT1]
+| | Export Dut Type And Version | dpdk | ${version}
 | | FOR | ${dut} | IN | @{duts}
 | | | Initialize DPDK Framework | ${nodes['${dut}']}
 | | | ... | ${${dut}_${int}1}[0] | ${${dut}_${int}2}[0] | ${nic_driver}
 | | END
 | | FOR | ${dut} | IN | @{duts}
 | | | Initialize DPDK Framework | ${nodes['${dut}']}
 | | | ... | ${${dut}_${int}1}[0] | ${${dut}_${int}2}[0] | ${nic_driver}
 | | END
-| | Get And Export DPDK Version
 
 | Additional Suite Setup Action For performance vf
 | | [Documentation]
 
 | Additional Suite Setup Action For performance vf
 | | [Documentation]
 | | | ... | ELSE
 | | | ... | Additional Suite Setup Action For performance pf | ${dut}
 | | END
 | | | ... | ELSE
 | | | ... | Additional Suite Setup Action For performance pf | ${dut}
 | | END
+| | ${type} = | Get TG Type | ${nodes}[TG]
+| | ${version} = | Get TG Version | ${nodes}[TG]
+| | Export TG Type And Version | ${type} | ${version}
 | | Initialize traffic generator
 | | ... | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0]
 | | ... | ${dut1} | ${DUT1_${int}1}[0]
 | | Initialize traffic generator
 | | ... | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0]
 | | ... | ${dut1} | ${DUT1_${int}1}[0]
 | | ... | Additional Setup for suites which uses performance measurement
 | | ... | for L1 cross connect tests
 | |
 | | ... | Additional Setup for suites which uses performance measurement
 | | ... | for L1 cross connect tests
 | |
-| | # TRex suites have only TG (and a loopback cable), no SUT nor DUT.
-| | Export Dut Type And Version | none | ${EMPTY}
+| | ${type} = | Get TG Type | ${nodes}[TG]
+| | ${version} = | Get TG Version | ${nodes}[TG]
+| | Export Dut Type And Version | ${type} | ${version}
+| | Export TG Type And Version | ${type} | ${version}
 | | Initialize traffic generator
 | | ... | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0]
 | | ... | ${tg} | ${TG_pf2}[0]
 | | ... | ${tg} | ${TG_pf1}[0]
 | | ... | ${osi_layer}
 
 | | Initialize traffic generator
 | | ... | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0]
 | | ... | ${tg} | ${TG_pf2}[0]
 | | ... | ${tg} | ${TG_pf1}[0]
 | | ... | ${osi_layer}
 
+| Additional Suite Setup Action For iPerf3
+| | [Documentation]
+| | ... | Additional Setup for suites which uses performance measurement over
+| | ... | iPerf3.
+| |
+| | ${type} = | Get iPerf Type | ${nodes}[TG]
+| | ${version} = | Get iPerf Version | ${nodes}[TG]
+| | Export DUT Type And Version | ${type} | ${version}
+
 | Additional Suite Setup Action For ipsechw
 | | [Documentation]
 | | ... | Additional Setup for suites which uses QAT HW.
 | Additional Suite Setup Action For ipsechw
 | | [Documentation]
 | | ... | Additional Setup for suites which uses QAT HW.
 | | Install NGINX framework on all DUTs | ${nodes} | ${packages_dir}
 | | ... |  ${nginx_version}
 
 | | Install NGINX framework on all DUTs | ${nodes} | ${packages_dir}
 | | ... |  ${nginx_version}
 
+| Additional Suite Setup Action For vppecho
+| | [Documentation]
+| | ... | Additional Setup for suites which uses performance measurement over
+| | ... | VPP Echo.
+| |
+| | Export DUT Type And Version | ${DUT_TYPE} | ${DUT_VERSION}
+
 | Additional Suite Setup Action For ab
 | | [Documentation]
 | | ... | Additional Setup for suites which uses ab TG.
 | |
 | Additional Suite Setup Action For ab
 | | [Documentation]
 | | ... | Additional Setup for suites which uses ab TG.
 | |
-| | Verify Program Installed | ${tg} | ab
 | | Iface update numa node | ${tg}
 | | ${running}= | Is TRex running | ${tg}
 | | Run keyword if | ${running}==${True} | Teardown traffic generator | ${tg}
 | | Iface update numa node | ${tg}
 | | ${running}= | Is TRex running | ${tg}
 | | Run keyword if | ${running}==${True} | Teardown traffic generator | ${tg}
 | | | Run Keyword If | ${ip_addr_on_intf}==${False} | Set Linux interface IP
 | | | ... | ${tg} | ${intf_name} | ${ip_addr} | ${ab_ip_prefix}
 | | END
 | | | Run Keyword If | ${ip_addr_on_intf}==${False} | Set Linux interface IP
 | | | ... | ${tg} | ${intf_name} | ${ip_addr} | ${ab_ip_prefix}
 | | END
-| | Set Linux interface up | ${tg} | ${intf_name}
-| | Check ab | ${tg}
+| | Set Linux interface up | ${nodes}[TG] | ${intf_name}
+| | Check AB | ${tg}
+| | ${type} = | Get AB Type | ${nodes}[TG]
+| | ${version} = | Get AB Version | ${nodes}[TG]
+| | Export TG Type And Version | ${type} | ${version}
index cbd1adf..54aff19 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2022 Intel 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:
 # 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:
@@ -78,6 +78,31 @@ class ABTools:
         message = u"ab not installed on TG node!"
         exec_cmd_no_error(tg_node, cmd, message=message)
 
         message = u"ab not installed on TG node!"
         exec_cmd_no_error(tg_node, cmd, message=message)
 
+    @staticmethod
+    def get_ab_type(node):
+        """Log and return the installed traffic generator type.
+
+        :param node: Node from topology file.
+        :type node: dict
+        :returns: Traffic generator type string.
+        :rtype: str
+        """
+        return "AB"
+
+    @staticmethod
+    def get_ab_version(node):
+        """Log and return the installed traffic generator version.
+
+        :param node: Node from topology file.
+        :type node: dict
+        :returns: Traffic generator version string.
+        :rtype: str
+        """
+        command = f"ab -V | head -1 | cut -d',' -f2"
+        message = u"Get AB version failed!"
+        stdout, _ = exec_cmd_no_error(node, command, message=message)
+        return stdout.strip()
+
     @staticmethod
     def run_ab(tg_node, ip_addr, tg_addr, tls_tcp, cipher, files_num, rps_cps,
                r_total, c_total, port, protocol=u"TLS1.3"):
     @staticmethod
     def run_ab(tg_node, ip_addr, tg_addr, tls_tcp, cipher, files_num, rps_cps,
                r_total, c_total, port, protocol=u"TLS1.3"):
index 5b4aa39..4abc489 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -19,7 +19,7 @@
 | ... | RXQ_SIZE_4096 | TXQ_SIZE_4096 | GSO_TRUE
 | ... | ethip4-ip4base-2tap-gso-iperf3
 |
 | ... | RXQ_SIZE_4096 | TXQ_SIZE_4096 | GSO_TRUE
 | ... | ethip4-ip4base-2tap-gso-iperf3
 |
-| Suite Setup | Setup suite topology interfaces
+| Suite Setup | Setup suite topology interfaces | iPerf3
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test | iPerf3 | namespace
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test | iPerf3 | namespace
index dddf50b..6d64c05 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -19,7 +19,7 @@
 | ... | RXQ_SIZE_4096 | TXQ_SIZE_4096 | GSO_FALSE
 | ... | ethip4-ip4base-2tap-iperf3
 |
 | ... | RXQ_SIZE_4096 | TXQ_SIZE_4096 | GSO_FALSE
 | ... | ethip4-ip4base-2tap-iperf3
 |
-| Suite Setup | Setup suite topology interfaces
+| Suite Setup | Setup suite topology interfaces | iPerf3
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test | iPerf3 | namespace
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test | iPerf3 | namespace
index a2ece2f..8582692 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -19,7 +19,7 @@
 | ... | RXQ_SIZE_4096 | TXQ_SIZE_4096 | GSO_TRUE
 | ... | ethip4-ip4base-2vhost-gso-iperf3
 |
 | ... | RXQ_SIZE_4096 | TXQ_SIZE_4096 | GSO_TRUE
 | ... | ethip4-ip4base-2vhost-gso-iperf3
 |
-| Suite Setup | Setup suite topology interfaces
+| Suite Setup | Setup suite topology interfaces | iPerf3
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test | iPerf3 | vhost
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test | iPerf3 | vhost
index def7e9c..9f925fb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -19,7 +19,7 @@
 | ... | RXQ_SIZE_1024 | TXQ_SIZE_1024 | GSO_TRUE
 | ... | ethip4-ip4base-2vhost-iperf3
 |
 | ... | RXQ_SIZE_1024 | TXQ_SIZE_1024 | GSO_TRUE
 | ... | ethip4-ip4base-2vhost-iperf3
 |
-| Suite Setup | Setup suite topology interfaces
+| Suite Setup | Setup suite topology interfaces | iPerf3
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test | iPerf3 | vhost
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test | iPerf3 | vhost
index 49b4671..72952b0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -22,7 +22,7 @@
 | ... | LDPRELOAD | IPERF3 | 1CLIENT | 1STREAM | 1460B
 | ... | eth-ip4tcpbase-ldpreload-iperf3
 |
 | ... | LDPRELOAD | IPERF3 | 1CLIENT | 1STREAM | 1460B
 | ... | eth-ip4tcpbase-ldpreload-iperf3
 |
-| Suite Setup | Setup suite topology interfaces with no TG
+| Suite Setup | Setup suite topology interfaces with no TG | iPerf3
 | Suite Teardown | Tear down suite | hoststack
 | Test Setup | Setup test
 | Test Teardown | Tear down test
 | Suite Teardown | Tear down suite | hoststack
 | Test Setup | Setup test
 | Test Teardown | Tear down test
index 48bf68c..bca2bcf 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -22,7 +22,7 @@
 | ... | NSIM | LDPRELOAD | IPERF3 | 1CLIENT | 1STREAM | 1460B
 | ... | eth-ip4tcpbase-nsim-ldpreload-iperf3
 |
 | ... | NSIM | LDPRELOAD | IPERF3 | 1CLIENT | 1STREAM | 1460B
 | ... | eth-ip4tcpbase-nsim-ldpreload-iperf3
 |
-| Suite Setup | Setup suite topology interfaces with no TG
+| Suite Setup | Setup suite topology interfaces with no TG | iPerf3
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
index 2e7f39d..79c6db2 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -22,7 +22,7 @@
 | ... | LDPRELOAD | IPERF3 | 1CLIENT | 10STREAM | 1460B
 | ... | eth-ip4tcpscale1cl10s-ldpreload-iperf3
 |
 | ... | LDPRELOAD | IPERF3 | 1CLIENT | 10STREAM | 1460B
 | ... | eth-ip4tcpscale1cl10s-ldpreload-iperf3
 |
-| Suite Setup | Setup suite topology interfaces with no TG
+| Suite Setup | Setup suite topology interfaces with no TG | iPerf3
 | Suite Teardown | Tear down suite | hoststack
 | Test Setup | Setup test
 | Test Teardown | Tear down test
 | Suite Teardown | Tear down suite | hoststack
 | Test Setup | Setup test
 | Test Teardown | Tear down test
index 7c272a1..b216236 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -22,7 +22,7 @@
 | ... | NSIM | LDPRELOAD | IPERF3 | 1CLIENT | 10STREAM | 1460B
 | ... | eth-ip4tcpscale1cl10s-nsim-ldpreload-iperf3
 |
 | ... | NSIM | LDPRELOAD | IPERF3 | 1CLIENT | 10STREAM | 1460B
 | ... | eth-ip4tcpscale1cl10s-nsim-ldpreload-iperf3
 |
-| Suite Setup | Setup suite topology interfaces with no TG
+| Suite Setup | Setup suite topology interfaces with no TG | iPerf3
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
index a4aa2a0..0717e39 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -22,7 +22,7 @@
 | ... | LDPRELOAD | IPERF3 | 1CLIENT | 1STREAM | 1460B
 | ... | eth-ip4udpbase-ldpreload-iperf3
 |
 | ... | LDPRELOAD | IPERF3 | 1CLIENT | 1STREAM | 1460B
 | ... | eth-ip4udpbase-ldpreload-iperf3
 |
-| Suite Setup | Setup suite topology interfaces with no TG
+| Suite Setup | Setup suite topology interfaces with no TG | iPerf3
 | Suite Teardown | Tear down suite | hoststack
 | Test Setup | Setup test
 | Test Teardown | Tear down test
 | Suite Teardown | Tear down suite | hoststack
 | Test Setup | Setup test
 | Test Teardown | Tear down test
index 199e652..6077a7a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -21,7 +21,7 @@
 | ... | RXQ_SIZE_0 | TXQ_SIZE_0 | UDP | QUIC | VPPECHO
 | ... | 1CLIENT | 1STREAM | HOSTSTACK | 1280B | eth-ip4udpquicbase-vppecho
 |
 | ... | RXQ_SIZE_0 | TXQ_SIZE_0 | UDP | QUIC | VPPECHO
 | ... | 1CLIENT | 1STREAM | HOSTSTACK | 1280B | eth-ip4udpquicbase-vppecho
 |
-| Suite Setup | Setup suite topology interfaces with no TG
+| Suite Setup | Setup suite topology interfaces with no TG | vppecho
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
index 9bb0975..a853579 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -22,7 +22,7 @@
 | ... | HOSTSTACK | 10CLIENT | 10STREAM | 1280B
 | ... | eth-ip4udpquicscale10cl10s-vppecho
 |
 | ... | HOSTSTACK | 10CLIENT | 10STREAM | 1280B
 | ... | eth-ip4udpquicscale10cl10s-vppecho
 |
-| Suite Setup | Setup suite topology interfaces with no TG
+| Suite Setup | Setup suite topology interfaces with no TG | vppecho
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
index cc34797..c1deff3 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -22,7 +22,7 @@
 | ... | HOSTSTACK | 10CLIENT | 1STREAM | 1280B
 | ... | eth-ip4udpquicscale10cl1s-vppecho
 |
 | ... | HOSTSTACK | 10CLIENT | 1STREAM | 1280B
 | ... | eth-ip4udpquicscale10cl1s-vppecho
 |
-| Suite Setup | Setup suite topology interfaces with no TG
+| Suite Setup | Setup suite topology interfaces with no TG | vppecho
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
index 52f399c..28549bb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -22,7 +22,7 @@
 | ... | HOSTSTACK | 1CLIENT | 10STREAM | 1280B
 | ... | eth-ip4udpquicscale1cl10s-vppecho
 |
 | ... | HOSTSTACK | 1CLIENT | 10STREAM | 1280B
 | ... | eth-ip4udpquicscale1cl10s-vppecho
 |
-| Suite Setup | Setup suite topology interfaces with no TG
+| Suite Setup | Setup suite topology interfaces with no TG | vppecho
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
 | Suite Teardown | Tear down suite
 | Test Setup | Setup test
 | Test Teardown | Tear down test
index d452f88..42fd601 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # 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:
@@ -22,7 +22,7 @@
 | ... | LDPRELOAD | IPERF3 | 1CLIENT | 10STREAM | 1460B
 | ... | eth-ip4udpscale1cl10s-ldpreload-iperf3
 |
 | ... | LDPRELOAD | IPERF3 | 1CLIENT | 10STREAM | 1460B
 | ... | eth-ip4udpscale1cl10s-ldpreload-iperf3
 |
-| Suite Setup | Setup suite topology interfaces with no TG
+| Suite Setup | Setup suite topology interfaces with no TG | iPerf3
 | Suite Teardown | Tear down suite | hoststack
 | Test Setup | Setup test
 | Test Teardown | Tear down test
 | Suite Teardown | Tear down suite | hoststack
 | Test Setup | Setup test
 | Test Teardown | Tear down test