On 07/08/2017 12:02, Jiri Pirko wrote:
Mon, Aug 07, 2017 at 10:52:02AM CEST, roid(a)mellanox.com wrote:
>
>
> 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.
Can't they be both in the same file?
Ondrej?
I didn't check but isn't sync resource looking for Iperf.py
and get_module("Iperf") look for Iperf inside Iperf.py ?