summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/utils/logparser.py
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-01-29 13:24:45 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-01-31 09:45:25 +0000
commit05991bb5bc8018275d03fdeecee3d5a757840c7c (patch)
tree9ca92cfac9a8b4a73d33c7d0d71e564583f748fe /meta/lib/oeqa/utils/logparser.py
parent45a5886f1ec458d4c306b8d68fd31d568bc36b47 (diff)
downloadopenembedded-core-05991bb5bc8018275d03fdeecee3d5a757840c7c.tar.gz
oeqa/logparser: Reform the ptest results parser
Now we have a dedicated ptest parser, merge in the remaining ptest specific pieces to further clarify and simplify the code, moving to a point where we can consider extending/enhancing it. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa/utils/logparser.py')
-rw-r--r--meta/lib/oeqa/utils/logparser.py58
1 files changed, 33 insertions, 25 deletions
diff --git a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py
index 0807093fda..f8d1c03630 100644
--- a/meta/lib/oeqa/utils/logparser.py
+++ b/meta/lib/oeqa/utils/logparser.py
@@ -7,32 +7,40 @@ from . import ftools
# A parser that can be used to identify weather a line is a test result or a section statement.
class PtestParser(object):
-
def __init__(self):
-
- self.test_regex = {}
- self.test_regex['pass'] = re.compile(r"^PASS:(.+)")
- self.test_regex['fail'] = re.compile(r"^FAIL:(.+)")
- self.test_regex['skip'] = re.compile(r"^SKIP:(.+)")
-
- self.section_regex = {}
- self.section_regex['begin'] = re.compile(r"^BEGIN: .*/(.+)/ptest")
- self.section_regex['end'] = re.compile(r"^END: .*/(.+)/ptest")
-
- # Parse a line and return a tuple containing the type of result (test/section) and its category, status and name
- def parse_line(self, line):
-
- for test_status, status_regex in test_status_list.items():
- test_name = status_regex.search(line)
- if test_name:
- return ['test', test_category, test_status, test_name.group(1)]
-
- for section_status, status_regex in section_status_list.items():
- section_name = status_regex.search(line)
- if section_name:
- return ['section', section_category, section_status, section_name.group(1)]
- return None
-
+ self.results = Result()
+
+ def parse(self, logfile):
+ test_regex = {}
+ test_regex['pass'] = re.compile(r"^PASS:(.+)")
+ test_regex['fail'] = re.compile(r"^FAIL:(.+)")
+ test_regex['skip'] = re.compile(r"^SKIP:(.+)")
+
+ section_regex = {}
+ section_regex['begin'] = re.compile(r"^BEGIN: .*/(.+)/ptest")
+ section_regex['end'] = re.compile(r"^END: .*/(.+)/ptest")
+
+ with open(logfile, errors='replace') as f:
+ for line in f:
+ result = section_regex['begin'].search(line)
+ if result:
+ current_section = result.group(1)
+ continue
+
+ result = section_regex['end'].search(line)
+ if result:
+ if current_section != result.group(1):
+ bb.warn("Ptest log section mismatch %s vs. %s" % (current_section, result.group(1)))
+ current_section = None
+ continue
+
+ for t in test_regex:
+ result = test_regex[t].search(line)
+ if result:
+ self.results.store(current_section, result.group(1), t)
+
+ self.results.sort_tests()
+ return self.results
class Result(object):