Signed-off-by: Jan Tluka jtluka@redhat.com --- Tests/TestIcmp6Ping.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 68 insertions(+), 0 deletions(-) create mode 100644 Tests/TestIcmp6Ping.py
diff --git a/Tests/TestIcmp6Ping.py b/Tests/TestIcmp6Ping.py new file mode 100644 index 0000000..e57d275 --- /dev/null +++ b/Tests/TestIcmp6Ping.py @@ -0,0 +1,68 @@ +__author__ = """ +jpirko@redhat.com (Jiri Pirko) +jmalanik@redhat.com (Jan Malanik) +jtluka@redhat.com (Jan Tluka) +""" + + +import logging +import re +from Common.TestsCommon import TestGeneric +from Common.ExecCmd import exec_cmd + + +class TestIcmp6Ping(TestGeneric): + def compose_cmd(self): + addr = self.get_mopt("addr", opt_type="addr") + cmd = "ping6 %s" % addr + + iface = self.get_opt("iface") + if iface: + cmd += " -I %s" % iface + + count = self.get_opt("count") + if count: + cmd += " -c %s" % count + + interval = self.get_opt("interval") + if interval: + cmd += " -i %s" % interval + + return cmd + + def run(self): + cmd = self.compose_cmd() + logging.debug("%s" % cmd) + + limit_rate = self.get_opt("limit_rate ", default=80) + data_stdout = exec_cmd(cmd, die_on_err=False)[0] + + """ Provede se parsovani vystupu pomoci regularnich vyrazu. + V pripade ze hledane retezce nebubdou nalezeny, test skonci + s chybou, znamena to, ze vystup programu ma neocekavanou + vystupni syntaxi.""" + + stat_pttr1 = r'(\d+) packets transmitted, (\d+) received' + stat_pttr2 = r' rtt min/avg/max/mdev = \ + (\d+.\d+)/(\d+.\d+)/(\d+.\d+)/(\d+.\d+) ms' + + match = re.search(stat_pttr1, data_stdout) + if not match: + return self.set_fail("expected pattern not found") + + trans_pkts, recv_pkts = match.groups() + rate = int(round((float(recv_pkts) / float(trans_pkts)) * 100)) + logging.debug("Transmitted "%s", received "%s", " \ + "rate "%d%%", limit_rate "%d%%"" \ + % (trans_pkts, recv_pkts, rate, limit_rate )) + + match = re.search(stat_pttr2, data_stdout) + if match: + tmin, tavg, tmax, tmdev = [float(x) for x in match.groups()] + logging .debug("rtt min "%.3f", avg "%.3f", max "%.3f", " + "mdev "%.3f"" % (tmin, tavg, tmax, tmdev)) + + if rate < limit_rate : + return self.set_fail("rate is lower that limit") + + return self.set_pass()