diff options
| -rw-r--r-- | meta/lib/oeqa/runtime/cases/ptest.py | 13 | ||||
| -rw-r--r-- | meta/lib/oeqa/utils/logparser.py | 21 |
2 files changed, 13 insertions, 21 deletions
diff --git a/meta/lib/oeqa/runtime/cases/ptest.py b/meta/lib/oeqa/runtime/cases/ptest.py index 2843953b38..6ae951356d 100644 --- a/meta/lib/oeqa/runtime/cases/ptest.py +++ b/meta/lib/oeqa/runtime/cases/ptest.py | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | import unittest | 1 | import unittest |
| 2 | import pprint | 2 | import pprint |
| 3 | import re | 3 | import datetime |
| 4 | 4 | ||
| 5 | from oeqa.runtime.case import OERuntimeTestCase | 5 | from oeqa.runtime.case import OERuntimeTestCase |
| 6 | from oeqa.core.decorator.depends import OETestDepends | 6 | from oeqa.core.decorator.depends import OETestDepends |
| @@ -21,8 +21,6 @@ class PtestRunnerTest(OERuntimeTestCase): | |||
| 21 | if status != 0: | 21 | if status != 0: |
| 22 | self.skipTest("No -ptest packages are installed in the image") | 22 | self.skipTest("No -ptest packages are installed in the image") |
| 23 | 23 | ||
| 24 | import datetime | ||
| 25 | |||
| 26 | test_log_dir = self.td.get('TEST_LOG_DIR', '') | 24 | test_log_dir = self.td.get('TEST_LOG_DIR', '') |
| 27 | # The TEST_LOG_DIR maybe NULL when testimage is added after | 25 | # The TEST_LOG_DIR maybe NULL when testimage is added after |
| 28 | # testdata.json is generated. | 26 | # testdata.json is generated. |
| @@ -30,9 +28,9 @@ class PtestRunnerTest(OERuntimeTestCase): | |||
| 30 | test_log_dir = os.path.join(self.td.get('WORKDIR', ''), 'testimage') | 28 | test_log_dir = os.path.join(self.td.get('WORKDIR', ''), 'testimage') |
| 31 | # Don't use self.td.get('DATETIME'), it's from testdata.json, not | 29 | # Don't use self.td.get('DATETIME'), it's from testdata.json, not |
| 32 | # up-to-date, and may cause "File exists" when re-reun. | 30 | # up-to-date, and may cause "File exists" when re-reun. |
| 33 | datetime = datetime.datetime.now().strftime('%Y%m%d%H%M%S') | 31 | timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S') |
| 34 | ptest_log_dir_link = os.path.join(test_log_dir, 'ptest_log') | 32 | ptest_log_dir_link = os.path.join(test_log_dir, 'ptest_log') |
| 35 | ptest_log_dir = '%s.%s' % (ptest_log_dir_link, datetime) | 33 | ptest_log_dir = '%s.%s' % (ptest_log_dir_link, timestamp) |
| 36 | ptest_runner_log = os.path.join(ptest_log_dir, 'ptest-runner.log') | 34 | ptest_runner_log = os.path.join(ptest_log_dir, 'ptest-runner.log') |
| 37 | 35 | ||
| 38 | status, output = self.target.run('ptest-runner', 0) | 36 | status, output = self.target.run('ptest-runner', 0) |
| @@ -51,7 +49,7 @@ class PtestRunnerTest(OERuntimeTestCase): | |||
| 51 | # Parse and save results | 49 | # Parse and save results |
| 52 | parser = PtestParser() | 50 | parser = PtestParser() |
| 53 | results, sections = parser.parse(ptest_runner_log) | 51 | results, sections = parser.parse(ptest_runner_log) |
| 54 | parser.results_as_files(ptest_log_dir, test_status = ['pass','fail', 'skip']) | 52 | parser.results_as_files(ptest_log_dir) |
| 55 | if os.path.exists(ptest_log_dir_link): | 53 | if os.path.exists(ptest_log_dir_link): |
| 56 | # Remove the old link to create a new one | 54 | # Remove the old link to create a new one |
| 57 | os.remove(ptest_log_dir_link) | 55 | os.remove(ptest_log_dir_link) |
| @@ -60,12 +58,11 @@ class PtestRunnerTest(OERuntimeTestCase): | |||
| 60 | extras['ptestresult.sections'] = sections | 58 | extras['ptestresult.sections'] = sections |
| 61 | 59 | ||
| 62 | trans = str.maketrans("()", "__") | 60 | trans = str.maketrans("()", "__") |
| 63 | resmap = {'pass': 'PASSED', 'skip': 'SKIPPED', 'fail': 'FAILED'} | ||
| 64 | for section in results: | 61 | for section in results: |
| 65 | for test in results[section]: | 62 | for test in results[section]: |
| 66 | result = results[section][test] | 63 | result = results[section][test] |
| 67 | testname = "ptestresult." + (section or "No-section") + "." + "_".join(test.translate(trans).split()) | 64 | testname = "ptestresult." + (section or "No-section") + "." + "_".join(test.translate(trans).split()) |
| 68 | extras[testname] = {'status': resmap[result]} | 65 | extras[testname] = {'status': result} |
| 69 | 66 | ||
| 70 | failed_tests = {} | 67 | failed_tests = {} |
| 71 | for section in results: | 68 | for section in results: |
diff --git a/meta/lib/oeqa/utils/logparser.py b/meta/lib/oeqa/utils/logparser.py index 8585c195c4..32fde14a7d 100644 --- a/meta/lib/oeqa/utils/logparser.py +++ b/meta/lib/oeqa/utils/logparser.py | |||
| @@ -3,7 +3,6 @@ | |||
| 3 | import sys | 3 | import sys |
| 4 | import os | 4 | import os |
| 5 | import re | 5 | import re |
| 6 | from . import ftools | ||
| 7 | 6 | ||
| 8 | # A parser that can be used to identify weather a line is a test result or a section statement. | 7 | # A parser that can be used to identify weather a line is a test result or a section statement. |
| 9 | class PtestParser(object): | 8 | class PtestParser(object): |
| @@ -13,9 +12,9 @@ class PtestParser(object): | |||
| 13 | 12 | ||
| 14 | def parse(self, logfile): | 13 | def parse(self, logfile): |
| 15 | test_regex = {} | 14 | test_regex = {} |
| 16 | test_regex['pass'] = re.compile(r"^PASS:(.+)") | 15 | test_regex['PASSED'] = re.compile(r"^PASS:(.+)") |
| 17 | test_regex['fail'] = re.compile(r"^FAIL:(.+)") | 16 | test_regex['FAILED'] = re.compile(r"^FAIL:(.+)") |
| 18 | test_regex['skip'] = re.compile(r"^SKIP:(.+)") | 17 | test_regex['SKIPPED'] = re.compile(r"^SKIP:(.+)") |
| 19 | 18 | ||
| 20 | section_regex = {} | 19 | section_regex = {} |
| 21 | section_regex['begin'] = re.compile(r"^BEGIN: .*/(.+)/ptest") | 20 | section_regex['begin'] = re.compile(r"^BEGIN: .*/(.+)/ptest") |
| @@ -72,9 +71,7 @@ class PtestParser(object): | |||
| 72 | return self.results, self.sections | 71 | return self.results, self.sections |
| 73 | 72 | ||
| 74 | # Log the results as files. The file name is the section name and the contents are the tests in that section. | 73 | # Log the results as files. The file name is the section name and the contents are the tests in that section. |
| 75 | def results_as_files(self, target_dir, test_status): | 74 | def results_as_files(self, target_dir): |
| 76 | if not type(test_status) == type([]): | ||
| 77 | raise Exception("test_status should be a list. Got " + str(test_status) + " instead.") | ||
| 78 | if not os.path.exists(target_dir): | 75 | if not os.path.exists(target_dir): |
| 79 | raise Exception("Target directory does not exist: %s" % target_dir) | 76 | raise Exception("Target directory does not exist: %s" % target_dir) |
| 80 | 77 | ||
| @@ -84,10 +81,8 @@ class PtestParser(object): | |||
| 84 | prefix = section | 81 | prefix = section |
| 85 | section_file = os.path.join(target_dir, prefix) | 82 | section_file = os.path.join(target_dir, prefix) |
| 86 | # purge the file contents if it exists | 83 | # purge the file contents if it exists |
| 87 | open(section_file, 'w').close() | 84 | with open(section_file, 'w') as f: |
| 88 | for test_name in sorted(self.results[section]): | 85 | for test_name in sorted(self.results[section]): |
| 89 | status = self.results[section][test_name] | 86 | status = self.results[section][test_name] |
| 90 | # we log only the tests with status in the test_status list | 87 | f.write(status + ": " + test_name + "\n") |
| 91 | if status in test_status: | ||
| 92 | ftools.append_file(section_file, status + ": " + test_name) | ||
| 93 | 88 | ||
