summaryrefslogtreecommitdiffstats
path: root/meta/lib/patchtest/selftest/selftest
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/patchtest/selftest/selftest')
-rwxr-xr-xmeta/lib/patchtest/selftest/selftest94
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
9import os
10import subprocess
11import sys
12
13currentdir = os.path.dirname(os.path.abspath(__file__))
14patchesdir = os.path.join(currentdir, 'files')
15topdir = os.path.dirname(currentdir)
16parentdir = os.path.dirname(topdir)
17
18# path to the repo root
19repodir = os.path.dirname(os.path.dirname(parentdir))
20
21def 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
37def 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
46if __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)