summaryrefslogtreecommitdiffstats
path: root/scripts/stl_test_api
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/stl_test_api')
-rw-r--r--scripts/stl_test_api/__init__.py82
-rw-r--r--scripts/stl_test_api/trex_stl_api.py93
2 files changed, 175 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
diff --git a/scripts/stl_test_api/trex_stl_api.py b/scripts/stl_test_api/trex_stl_api.py
new file mode 100644
index 00000000..6d85ee9f
--- /dev/null
+++ b/scripts/stl_test_api/trex_stl_api.py
@@ -0,0 +1,93 @@
+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
+
+class BasicTest(object):
+
+ # exception class
+ class Failure(Exception):
+ def __init__ (self, rc):
+ self.rc = rc
+
+ def __str__ (self):
+ s = "\n******\n"
+ s += "Test has failed.\n\n"
+ s += "Error reported:\n\n {0}\n".format(str(self.rc.err()))
+ return s
+
+
+ # logger
+ class Logger(LoggerApi):
+ def __init__ (self):
+ LoggerApi.__init__(self)
+ self.buffer = cStringIO.StringIO()
+
+ def write (self, msg, newline = True):
+ self.buffer.write(str(msg))
+
+ if newline:
+ self.buffer.write("\n")
+
+ def flush (self):
+ pass
+
+
+ def __init__ (self):
+ self.logger = BasicTest.Logger()
+ self.client = CTRexStatelessClient(logger = self.logger)
+
+ def connect (self):
+ rc = self.client.connect(mode = "RWF")
+ __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)
+
+ print cmd
+ 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 start ():
+ test = BasicTest()
+
+ try:
+ test.connect()
+ test.inject_profile("stl/imix_1pkt.yaml", rate = "5gbps", duration = 10)
+ test.wait_while_traffic_on()
+ finally:
+ test.disconnect()
+
+
+def main ():
+ try:
+ start()
+ print "\nTest has passed :)\n"
+ except BasicTest.Failure as e:
+ print e
+
+
+
+#main()