r'PDR_LOWER:\s(\d+.\d+).*\n.*\n'
r'PDR_UPPER:\s(\d+.\d+)')
- REGEX_NDRPDR_LAT = re.compile(r'LATENCY.*\[\'(.*)\', \'(.*)\'\]\s\n.*\n.*\n'
- r'LATENCY.*\[\'(.*)\', \'(.*)\'\]')
+ # TODO: Remove when not needed
+ REGEX_NDRPDR_LAT_BASE = re.compile(
+ r'LATENCY.*\[\'(.*)\', \'(.*)\'\]\s\n.*\n.*\n'
+ r'LATENCY.*\[\'(.*)\', \'(.*)\'\]'
+ )
+ REGEX_NDRPDR_LAT = re.compile(
+ r'LATENCY.*\[\'(.*)\', \'(.*)\'\]\s\n.*\n.*\n'
+ r'LATENCY.*\[\'(.*)\', \'(.*)\'\]\s\n.*\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]'
+ )
+ # TODO: Remove when not needed
+ REGEX_NDRPDR_LAT_LONG = re.compile(
+ r'LATENCY.*\[\'(.*)\', \'(.*)\'\]\s\n.*\n.*\n'
+ r'LATENCY.*\[\'(.*)\', \'(.*)\'\]\s\n.*\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
+ r'Latency.*\[\'(.*)\', \'(.*)\'\]'
+ )
REGEX_TOLERANCE = re.compile(r'^[\D\d]*LOSS_ACCEPTANCE:\s(\d*\.\d*)\s'
r'[\D\d]*')
else:
self._msg_type = None
text = re.sub(r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3} "
- r"VAT command history:", u"", msg.message, count=1). \
- replace(u"\n\n", u"\n").replace(u'\n', u' |br| ').\
- replace(u'\r', u'').replace(u'"', u"'")
+ r"VAT command history:", u"",
+ msg.message, count=1).replace(u'\n', u' |br| ').\
+ replace(u'"', u"'")
self._data[u"tests"][self._test_id][u"conf-history"] += (
f" |br| **DUT{str(self._conf_history_lookup_nr)}:** {text}"
self._msg_type = None
text = re.sub(r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3} "
r"PAPI command history:", u"",
- msg.message, count=1). \
- replace(u"\n\n", u"\n").replace(u'\n', u' |br| ').\
- replace(u'\r', u'').replace(u'"', u"'")
-
+ msg.message, count=1).replace(u'\n', u' |br| ').\
+ replace(u'"', u"'")
self._data[u"tests"][self._test_id][u"conf-history"] += (
f" |br| **DUT{str(self._conf_history_lookup_nr)}:** {text}"
)
:type msg: Message
:returns: Nothing.
"""
+
if u"show-run" not in self._data[u"tests"][self._test_id].keys():
self._data[u"tests"][self._test_id][u"show-run"] = str()
- if msg.message.count(u"stats runtime"):
- host = str(re.search(self.REGEX_TC_PAPI_CLI, msg.message).
- group(1))
- socket = str(re.search(self.REGEX_TC_PAPI_CLI, msg.message).
- group(2))
+ if msg.message.count(u"stats runtime") or \
+ msg.message.count(u"Runtime"):
+ try:
+ host = str(re.search(self.REGEX_TC_PAPI_CLI, msg.message).
+ group(1))
+ except (AttributeError, IndexError):
+ host = self._data[u"tests"][self._test_id][u"show-run"].\
+ count(u"DUT:") + 1
+ try:
+ socket = str(re.search(self.REGEX_TC_PAPI_CLI, msg.message).
+ group(2))
+ socket = f"/{socket}"
+ except (AttributeError, IndexError):
+ socket = u""
runtime = loads(
str(msg.message).
replace(u' ', u'').
txt_table.align[u"Vectors/Calls"] = u"r"
text += txt_table.get_string(sortby=u"Name") + u'\n'
- text = f" \n **DUT: {host}/{socket}** \n {text}".\
+ text = f"\n**DUT: {host}{socket}**\n{text}".\
replace(u'\n', u' |br| ').\
replace(u'\r', u'').\
replace(u'"', u"'")
u"PDR": {
u"direction1": copy.copy(latency_default),
u"direction2": copy.copy(latency_default)
- }
+ },
+ u"LAT0": {
+ u"direction1": copy.copy(latency_default),
+ u"direction2": copy.copy(latency_default)
+ },
+ u"PDR10": {
+ u"direction1": copy.copy(latency_default),
+ u"direction2": copy.copy(latency_default)
+ },
+ u"PDR50": {
+ u"direction1": copy.copy(latency_default),
+ u"direction2": copy.copy(latency_default)
+ },
+ u"PDR90": {
+ u"direction1": copy.copy(latency_default),
+ u"direction2": copy.copy(latency_default)
+ },
}
- status = u"FAIL"
- groups = re.search(self.REGEX_NDRPDR_LAT, msg)
+
+ # TODO: Rewrite when long and base are not needed
+ groups = re.search(self.REGEX_NDRPDR_LAT_LONG, msg)
+ if groups is None:
+ groups = re.search(self.REGEX_NDRPDR_LAT, msg)
+ if groups is None:
+ groups = re.search(self.REGEX_NDRPDR_LAT_BASE, msg)
+ if groups is None:
+ return latency, u"FAIL"
def process_latency(in_str):
"""Return object with parsed latency values.
:throws IndexError: If in_str does not have enough substrings.
:throws ValueError: If a substring does not convert to float.
"""
- in_list = in_str.split('/')
+ in_list = in_str.split('/', 3)
rval = {
u"min": float(in_list[0]),
return rval
- if groups is not None:
- try:
- latency[u"NDR"][u"direction1"] = \
- process_latency(groups.group(1))
- latency[u"NDR"][u"direction2"] = \
- process_latency(groups.group(2))
- latency[u"PDR"][u"direction1"] = \
- process_latency(groups.group(3))
- latency[u"PDR"][u"direction2"] = \
- process_latency(groups.group(4))
- status = u"PASS"
- except (IndexError, ValueError):
- pass
+ try:
+ latency[u"NDR"][u"direction1"] = process_latency(groups.group(1))
+ latency[u"NDR"][u"direction2"] = process_latency(groups.group(2))
+ latency[u"PDR"][u"direction1"] = process_latency(groups.group(3))
+ latency[u"PDR"][u"direction2"] = process_latency(groups.group(4))
+ if groups.lastindex == 4:
+ return latency, u"PASS"
+ except (IndexError, ValueError):
+ pass
+
+ try:
+ latency[u"PDR90"][u"direction1"] = process_latency(groups.group(5))
+ latency[u"PDR90"][u"direction2"] = process_latency(groups.group(6))
+ latency[u"PDR50"][u"direction1"] = process_latency(groups.group(7))
+ latency[u"PDR50"][u"direction2"] = process_latency(groups.group(8))
+ latency[u"PDR10"][u"direction1"] = process_latency(groups.group(9))
+ latency[u"PDR10"][u"direction2"] = process_latency(groups.group(10))
+ latency[u"LAT0"][u"direction1"] = process_latency(groups.group(11))
+ latency[u"LAT0"][u"direction2"] = process_latency(groups.group(12))
+ if groups.lastindex == 12:
+ return latency, u"PASS"
+ except (IndexError, ValueError):
+ pass
+
+ # TODO: Remove when not needed
+ latency[u"NDR10"] = {
+ u"direction1": copy.copy(latency_default),
+ u"direction2": copy.copy(latency_default)
+ }
+ latency[u"NDR50"] = {
+ u"direction1": copy.copy(latency_default),
+ u"direction2": copy.copy(latency_default)
+ }
+ latency[u"NDR90"] = {
+ u"direction1": copy.copy(latency_default),
+ u"direction2": copy.copy(latency_default)
+ }
+ try:
+ latency[u"LAT0"][u"direction1"] = process_latency(groups.group(5))
+ latency[u"LAT0"][u"direction2"] = process_latency(groups.group(6))
+ latency[u"NDR10"][u"direction1"] = process_latency(groups.group(7))
+ latency[u"NDR10"][u"direction2"] = process_latency(groups.group(8))
+ latency[u"NDR50"][u"direction1"] = process_latency(groups.group(9))
+ latency[u"NDR50"][u"direction2"] = process_latency(groups.group(10))
+ latency[u"NDR90"][u"direction1"] = process_latency(groups.group(11))
+ latency[u"NDR90"][u"direction2"] = process_latency(groups.group(12))
+ latency[u"PDR10"][u"direction1"] = process_latency(groups.group(13))
+ latency[u"PDR10"][u"direction2"] = process_latency(groups.group(14))
+ latency[u"PDR50"][u"direction1"] = process_latency(groups.group(15))
+ latency[u"PDR50"][u"direction2"] = process_latency(groups.group(16))
+ latency[u"PDR90"][u"direction1"] = process_latency(groups.group(17))
+ latency[u"PDR90"][u"direction2"] = process_latency(groups.group(18))
+ return latency, u"PASS"
+ except (IndexError, ValueError):
+ pass
- return latency, status
+ return latency, u"FAIL"
def visit_suite(self, suite):
"""Implements traversing through the suite and its direct children.
:type test_kw: Keyword
:returns: Nothing.
"""
- if test_kw.name.count(u"Show Runtime Counters On All Duts"):
+ if test_kw.name.count(u"Show Runtime On All Duts") or \
+ test_kw.name.count(u"Show Runtime Counters On All Duts"):
self._lookup_kw_nr += 1
self._show_run_lookup_nr = 0
self._msg_type = u"test-show-runtime"