aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries
diff options
context:
space:
mode:
authorJan Gelety <jgelety@cisco.com>2020-02-25 08:59:57 +0100
committerJan Gelety <jgelety@cisco.com>2020-02-25 13:20:08 +0100
commit83c8779f804bda17687f885241748c9c5b15cf1f (patch)
treed89d21d12ba4e4400a17a71867daf290e8e47e95 /resources/libraries
parente8c9d88f1a6ca829919cb50f79ec82c1442e915e (diff)
FIX: check if t-rex is running at test setup of all perf tests
Change-Id: I9af632035a1415666b2470c62a41d1b6acbf33c8 Signed-off-by: Jan Gelety <jgelety@cisco.com>
Diffstat (limited to 'resources/libraries')
-rw-r--r--resources/libraries/python/TrafficGenerator.py118
-rw-r--r--resources/libraries/robot/shared/test_setup.robot9
2 files changed, 72 insertions, 55 deletions
diff --git a/resources/libraries/python/TrafficGenerator.py b/resources/libraries/python/TrafficGenerator.py
index 4294a8fdaa..a0792f8ba7 100644
--- a/resources/libraries/python/TrafficGenerator.py
+++ b/resources/libraries/python/TrafficGenerator.py
@@ -335,71 +335,81 @@ class TrafficGenerator(AbstractMeasurer):
else:
raise ValueError(u"Unknown Test Type!")
- self._startup_trex(osi_layer)
+ TrafficGenerator.startup_trex(
+ self._node, osi_layer, subtype=subtype
+ )
- def _startup_trex(self, osi_layer):
+ @staticmethod
+ def startup_trex(tg_node, osi_layer, subtype=None):
"""Startup sequence for the TRex traffic generator.
+ :param tg_node: Traffic generator node.
:param osi_layer: 'L2', 'L3' or 'L7' - OSI Layer testing type.
+ :param subtype: Traffic generator sub-type.
+ :type tg_node: dict
:type osi_layer: str
+ :type subtype: NodeSubTypeTG
:raises RuntimeError: If node subtype is not a TREX or startup failed.
"""
- # No need to check subtype, we know it is TREX.
- for _ in range(0, 3):
- # Kill TRex only if it is already running.
- cmd = u"sh -c \"pgrep t-rex && pkill t-rex && sleep 3 || true\""
- exec_cmd_no_error(
- self._node, cmd, sudo=True, message=u"Kill TRex failed!"
- )
-
- # Configure TRex.
- ports = ''
- for port in self._node[u"interfaces"].values():
- ports += f" {port.get(u'pci_address')}"
-
- cmd = f"sh -c \"cd {Constants.TREX_INSTALL_DIR}/scripts/ && " \
- f"./dpdk_nic_bind.py -u {ports} || true\""
- exec_cmd_no_error(
- self._node, cmd, sudo=True,
- message=u"Unbind PCI ports from driver failed!"
- )
-
- # Start TRex.
- cd_cmd = f"cd '{Constants.TREX_INSTALL_DIR}/scripts/'"
- trex_cmd = OptionString([u"nohup", u"./t-rex-64"])
- trex_cmd.add(u"-i")
- trex_cmd.add(u"--prefix $(hostname)")
- trex_cmd.add(u"--hdrh")
- trex_cmd.add(u"--no-scapy-server")
- trex_cmd.add_if(u"--astf", osi_layer == u"L7")
- # OptionString does not create double space if extra is empty.
- trex_cmd.add(f"{Constants.TREX_EXTRA_CMDLINE}")
- inner_command = f"{cd_cmd} && {trex_cmd} > /tmp/trex.log 2>&1 &"
- cmd = f"sh -c \"{inner_command}\" > /dev/null"
- try:
- exec_cmd_no_error(self._node, cmd, sudo=True)
- except RuntimeError:
- cmd = u"sh -c \"cat /tmp/trex.log\""
+ if not subtype:
+ subtype = check_subtype(tg_node)
+ if subtype == NodeSubTypeTG.TREX:
+ for _ in range(0, 3):
+ # Kill TRex only if it is already running.
+ cmd = u"sh -c \"pgrep t-rex && pkill t-rex && sleep 3 || true\""
exec_cmd_no_error(
- self._node, cmd, sudo=True, message=u"Get TRex logs failed!"
+ tg_node, cmd, sudo=True, message=u"Kill TRex failed!"
)
- raise RuntimeError(u"Start TRex failed!")
- # Test if TRex starts successfuly.
- cmd = f"sh -c \"{Constants.REMOTE_FW_DIR}/resources/tools/trex/" \
- f"trex_server_info.py\""
- try:
+ # Configure TRex.
+ ports = ''
+ for port in tg_node[u"interfaces"].values():
+ ports += f" {port.get(u'pci_address')}"
+
+ cmd = f"sh -c \"cd {Constants.TREX_INSTALL_DIR}/scripts/ && " \
+ f"./dpdk_nic_bind.py -u {ports} || true\""
exec_cmd_no_error(
- self._node, cmd, sudo=True, message=u"Test TRex failed!",
- retries=20
+ tg_node, cmd, sudo=True,
+ message=u"Unbind PCI ports from driver failed!"
)
- except RuntimeError:
- continue
- return
- # After max retries TRex is still not responding to API critical error
- # occurred.
- exec_cmd(self._node, u"cat /tmp/trex.log", sudo=True)
- raise RuntimeError(u"Start TRex failed after multiple retries!")
+
+ # Start TRex.
+ cd_cmd = f"cd '{Constants.TREX_INSTALL_DIR}/scripts/'"
+ trex_cmd = OptionString([u"nohup", u"./t-rex-64"])
+ trex_cmd.add(u"-i")
+ trex_cmd.add(u"--prefix $(hostname)")
+ trex_cmd.add(u"--hdrh")
+ trex_cmd.add(u"--no-scapy-server")
+ trex_cmd.add_if(u"--astf", osi_layer == u"L7")
+ # OptionString does not create double space if extra is empty.
+ trex_cmd.add(f"{Constants.TREX_EXTRA_CMDLINE}")
+ inner_command = f"{cd_cmd} && {trex_cmd} > /tmp/trex.log 2>&1 &"
+ cmd = f"sh -c \"{inner_command}\" > /dev/null"
+ try:
+ exec_cmd_no_error(tg_node, cmd, sudo=True)
+ except RuntimeError:
+ cmd = u"sh -c \"cat /tmp/trex.log\""
+ exec_cmd_no_error(
+ tg_node, cmd, sudo=True,
+ message=u"Get TRex logs failed!"
+ )
+ raise RuntimeError(u"Start TRex failed!")
+
+ # Test if TRex starts successfully.
+ cmd = f"sh -c \"{Constants.REMOTE_FW_DIR}/resources/tools/" \
+ f"trex/trex_server_info.py\""
+ try:
+ exec_cmd_no_error(
+ tg_node, cmd, sudo=True,
+ message=u"Test TRex failed!", retries=20
+ )
+ except RuntimeError:
+ continue
+ return
+ # After max retries TRex is still not responding to API critical
+ # error occurred.
+ exec_cmd(tg_node, u"cat /tmp/trex.log", sudo=True)
+ raise RuntimeError(u"Start TRex failed after multiple retries!")
@staticmethod
def is_trex_running(node):
@@ -411,7 +421,7 @@ class TrafficGenerator(AbstractMeasurer):
:rtype: bool
:raises RuntimeError: If node type is not a TG.
"""
- ret, _, _ = exec_cmd(node, u"pidof t-rex", sudo=True)
+ ret, _, _ = exec_cmd(node, u"pgrep t-rex", sudo=True)
return bool(int(ret) == 0)
@staticmethod
diff --git a/resources/libraries/robot/shared/test_setup.robot b/resources/libraries/robot/shared/test_setup.robot
index 941b90490a..5ebe048cd9 100644
--- a/resources/libraries/robot/shared/test_setup.robot
+++ b/resources/libraries/robot/shared/test_setup.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2019 Cisco and/or its affiliates.
+# Copyright (c) 2020 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:
@@ -41,3 +41,10 @@
| | FOR | ${dut} | IN | @{duts}
| | | Clean Up Namespaces | ${nodes['${dut}']}
| | END
+
+| Additional Test Setup Action For performance
+| | [Documentation]
+| | ... | Additional Setup for tests which uses namespace.
+| |
+| | ${trex_running}= | Is Trex Running | ${tg}
+| | Run Keyword Unless | ${trex_running} | Startup Trex | ${tg} | ${osi_layer}