Please scratch this. There's a bug in second patch.
Tue, Apr 05, 2016 at 12:25:52PM CEST, jtluka(a)redhat.com wrote:
>When we changed how the Netperf test module reports results we silently
>broke SCTP_STREAM mode. The reason is that SCTP_STREAM does not have omni
>output selection available (checked with both 2.6.0 and 2.7.0).
>SCTP_STREAM data must be parsed separately.
>
>Fixes:
>
>Signed-off-by: Jan Tluka <jtluka(a)redhat.com>
>---
> test_modules/Netperf.py | 67 +++++++++++++++++++++++++++++++++++--------------
> 1 file changed, 48 insertions(+), 19 deletions(-)
>
>diff --git a/test_modules/Netperf.py b/test_modules/Netperf.py
>index 2033c57..89664fb 100644
>--- a/test_modules/Netperf.py
>+++ b/test_modules/Netperf.py
>@@ -18,6 +18,8 @@ class Netperf(TestGeneric):
> supported_tests = ["TCP_STREAM", "TCP_RR",
"UDP_STREAM", "UDP_RR",
> "SCTP_STREAM", "SCTP_STREAM_MANY",
"SCTP_RR"]
>
>+ omni_tests = ["TCP_STREAM", "TCP_RR", "UDP_STREAM",
"UDP_RR"]
>+
> def __init__(self, command):
> super(Netperf, self).__init__(command)
>
>@@ -52,13 +54,18 @@ class Netperf(TestGeneric):
> else:
> self._threshold_interval = None
>
>+ def _is_omni(self):
>+ return self._testname in self.omni_tests
>+
> def _compose_cmd(self):
> """
> composes commands for netperf and netserver based on xml recipe
> """
> if self._role == "client":
>- # -P 0 disables banner header of output
>- cmd = "netperf -H %s -f k -P 0" % self._netperf_server
>+ cmd = "netperf -H %s -f k" % self._netperf_server
>+ if self._is_omni():
>+ # -P 0 disables banner header of output
>+ cmd += " -P 0"
> if self._port is not None:
> """
> client connects on this port
>@@ -112,7 +119,8 @@ class Netperf(TestGeneric):
> cmd += " -s 1"
>
> # Print only relevant output
>- cmd += ' -- -k "THROUGHPUT, LOCAL_CPU_UTIL, REMOTE_CPU_UTIL,
CONFIDENCE_LEVEL, THROUGHPUT_CONFID"'
>+ if self._is_omni():
>+ cmd += ' -- -k "THROUGHPUT, LOCAL_CPU_UTIL, REMOTE_CPU_UTIL,
CONFIDENCE_LEVEL, THROUGHPUT_CONFID"'
>
> elif self._role == "server":
> cmd = "netserver -D"
>@@ -136,27 +144,48 @@ class Netperf(TestGeneric):
> def _parse_output(self, output):
> res_val = {}
>
>- pattern_throughput = "THROUGHPUT=(\d+\.\d+)"
>- throughput = re.search(pattern_throughput, output)
>+ if not self._is_omni():
>+ # pattern for SCTP streams and other tests
>+ # decimal decimal decimal float (float)
>+ pattern = "\d+\s+\d+\s+\d+\s+\d+\.\d+\s+(\d+(?:\.\d+){0,1})"
>+ if self._cpu_util:
>+ # cpu utilization data in format: float float
>+ pattern += "\s+(\d+(?:\.\d+){0,1})\s+(\d+(?:\.\d+){0,1})"
>
>- if throughput is None:
>- rate_in_kb = 0.0
>+ r2 = re.search(pattern, output.lower())
>+
>+ if r2 is None:
>+ rate_in_kb = 0.0
>+ else:
>+ rate_in_kb = float(r2.group(1))
>+ if self._cpu_util:
>+ res_val["LOCAL_CPU_UTIL"] = float(r2.group(2))
>+ res_val["REMOTE_CPU_UTIL"] = float(r2.group(3))
>+
>+ res_val["rate"] = rate_in_kb*1000
>+ res_val["unit"] = "bps"
> else:
>- rate_in_kb = float(throughput.group(1))
>+ pattern_throughput = "THROUGHPUT=(\d+\.\d+)"
>+ throughput = re.search(pattern_throughput, output)
>
>- res_val["rate"] = rate_in_kb*1000
>- res_val["unit"] = "bps"
>+ if throughput is None:
>+ rate_in_kb = 0.0
>+ else:
>+ rate_in_kb = float(throughput.group(1))
>
>- if self._cpu_util is not None:
>- if self._cpu_util == "local" or self._cpu_util ==
"both":
>- pattern_loc_cpu_util = "LOCAL_CPU_UTIL=([-]?\d+\.\d+)"
>- loc_cpu_util = re.search(pattern_loc_cpu_util, output)
>- res_val["LOCAL_CPU_UTIL"] = float(loc_cpu_util.group(1))
>+ res_val["rate"] = rate_in_kb*1000
>+ res_val["unit"] = "bps"
>
>- if self._cpu_util == "remote" or self._cpu_util ==
"both":
>- pattern_rem_cpu_util = "REMOTE_CPU_UTIL=([-]?\d+\.\d+)"
>- rem_cpu_util = re.search(pattern_rem_cpu_util, output)
>- res_val["REMOTE_CPU_UTIL"] = float(rem_cpu_util.group(1))
>+ if self._cpu_util is not None:
>+ if self._cpu_util == "local" or self._cpu_util ==
"both":
>+ pattern_loc_cpu_util = "LOCAL_CPU_UTIL=([-]?\d+\.\d+)"
>+ loc_cpu_util = re.search(pattern_loc_cpu_util, output)
>+ res_val["LOCAL_CPU_UTIL"] =
float(loc_cpu_util.group(1))
>+
>+ if self._cpu_util == "remote" or self._cpu_util ==
"both":
>+ pattern_rem_cpu_util =
"REMOTE_CPU_UTIL=([-]?\d+\.\d+)"
>+ rem_cpu_util = re.search(pattern_rem_cpu_util, output)
>+ res_val["REMOTE_CPU_UTIL"] =
float(rem_cpu_util.group(1))
>
> if self._confidence is not None:
> confidence = self._parse_confidence(output)
>--
>2.4.11
>