summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/stl/trex_stl_lib
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-04-13 11:22:26 +0300
committerimarom <imarom@cisco.com>2016-04-13 11:23:07 +0300
commit0b39ec305e80999c7dbe36d4b0d3850b04709571 (patch)
tree3c372cfaf77dcd3d4db4cf60e896e8deb4676937 /scripts/automation/trex_control_plane/stl/trex_stl_lib
parent071ef655638f6d6b93930404914bb70004d65c36 (diff)
support for partial port acquire on console
--readonly, -a [ports], -f
Diffstat (limited to 'scripts/automation/trex_control_plane/stl/trex_stl_lib')
-rwxr-xr-xscripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py70
-rw-r--r--scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py11
-rw-r--r--scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py2
3 files changed, 73 insertions, 10 deletions
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
index 120f4d10..98f3fe3a 100755
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
@@ -277,7 +277,7 @@ class EventsHandler(object):
ev = "Port {0} was forcely taken by '{1}'".format(port_id, who)
# call the handler
- self.__async_event_port_forced_acquired(port_id)
+ self.__async_event_port_forced_acquired(port_id, who)
show_event = True
# server stopped
@@ -316,8 +316,8 @@ class EventsHandler(object):
self.client.ports[port_id].async_event_port_resumed()
- def __async_event_port_forced_acquired (self, port_id):
- self.client.ports[port_id].async_event_forced_acquired()
+ def __async_event_port_forced_acquired (self, port_id, who):
+ self.client.ports[port_id].async_event_forced_acquired(who)
def __async_event_server_stopped (self):
@@ -1000,7 +1000,8 @@ class STLClient(object):
"""
- return not (self.get_all_ports() == self.get_acquired_ports())
+ return (self.get_all_ports() == self.get_acquired_ports())
+
# is the client connected ?
def is_connected (self):
@@ -2023,11 +2024,11 @@ class STLClient(object):
@__console
def connect_line (self, line):
- '''Connects to the TRex server'''
- # define a parser
+ '''Connects to the TRex server and acquire ports'''
parser = parsing_opts.gen_parser(self,
"connect",
self.connect_line.__doc__,
+ parsing_opts.PORT_LIST_WITH_ALL,
parsing_opts.FORCE)
opts = parser.parse_args(line.split())
@@ -2035,9 +2036,62 @@ class STLClient(object):
if opts is None:
return
- # call the API
self.connect()
- self.acquire(force = opts.force)
+ self.acquire(ports = opts.ports, force = opts.force)
+
+ # true means print time
+ return True
+
+ @__console
+ def acquire_line (self, line):
+ '''Acquire ports\n'''
+
+ # define a parser
+ parser = parsing_opts.gen_parser(self,
+ "acquire",
+ self.acquire_line.__doc__,
+ parsing_opts.PORT_LIST_WITH_ALL,
+ parsing_opts.FORCE)
+
+ opts = parser.parse_args(line.split())
+
+ if opts is None:
+ return
+
+ # call the API
+ ports = [x for x in opts.ports if x not in self.get_acquired_ports()]
+ if not ports:
+ self.logger.log("Port(s) {0} are already acquired\n".format(opts.ports))
+ return
+
+ self.acquire(ports = ports, force = opts.force)
+
+ # true means print time
+ return True
+
+
+ #
+ @__console
+ def release_line (self, line):
+ '''Release ports\n'''
+
+ parser = parsing_opts.gen_parser(self,
+ "release",
+ self.release_line.__doc__,
+ parsing_opts.PORT_LIST_WITH_ALL)
+
+ opts = parser.parse_args(line.split())
+
+ if opts is None:
+ return
+
+ # call the API
+ ports = [x for x in opts.ports if x in self.get_acquired_ports()]
+ if not ports:
+ self.logger.log("Port(s) {0} are not owned by you\n".format(opts.ports))
+ return
+
+ self.release(ports = ports)
# true means print time
return True
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py
index 87f7b437..6f6f50b1 100644
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py
@@ -64,6 +64,8 @@ class Port(object):
self.tx_stopped_ts = None
self.has_rx_streams = False
+ self.owner = ''
+
def err(self, msg):
return RC_ERR("port {0} : {1}\n".format(self.port_id, msg))
@@ -113,6 +115,11 @@ class Port(object):
def is_paused (self):
return (self.state == self.STATE_PAUSE)
+ def get_owner (self):
+ if self.is_acquired():
+ return self.user
+ else:
+ return self.owner
def sync(self):
params = {"port_id": self.port_id}
@@ -137,6 +144,7 @@ class Port(object):
else:
raise Exception("port {0}: bad state received from server '{1}'".format(self.port_id, port_state))
+ self.owner = rc.data()['owner']
self.next_available_id = int(rc.data()['max_stream_id']) + 1
@@ -671,6 +679,7 @@ class Port(object):
if not self.is_acquired():
self.state = self.STATE_TX
- def async_event_forced_acquired (self):
+ def async_event_forced_acquired (self, who):
self.handler = None
+ self.owner = who
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py
index dea7c6d5..f0ac5c33 100644
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py
@@ -747,7 +747,7 @@ class CPortStats(CTRexStats):
state = format_text(state, 'bold')
- return {"owner": self._port_obj.user if self._port_obj else "",
+ return {"owner": self._port_obj.get_owner() if self._port_obj else "",
"state": "{0}".format(state),
"--": " ",