+ raise RuntimeError('TRex config generation error')
+
+ for _ in range(0, 3):
+ # kill TRex only if it is already running
+ ssh.exec_command(
+ "sh -c 'pgrep t-rex && sudo pkill t-rex && sleep 3'")
+
+ # configure TRex
+ (ret, _, _) = ssh.exec_command(
+ "sh -c 'cd {0}/scripts/ && sudo ./trex-cfg'"\
+ .format(Constants.TREX_INSTALL_DIR))
+ if int(ret) != 0:
+ raise RuntimeError('trex-cfg failed')
+
+ # start TRex
+ if test_type == 'L2' or test_type == 'L3':
+ (ret, _, _) = ssh.exec_command(
+ "sh -c 'cd {0}/scripts/ && "
+ "sudo nohup ./t-rex-64 -i -c 7 --iom 0 > /tmp/trex.log "
+ "2>&1 &' > /dev/null"\
+ .format(Constants.TREX_INSTALL_DIR))
+ elif test_type == 'L7':
+ (ret, _, _) = ssh.exec_command(
+ "sh -c 'cd {0}/scripts/ && "
+ "sudo nohup ./t-rex-64 --astf -i -c 7 --iom 0 > "
+ "/tmp/trex.log 2>&1 &' > /dev/null"\
+ .format(Constants.TREX_INSTALL_DIR))
+ else:
+ raise ValueError("Unknown Test Type")
+ if int(ret) != 0:
+ ssh.exec_command("sh -c 'cat /tmp/trex.log'")
+ raise RuntimeError('t-rex-64 startup failed')
+
+ # get TRex server info
+ (ret, _, _) = ssh.exec_command(
+ "sh -c 'sleep 3; "
+ "{0}/resources/tools/trex/trex_server_info.py'"\
+ .format(Constants.REMOTE_FW_DIR),
+ timeout=120)
+ if int(ret) == 0:
+ # If we get info TRex is running
+ return
+ # after max retries TRex is still not responding to API
+ # critical error occurred
+ raise RuntimeError('t-rex-64 startup failed')