diff options
author | 2015-11-11 13:48:02 +0200 | |
---|---|---|
committer | 2015-11-11 13:48:02 +0200 | |
commit | 467382a7611f478d66cf58c1307f079239f7bac6 (patch) | |
tree | 6652a456f6e67fa462a5a2ec44bffabc9a05406a /scripts/automation/trex_control_plane/client | |
parent | a7983ed267e02a9c6a39c898c58e96b5d878e3f2 (diff) |
lightweight console
Diffstat (limited to 'scripts/automation/trex_control_plane/client')
-rwxr-xr-x | scripts/automation/trex_control_plane/client/trex_stateless_client.py | 102 |
1 files changed, 90 insertions, 12 deletions
diff --git a/scripts/automation/trex_control_plane/client/trex_stateless_client.py b/scripts/automation/trex_control_plane/client/trex_stateless_client.py index 11728965..168853b3 100755 --- a/scripts/automation/trex_control_plane/client/trex_stateless_client.py +++ b/scripts/automation/trex_control_plane/client/trex_stateless_client.py @@ -232,7 +232,6 @@ class CTRexStatelessClient(object): self.transmit(command.method, command.params), self.ack_success_test) - # @force_status(owned=True) @acquired def add_stream(self, stream_id, stream_obj, port_id=None): if not self._is_ports_valid(port_id): @@ -244,7 +243,6 @@ class CTRexStatelessClient(object): "stream": stream_obj.dump()} return self.transmit("add_stream", params) - # @force_status(owned=True) @acquired def add_stream_pack(self, stream_pack_list, port_id=None): if not self._is_ports_valid(port_id): @@ -262,9 +260,11 @@ class CTRexStatelessClient(object): for p_id in port_ids] ) res_ok, resp_list = self.transmit_batch(commands) - if res_ok: - return self._process_batch_result(commands, resp_list, self._handle_add_stream_response, - success_test=self.ack_success_test) + if not res_ok: + return res_ok, resp_list + + return self._process_batch_result(commands, resp_list, self._handle_add_stream_response, + success_test=self.ack_success_test) @force_status(owned=True) def remove_stream(self, stream_id, port_id=None): @@ -275,8 +275,6 @@ class CTRexStatelessClient(object): "stream_id": stream_id} return self.transmit("remove_stream", params) - # @force_status(owned=True) - @acquired def remove_all_streams(self, port_id=None): if not self._is_ports_valid(port_id): raise ValueError("Provided illegal port id input") @@ -326,7 +324,6 @@ class CTRexStatelessClient(object): "get_pkt": get_pkt} return self.transmit("get_stream_list", params) - @acquired def start_traffic(self, multiplier, port_id=None): if not self._is_ports_valid(port_id): raise ValueError("Provided illegal port id input") @@ -350,8 +347,6 @@ class CTRexStatelessClient(object): self.transmit(command.method, command.params), self.ack_success_test) - # @force_status(owned=False, active_and_owned=True) - @acquired def stop_traffic(self, port_id=None): if not self._is_ports_valid(port_id): raise ValueError("Provided illegal port id input") @@ -371,7 +366,7 @@ class CTRexStatelessClient(object): params = {"handler": self._conn_handler.get(port_id), "port_id": port_id} command = RpcCmdData("stop_traffic", params) - return self._handle_start_traffic_response(command, + return self._handle_stop_traffic_response(command, self.transmit(command.method, command.params), self.ack_success_test) @@ -471,6 +466,88 @@ class CTRexStatelessClient(object): return False + ######################### Console (high level) API ######################### + + # reset + # acquire, stop, remove streams and clear stats + # + # + def cmd_reset (self, annotate_func): + + ports = self.get_port_ids() + + # sync with the server + rc, log = self._init_sync() + annotate_func("Syncing with the server:", rc, log) + if not rc: + return False + + + # force acquire all ports + rc, log = self.acquire(ports, force = True) + annotate_func("Force acquiring all ports:", rc, log) + if not rc: + return False + + # force stop + rc, log = self.stop_traffic(ports) + annotate_func("Stop traffic on all ports:", rc, log) + if not rc: + return False + + # remove all streams + rc, log = self.remove_all_streams(ports) + annotate_func("Removing all streams from all ports:", rc, log) + if not rc: + return False + + # TODO: clear stats + return True + + + # stop cmd + def cmd_stop (self, ports, annotate_func): + + # find the relveant ports + active_ports = set(self.get_active_ports()).intersection(ports) + if not active_ports: + annotate_func("No active traffic on porivded ports") + return True + + rc, log = self.stop_traffic(active_ports) + annotate_func("Stopping traffic on ports {0}:".format([port for port in active_ports]), rc, log) + if not rc: + return False + + return True + + # start cmd + def cmd_start (self, ports, stream_list, mult, force, annotate_func): + + if force: + rc = self.cmd_stop(ports, annotate_func) + if not rc: + return False + + rc, log = self.remove_all_streams(ports) + annotate_func("Removing all streams from ports {0}:".format([port for port in ports]), rc, log, + "Please either retry with --force or stop traffic") + if not rc: + return False + + rc, log = self.add_stream_pack(stream_list.compiled, port_id= ports) + annotate_func("Attaching streams to port {0}:".format([port for port in ports]), rc, log) + if not rc: + return False + + # finally, start the traffic + rc, log = self.start_traffic(mult, ports) + annotate_func("Starting traffic on ports {0}:".format([port for port in ports]), rc, log) + if not rc: + return False + + return True + # ----- handler internal methods ----- # def _handle_general_response(self, request, response, msg, success_test=None): port_id = request.params.get("port_id") @@ -525,7 +602,8 @@ class CTRexStatelessClient(object): def _handle_stop_traffic_response(self, request, response, success_test): port_id = request.params.get("port_id") if success_test(response): - self._active_ports.remove(port_id) + if port_id in self._active_ports: + self._active_ports.remove(port_id) return RpcResponseStatus(True, port_id, "Traffic stopped") else: return RpcResponseStatus(False, port_id, response.data) |