diff options
Diffstat (limited to 'scripts/stl_test_api/__init__.py')
-rw-r--r-- | scripts/stl_test_api/__init__.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/scripts/stl_test_api/__init__.py b/scripts/stl_test_api/__init__.py new file mode 100644 index 00000000..6df72136 --- /dev/null +++ b/scripts/stl_test_api/__init__.py @@ -0,0 +1,82 @@ +import sys +import os +import time +import cStringIO + +api_path = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, os.path.join(api_path, '../automation/trex_control_plane/client/')) + +from trex_stateless_client import CTRexStatelessClient, LoggerApi +from common import trex_stats + +# a basic test object +class BasicTestAPI(object): + + # exception class + class Failure(Exception): + def __init__ (self, rc): + self.msg = str(rc) + + def __str__ (self): + s = "\n\n******\n" + s += "Test has failed.\n\n" + s += "Error reported:\n\n {0}\n".format(self.msg) + return s + + + # logger for test + class Logger(LoggerApi): + def __init__ (self): + LoggerApi.__init__(self) + self.buffer = cStringIO.StringIO() + + def write (self, msg, newline = True): + line = str(msg) + ("\n" if newline else "") + self.buffer.write(line) + + #print line + + def flush (self): + pass + + + # main object + def __init__ (self, server = "localhost", sync_port = 4501, async_port = 4500): + self.logger = BasicTestAPI.Logger() + self.client = CTRexStatelessClient(logger = self.logger, sync_port = sync_port, async_port = async_port) + + + def connect (self): + rc = self.client.connect(mode = "RWF") + self.__verify_rc(rc) + + + def disconnect (self): + self.client.disconnect() + + + def __verify_rc (self, rc): + if rc.bad(): + raise self.Failure(rc) + + def inject_profile (self, filename, rate = "1", duration = None): + cmd = "-f {0} -m {1}".format(filename, rate) + if duration: + cmd += " -d {0}".format(duration) + + rc = self.client.cmd_start_line(cmd) + self.__verify_rc(rc) + + + def wait_while_traffic_on (self, timeout = None): + while self.client.get_active_ports(): + time.sleep(0.1) + + + def get_stats (self): + total_stats = trex_stats.CPortStats(None) + + for port in self.client.ports.values(): + total_stats += port.port_stats + + return total_stats |