summaryrefslogtreecommitdiffstats
path: root/scripts/patchtest
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/patchtest')
-rwxr-xr-xscripts/patchtest74
1 files changed, 43 insertions, 31 deletions
diff --git a/scripts/patchtest b/scripts/patchtest
index 0be7062dc2..9218db232a 100755
--- a/scripts/patchtest
+++ b/scripts/patchtest
@@ -9,12 +9,12 @@
9# SPDX-License-Identifier: GPL-2.0-only 9# SPDX-License-Identifier: GPL-2.0-only
10# 10#
11 11
12import sys 12import json
13import os
14import unittest
15import logging 13import logging
14import os
15import sys
16import traceback 16import traceback
17import json 17import unittest
18 18
19# Include current path so test cases can see it 19# Include current path so test cases can see it
20sys.path.insert(0, os.path.dirname(os.path.realpath(__file__))) 20sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
@@ -22,16 +22,17 @@ sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
22# Include patchtest library 22# Include patchtest library
23sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '../meta/lib/patchtest')) 23sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '../meta/lib/patchtest'))
24 24
25from data import PatchTestInput 25from patchtest_parser import PatchtestParser
26from repo import PatchTestRepo 26from repo import PatchTestRepo
27 27
28import utils 28logger = logging.getLogger("patchtest")
29logger = utils.logger_create('patchtest') 29loggerhandler = logging.StreamHandler()
30loggerhandler.setFormatter(logging.Formatter("%(message)s"))
31logger.addHandler(loggerhandler)
32logger.setLevel(logging.INFO)
30info = logger.info 33info = logger.info
31error = logger.error 34error = logger.error
32 35
33import repo
34
35def getResult(patch, mergepatch, logfile=None): 36def getResult(patch, mergepatch, logfile=None):
36 37
37 class PatchTestResult(unittest.TextTestResult): 38 class PatchTestResult(unittest.TextTestResult):
@@ -46,10 +47,10 @@ def getResult(patch, mergepatch, logfile=None):
46 def startTestRun(self): 47 def startTestRun(self):
47 # let's create the repo already, it can be used later on 48 # let's create the repo already, it can be used later on
48 repoargs = { 49 repoargs = {
49 'repodir': PatchTestInput.repodir, 50 "repodir": PatchtestParser.repodir,
50 'commit' : PatchTestInput.basecommit, 51 "commit": PatchtestParser.basecommit,
51 'branch' : PatchTestInput.basebranch, 52 "branch": PatchtestParser.basebranch,
52 'patch' : patch, 53 "patch": patch,
53 } 54 }
54 55
55 self.repo_error = False 56 self.repo_error = False
@@ -57,7 +58,7 @@ def getResult(patch, mergepatch, logfile=None):
57 self.test_failure = False 58 self.test_failure = False
58 59
59 try: 60 try:
60 self.repo = PatchTestInput.repo = PatchTestRepo(**repoargs) 61 self.repo = PatchtestParser.repo = PatchTestRepo(**repoargs)
61 except: 62 except:
62 logger.error(traceback.print_exc()) 63 logger.error(traceback.print_exc())
63 self.repo_error = True 64 self.repo_error = True
@@ -128,7 +129,11 @@ def _runner(resultklass, prefix=None):
128 loader.testMethodPrefix = prefix 129 loader.testMethodPrefix = prefix
129 130
130 # create the suite with discovered tests and the corresponding runner 131 # create the suite with discovered tests and the corresponding runner
131 suite = loader.discover(start_dir=PatchTestInput.testdir, pattern=PatchTestInput.pattern, top_level_dir=PatchTestInput.topdir) 132 suite = loader.discover(
133 start_dir=PatchtestParser.testdir,
134 pattern=PatchtestParser.pattern,
135 top_level_dir=PatchtestParser.topdir,
136 )
132 ntc = suite.countTestCases() 137 ntc = suite.countTestCases()
133 138
134 # if there are no test cases, just quit 139 # if there are no test cases, just quit
@@ -160,24 +165,31 @@ def run(patch, logfile=None):
160 postmerge_resultklass = getResult(patch, True, logfile) 165 postmerge_resultklass = getResult(patch, True, logfile)
161 postmerge_result = _runner(postmerge_resultklass, 'test') 166 postmerge_result = _runner(postmerge_resultklass, 'test')
162 167
163 print('----------------------------------------------------------------------\n') 168 print_result_message(premerge_result, postmerge_result)
164 if premerge_result == 2 and postmerge_result == 2:
165 logger.error('patchtest: No test cases found - did you specify the correct suite directory?')
166 if premerge_result == 1 or postmerge_result == 1:
167 logger.error('WARNING: patchtest: At least one patchtest caused a failure or an error - please check https://wiki.yoctoproject.org/wiki/Patchtest for further guidance')
168 else:
169 logger.info('OK: patchtest: All patchtests passed')
170 print('----------------------------------------------------------------------\n')
171 return premerge_result or postmerge_result 169 return premerge_result or postmerge_result
172 170
171def print_result_message(preresult, postresult):
172 print("----------------------------------------------------------------------\n")
173 if preresult == 2 and postresult == 2:
174 logger.error(
175 "patchtest: No test cases found - did you specify the correct suite directory?"
176 )
177 if preresult == 1 or postresult == 1:
178 logger.error(
179 "WARNING: patchtest: At least one patchtest caused a failure or an error - please check https://wiki.yoctoproject.org/wiki/Patchtest for further guidance"
180 )
181 else:
182 logger.info("OK: patchtest: All patchtests passed")
183 print("----------------------------------------------------------------------\n")
184
173def main(): 185def main():
174 tmp_patch = False 186 tmp_patch = False
175 patch_path = PatchTestInput.patch_path 187 patch_path = PatchtestParser.patch_path
176 log_results = PatchTestInput.log_results 188 log_results = PatchtestParser.log_results
177 log_path = None 189 log_path = None
178 patch_list = None 190 patch_list = None
179 191
180 git_status = os.popen("(cd %s && git status)" % PatchTestInput.repodir).read() 192 git_status = os.popen("(cd %s && git status)" % PatchtestParser.repodir).read()
181 status_matches = ["Changes not staged for commit", "Changes to be committed"] 193 status_matches = ["Changes not staged for commit", "Changes to be committed"]
182 if any([match in git_status for match in status_matches]): 194 if any([match in git_status for match in status_matches]):
183 logger.error("patchtest: there are uncommitted changes in the target repo that would be overwritten. Please commit or restore them before running patchtest") 195 logger.error("patchtest: there are uncommitted changes in the target repo that would be overwritten. Please commit or restore them before running patchtest")
@@ -212,16 +224,16 @@ def main():
212if __name__ == '__main__': 224if __name__ == '__main__':
213 ret = 1 225 ret = 1
214 226
215 # Parse the command line arguments and store it on the PatchTestInput namespace 227 # Parse the command line arguments and store it on the PatchtestParser namespace
216 PatchTestInput.set_namespace() 228 PatchtestParser.set_namespace()
217 229
218 # set debugging level 230 # set debugging level
219 if PatchTestInput.debug: 231 if PatchtestParser.debug:
220 logger.setLevel(logging.DEBUG) 232 logger.setLevel(logging.DEBUG)
221 233
222 # if topdir not define, default it to testdir 234 # if topdir not define, default it to testdir
223 if not PatchTestInput.topdir: 235 if not PatchtestParser.topdir:
224 PatchTestInput.topdir = PatchTestInput.testdir 236 PatchtestParser.topdir = PatchtestParser.testdir
225 237
226 try: 238 try:
227 ret = main() 239 ret = main()