[oe-commits] [openembedded-core] 04/30: oeqa/logparser: Reform the ptest results parser

git at git.openembedded.org git at git.openembedded.org
Thu Jan 31 09:46:10 UTC 2019


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository openembedded-core.

commit 05991bb5bc8018275d03fdeecee3d5a757840c7c
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
AuthorDate: Tue Jan 29 13:24:45 2019 +0000

    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 at linuxfoundation.org>
---
 meta/lib/oeqa/runtime/cases/ptest.py | 40 ++-----------------------
 meta/lib/oeqa/utils/logparser.py     | 58 ++++++++++++++++++++----------------
 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 1ce22a0..ae54a01 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 0807093..f8d1c03 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):
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list