Files
poky/meta/lib/patchtest/selftest/selftest
Trevor Gamblin 71bf3fcf0f patchtest/selftest: add XSKIP, update test files
Since we are skipping the merge test, two of the selftests now report
SKIP instead of XPASS/XFAIL as expected. Adjust the two files to have
the right endings for XSKIP, and add the category so that it can be used
for more extensive testing in the future.

(From OE-Core rev: 3331f53c0be2575784a042bb2401eeba4f2a5a3e)

Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-10-25 23:10:19 +01:00

3.9 KiB
Executable File

#!/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)