Files
poky/meta/lib/patchtest/selftest/selftest
Alexander Kanavin 4ed3c83240 patchtest: use HEAD commit as base for the selftest and not master
Patchtest applies patches on top of poky master branch by default;
this means selftest does the same, and any commits from the branch-under-test
are then discarded.

This can cause issues for example, if bitbake-server process started by selftest
from the master branch tries to parse bitbake.conf from the branch under test:
https://valkyrie.yoctoproject.org/#/builders/71/builds/460

(From OE-Core rev: 03c6b2e0277c00faf55c12c4d0b4b5e3a4898f8c)

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2024-11-19 12:54:32 +00: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 --base-commit HEAD --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)