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 @@ | |||
1 | #!/usr/bin/env python3 | ||
2 | |||
3 | # Test every patch from files folder and output error on failure | ||
4 | # | ||
5 | # Copyright (C) 2016 Intel Corporation | ||
6 | # | ||
7 | # SPDX-License-Identifier: GPL-2.0-only | ||
8 | |||
9 | import os | ||
10 | import subprocess | ||
11 | import sys | ||
12 | |||
13 | currentdir = os.path.dirname(os.path.abspath(__file__)) | ||
14 | patchesdir = os.path.join(currentdir, 'files') | ||
15 | topdir = os.path.dirname(currentdir) | ||
16 | parentdir = os.path.dirname(topdir) | ||
17 | |||
18 | # path to the repo root | ||
19 | repodir = os.path.dirname(os.path.dirname(parentdir)) | ||
20 | |||
21 | def print_results(passcount, failcount, skipcount, xpasscount, xfailcount, xskipcount, errorcount): | ||
22 | total = passcount + skipcount + failcount + xpasscount + xfailcount + xskipcount + errorcount | ||
23 | print("============================================================================") | ||
24 | print("Testsuite summary for %s" % os.path.basename(topdir)) | ||
25 | print("============================================================================") | ||
26 | print("# TOTAL: %s" % str(total)) | ||
27 | print("# XPASS: %s" % str(xpasscount)) | ||
28 | print("# XFAIL: %s" % str(xfailcount)) | ||
29 | print("# XSKIP: %s" % str(xskipcount)) | ||
30 | print("# PASS: %s" % str(passcount)) | ||
31 | print("# FAIL: %s" % str(failcount)) | ||
32 | print("# SKIP: %s" % str(skipcount)) | ||
33 | print("# ERROR: %s" % str(errorcount)) | ||
34 | print("============================================================================") | ||
35 | |||
36 | # Once the tests are in oe-core, we can remove the testdir param and use os.path.dirname to get relative paths | ||
37 | def test(root, patch): | ||
38 | res = True | ||
39 | patchpath = os.path.abspath(os.path.join(root, patch)) | ||
40 | |||
41 | cmd = 'patchtest --repodir %s --testdir %s/tests --patch %s' % (repodir, topdir, patchpath) | ||
42 | results = subprocess.check_output(cmd, stderr=subprocess.STDOUT, universal_newlines=True, shell=True) | ||
43 | |||
44 | return results | ||
45 | |||
46 | if __name__ == '__main__': | ||
47 | passcount = 0 | ||
48 | failcount = 0 | ||
49 | skipcount = 0 | ||
50 | xpasscount = 0 | ||
51 | xfailcount = 0 | ||
52 | xskipcount = 0 | ||
53 | errorcount = 0 | ||
54 | |||
55 | results = None | ||
56 | |||
57 | for root, dirs, patches in os.walk(patchesdir): | ||
58 | for patch in patches: | ||
59 | results = test(root, patch) | ||
60 | |||
61 | a = patch.split('.') | ||
62 | klass, testname = a[0], a[1] | ||
63 | expected_result = a[-1] | ||
64 | testid = ".%s.%s" % (klass,testname) | ||
65 | |||
66 | for resultline in results.splitlines(): | ||
67 | if testid in resultline: | ||
68 | result, _ = resultline.split(':', 1) | ||
69 | |||
70 | if expected_result.upper() == "FAIL" and result.upper() == "FAIL": | ||
71 | xfailcount = xfailcount + 1 | ||
72 | print("XFAIL: %s (file: %s)" % (testid.strip("."), os.path.basename(patch))) | ||
73 | elif expected_result.upper() == "PASS" and result.upper() == "PASS": | ||
74 | xpasscount = xpasscount + 1 | ||
75 | print("XPASS: %s (file: %s)" % (testid.strip("."), os.path.basename(patch))) | ||
76 | elif expected_result.upper() == "SKIP" and result.upper() == "SKIP": | ||
77 | xskipcount = xskipcount + 1 | ||
78 | print("XSKIP: %s (file: %s)" % (testid.strip("."), os.path.basename(patch))) | ||
79 | else: | ||
80 | print("%s: %s (%s)" % (result.upper(), testid.strip("."), os.path.basename(patch))) | ||
81 | if result.upper() == "PASS": | ||
82 | passcount = passcount + 1 | ||
83 | elif result.upper() == "FAIL": | ||
84 | failcount = failcount + 1 | ||
85 | elif result.upper() == "SKIP": | ||
86 | skipcount = skipcount + 1 | ||
87 | else: | ||
88 | print("Bad result on test %s against %s" % (testid.strip("."), os.path.basename(patch))) | ||
89 | errorcount = errorcount + 1 | ||
90 | break | ||
91 | else: | ||
92 | print ("No test for=%s" % patch) | ||
93 | |||
94 | print_results(passcount, failcount, skipcount, xpasscount, xfailcount, xskipcount, errorcount) | ||