summaryrefslogtreecommitdiffstats
path: root/meta/lib
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
parent45a5886f1ec458d4c306b8d68fd31d568bc36b47 (diff)
downloadopenembedded-core-contrib-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')
-rw-r--r--meta/lib/oeqa/runtime/cases/ptest.py40
-rw-r--r--meta/lib/oeqa/utils/logparser.py58
2 files changed, 36 insertions, 62 deletions
diff --git a/meta/lib/oeqa/runtime/cases/ptest.py b/meta/lib/oeqa/runtime/cases/ptest.py
index 1ce22a09e7..ae54a01669 100644
--- a/meta/lib/oeqa/runtime/cases/ptest.py
+++ b/meta/lib/oeqa/runtime/cases/ptest.py
@@ -1,50 +1,16 @@
import unittest
import pprint
+import re
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
from oeqa.core.decorator.oeid import OETestID
from oeqa.core.decorator.data import skipIfNotFeature
from oeqa.runtime.decorator.package import OEHasPackage
-from oeqa.utils.logparser import PtestParser, Result
+from oeqa.utils.logparser import PtestParser
class PtestRunnerTest(OERuntimeTestCase):
- # a ptest log parser
- def parse_ptest(self, logfile):
- parser = PtestParser()
- result = Result()
-
- with open(logfile, errors='replace') as f:
- for line in f:
- result_tuple = parser.parse_line(line)
- if not result_tuple:
- continue
- line_type, category, status, name = result_tuple
-
- if line_type == 'section' and status == 'begin':
- current_section = name
- continue
-
- if line_type == 'section' and status == 'end':
- current_section = None
- continue
-
- if line_type == 'test' and status == 'pass':
- result.store(current_section, name, status)
- continue
-
- if line_type == 'test' and status == 'fail':
- result.store(current_section, name, status)
- continue
-
- if line_type == 'test' and status == 'skip':
- result.store(current_section, name, status)
- continue
-
- result.sort_tests()
- return result
-
@OETestID(1600)
@skipIfNotFeature('ptest', 'Test requires ptest to be in DISTRO_FEATURES')
@OETestDepends(['ssh.SSHTest.test_ssh'])
@@ -83,7 +49,7 @@ class PtestRunnerTest(OERuntimeTestCase):
extras['ptestresult.rawlogs'] = {'log': output}
# Parse and save results
- parse_result = self.parse_ptest(ptest_runner_log)
+ parse_result = PtestParser().parse(ptest_runner_log)
parse_result.log_as_files(ptest_log_dir, test_status = ['pass','fail', 'skip'])
if os.path.exists(ptest_log_dir_link):
# Remove the old link to create a new one
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):