On 07/08/2017 11:45, Roi Dayan wrote:
On 07/08/2017 08:19, Jiri Pirko wrote:
> Mon, Aug 07, 2017 at 06:17:45AM CEST, roid(a)mellanox.com wrote:
>>
>>
>> On 06/08/2017 11:17, Roi Dayan wrote:
>>> iperf3 is based the original iperf and support similiar command line
>>> and have a similiar output.
>>>
>>> This commit allows to pass option to Iperf test module to use iperf3
>>> binary instead of iperf and adds additional error catcher from iperf3.
>>> In iperf probelmatic input is just ignore with a print.
>>>
>>> Signed-off-by: Roi Dayan <roid(a)mellanox.com>
>>> ---
>>> test_modules/Iperf.py | 17 ++++++++++++++---
>>> 1 file changed, 14 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/test_modules/Iperf.py b/test_modules/Iperf.py
>>> index 77bd1a0..c0b6ba5 100644
>>> --- a/test_modules/Iperf.py
>>> +++ b/test_modules/Iperf.py
>>> @@ -17,6 +17,11 @@ from lnst.Common.Utils import is_installed
>>>
>>> class Iperf(TestGeneric):
>>> def _compose_iperf_cmd(self, role):
>>> + if self.get_opt("iperf3"):
>>> + iperf_bin = "iperf3"
>>> + else:
>>> + iperf_bin = "iperf"
>>> +
>>> iperf_options = self.get_opt("iperf_opts")
>>> if iperf_options is None:
>>> iperf_options = ""
>>> @@ -24,13 +29,13 @@ class Iperf(TestGeneric):
>>> cmd = ""
>>> if role == "client":
>>> iperf_server = self.get_mopt("iperf_server",
>>> opt_type="addr")
>>> - cmd = "iperf --%s %s -t %s %s" % (role, iperf_server,
>>> self.duration, iperf_options)
>>> + cmd = "%s --%s %s -t %s %s" % (iperf_bin, role,
>>> iperf_server, self.duration, iperf_options)
>>> elif role == "server":
>>> bind = self.get_opt("bind",
opt_type="addr")
>>> if bind != None:
>>> - cmd = "iperf --%s -B %s %s" % (role, bind,
>>> iperf_options)
>>> + cmd = "%s --%s -B %s %s" % (iperf_bin, role,
bind,
>>> iperf_options)
>>> else:
>>> - cmd = "iperf --%s %s" % (role, iperf_options)
>>> + cmd = "%s --%s %s" % (iperf_bin, role,
iperf_options)
>>>
>>> return cmd
>>>
>>> @@ -91,6 +96,12 @@ class Iperf(TestGeneric):
>>> logging.info("Iperf connection failed!")
>>> return (False, "Iperf connection failed!")
>>>
>>> + m = re.search("iperf3: error - (.*)", output)
>>> + if m:
>>> + err = m.groups()[0]
>>> + logging.info("Iperf error: %s" % err)
>>> + return (False, "Iperf error: %s" % err)
>>> +
>>> m =
>>>
re.search("\[[^0-9]*[0-9]*\]\s*0.0+-\s*\d*\.\d+\s*sec\s*\d*(\.\d*){0,1}\s*[
>>> kGMT]Bytes\s*(\d*(\.\d*){0,1}\s*[ kGMT]bits\/sec)", output,
>>> re.IGNORECASE)
>>> if m is None:
>>> logging.info("Could not get performance throughput!")
>>>
>>
>>
>> another method I was thinking is to make Iperf3 test module to inherit
>> from Iperf and set the binary in an attribute for the compose cmd.
>
> I like that approach better.
>
was just thinking. I should not really inherit from Iperf as it's
another test module that might not exists if i didn't sync it with
sync_resources() ?
so tested and I cannot do Iperf3 to inherit from Iperf as
Iperf might not exists if not synced.
should I go go with making Iperf3 module? or should keep
the iperf3 option?