diff options
Diffstat (limited to 'meta/lib/patchtest/selftest/selftest')
-rwxr-xr-x | meta/lib/patchtest/selftest/selftest | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/meta/lib/patchtest/selftest/selftest b/meta/lib/patchtest/selftest/selftest new file mode 100755 index 0000000000..6fad50ce61 --- /dev/null +++ b/meta/lib/patchtest/selftest/selftest @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 + +# Test every patch from files folder and output error on failure +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0-only + +import os +import subprocess +import sys + +currentdir = os.path.dirname(os.path.abspath(__file__)) +patchesdir = os.path.join(currentdir, 'files') +topdir = os.path.dirname(currentdir) +parentdir = os.path.dirname(topdir) + +# path to the repo root +repodir = os.path.dirname(os.path.dirname(parentdir)) + +def print_results(passcount, failcount, skipcount, xpasscount, xfailcount, xskipcount, errorcount): + total = passcount + skipcount + failcount + xpasscount + xfailcount + xskipcount + errorcount + print("============================================================================") + print("Testsuite summary for %s" % os.path.basename(topdir)) + print("============================================================================") + print("# TOTAL: %s" % str(total)) + print("# XPASS: %s" % str(xpasscount)) + print("# XFAIL: %s" % str(xfailcount)) + print("# XSKIP: %s" % str(xskipcount)) + print("# PASS: %s" % str(passcount)) + print("# FAIL: %s" % str(failcount)) + print("# SKIP: %s" % str(skipcount)) + print("# ERROR: %s" % str(errorcount)) + print("============================================================================") + +# Once the tests are in oe-core, we can remove the testdir param and use os.path.dirname to get relative paths +def test(root, patch): + res = True + patchpath = os.path.abspath(os.path.join(root, patch)) + + cmd = 'patchtest --repodir %s --testdir %s/tests --patch %s' % (repodir, topdir, patchpath) + results = subprocess.check_output(cmd, stderr=subprocess.STDOUT, universal_newlines=True, shell=True) + + return results + +if __name__ == '__main__': + passcount = 0 + failcount = 0 + skipcount = 0 + xpasscount = 0 + xfailcount = 0 + xskipcount = 0 + errorcount = 0 + + results = None + + for root, dirs, patches in os.walk(patchesdir): + for patch in patches: + results = test(root, patch) + + a = patch.split('.') + klass, testname = a[0], a[1] + expected_result = a[-1] + testid = ".%s.%s" % (klass,testname) + + for resultline in results.splitlines(): + if testid in resultline: + result, _ = resultline.split(':', 1) + + if expected_result.upper() == "FAIL" and result.upper() == "FAIL": + xfailcount = xfailcount + 1 + print("XFAIL: %s (file: %s)" % (testid.strip("."), os.path.basename(patch))) + elif expected_result.upper() == "PASS" and result.upper() == "PASS": + xpasscount = xpasscount + 1 + print("XPASS: %s (file: %s)" % (testid.strip("."), os.path.basename(patch))) + elif expected_result.upper() == "SKIP" and result.upper() == "SKIP": + xskipcount = xskipcount + 1 + print("XSKIP: %s (file: %s)" % (testid.strip("."), os.path.basename(patch))) + else: + print("%s: %s (%s)" % (result.upper(), testid.strip("."), os.path.basename(patch))) + if result.upper() == "PASS": + passcount = passcount + 1 + elif result.upper() == "FAIL": + failcount = failcount + 1 + elif result.upper() == "SKIP": + skipcount = skipcount + 1 + else: + print("Bad result on test %s against %s" % (testid.strip("."), os.path.basename(patch))) + errorcount = errorcount + 1 + break + else: + print ("No test for=%s" % patch) + + print_results(passcount, failcount, skipcount, xpasscount, xfailcount, xskipcount, errorcount) |