diff options
| author | Lucian Musat <george.l.musat@intel.com> | 2015-09-24 17:21:53 +0300 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-09-28 12:00:22 +0100 |
| commit | 3fb464f6af2ab7c8510996a675e45749a4f985b5 (patch) | |
| tree | 8b8a0c509cba70844dba1d10dc341508c674386d | |
| parent | 5f371e5a0b1039c2b16842c053ee6df6551f59b6 (diff) | |
| download | poky-3fb464f6af2ab7c8510996a675e45749a4f985b5.tar.gz | |
oeqa/decorators: Add timestamp to decorator logs.
To avoid logs being overwriten when running the automated
tests multiple times, log files include timestamps in
their names and a link is created to point to the latest one.
(From OE-Core rev: 0aa6af4aec6f9773ec2aea929deb3a1ed049cbb9)
Signed-off-by: Lucian Musat <george.l.musat@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | meta/lib/oeqa/utils/decorators.py | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/meta/lib/oeqa/utils/decorators.py b/meta/lib/oeqa/utils/decorators.py index b6adcb1846..7116208380 100644 --- a/meta/lib/oeqa/utils/decorators.py +++ b/meta/lib/oeqa/utils/decorators.py | |||
| @@ -111,6 +111,12 @@ class NoParsingFilter(logging.Filter): | |||
| 111 | def LogResults(original_class): | 111 | def LogResults(original_class): |
| 112 | orig_method = original_class.run | 112 | orig_method = original_class.run |
| 113 | 113 | ||
| 114 | from time import strftime, gmtime | ||
| 115 | caller = os.path.basename(sys.argv[0]) | ||
| 116 | timestamp = strftime('%Y%m%d%H%M%S',gmtime()) | ||
| 117 | logfile = os.path.join(os.getcwd(),'results-'+caller+'.'+timestamp+'.log') | ||
| 118 | linkfile = os.path.join(os.getcwd(),'results-'+caller+'.log') | ||
| 119 | |||
| 114 | #rewrite the run method of unittest.TestCase to add testcase logging | 120 | #rewrite the run method of unittest.TestCase to add testcase logging |
| 115 | def run(self, result, *args, **kws): | 121 | def run(self, result, *args, **kws): |
| 116 | orig_method(self, result, *args, **kws) | 122 | orig_method(self, result, *args, **kws) |
| @@ -127,14 +133,13 @@ def LogResults(original_class): | |||
| 127 | #create custom logging level for filtering. | 133 | #create custom logging level for filtering. |
| 128 | custom_log_level = 100 | 134 | custom_log_level = 100 |
| 129 | logging.addLevelName(custom_log_level, 'RESULTS') | 135 | logging.addLevelName(custom_log_level, 'RESULTS') |
| 130 | caller = os.path.basename(sys.argv[0]) | ||
| 131 | 136 | ||
| 132 | def results(self, message, *args, **kws): | 137 | def results(self, message, *args, **kws): |
| 133 | if self.isEnabledFor(custom_log_level): | 138 | if self.isEnabledFor(custom_log_level): |
| 134 | self.log(custom_log_level, message, *args, **kws) | 139 | self.log(custom_log_level, message, *args, **kws) |
| 135 | logging.Logger.results = results | 140 | logging.Logger.results = results |
| 136 | 141 | ||
| 137 | logging.basicConfig(filename=os.path.join(os.getcwd(),'results-'+caller+'.log'), | 142 | logging.basicConfig(filename=logfile, |
| 138 | filemode='w', | 143 | filemode='w', |
| 139 | format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | 144 | format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', |
| 140 | datefmt='%H:%M:%S', | 145 | datefmt='%H:%M:%S', |
| @@ -163,6 +168,14 @@ def LogResults(original_class): | |||
| 163 | local_log.results("Testcase "+str(test_case)+": PASSED") | 168 | local_log.results("Testcase "+str(test_case)+": PASSED") |
| 164 | 169 | ||
| 165 | original_class.run = run | 170 | original_class.run = run |
| 171 | |||
| 172 | # Create symlink to the current log | ||
| 173 | if os.path.islink(linkfile): | ||
| 174 | os.unlink(linkfile) | ||
| 175 | elif os.path.isfile(linkfile): | ||
| 176 | os.remove(linkfile) | ||
| 177 | os.symlink(logfile, linkfile) | ||
| 178 | |||
| 166 | return original_class | 179 | return original_class |
| 167 | 180 | ||
| 168 | class TimeOut(BaseException): | 181 | class TimeOut(BaseException): |
