blob: 3d17d5e088414fb0f3cd5c8b928c462c54e1b1a5 [file] [log] [blame]
#!/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