#!/usr/bin/env python3.4 # # Copyright 2016 - The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os from signal import SIGTERM import subprocess from acts.utils import create_dir from acts.utils import start_standing_subprocess from acts.utils import stop_standing_subprocess ACTS_CONTROLLER_CONFIG_NAME = "IPerfServer" ACTS_CONTROLLER_REFERENCE_NAME = "iperf_servers" def create(configs, logger): log_path = os.path.dirname(logger.handlers[1].baseFilename) results = [] for c in configs: try: results.append(IPerfServer(c, log_path)) except: pass return results def destroy(objs): for ipf in objs: try: ipf.stop() except: pass class IPerfServer(): """Class that handles iperf3 operations. """ def __init__(self, port, log_path): self.port = port self.log_path = os.path.join(os.path.expanduser(log_path), "iPerf") self.iperf_str = "iperf3 -s -p {}".format(port) self.iperf_process = None self.exec_count = 0 self.started = False def start(self, extra_args="", tag=""): """Starts iperf server on specified port. Args: extra_args: A string representing extra arguments to start iperf server with. tag: Appended to log file name to identify logs from different iperf runs. """ if self.started: return create_dir(self.log_path) self.exec_count += 1 if tag: tag = tag + ',' out_file_name = "IPerfServer,{},{}{}.log".format(self.port, tag, self.exec_count) full_out_path = os.path.join(self.log_path, out_file_name) cmd = "{} {} > {}".format(self.iperf_str, extra_args, full_out_path) self.iperf_process = start_standing_subprocess(cmd) self.started = True def stop(self): if self.started: stop_standing_subprocess(self.iperf_process) self.started = False