mirror of
https://git.yoctoproject.org/poky
synced 2026-04-26 00:32:12 +02:00
oeqa/runtime/parselogs: load ignores from disk
Instead of hardcoding the list of ignored errors/warnings in the test itself, read them plain text files on disk. This uses importlib to try to open a file called oeqa.runtime.cases.parselogs-ignores-[candidate].txt, where the candidate will be: - "common" - The TARGET_ARCH - Each of the MACHINEOVERRDES This allows the common and tune-specific ignores to be retained in oe-core, and machine-specific ignores added to the layer where the machine is defined. [ YOCTO #14604 ] (From OE-Core rev: 7a04063f7cff243fe2bee09664ad7979612110cb) Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
66734b787a
commit
41ffa16912
@@ -6,6 +6,7 @@
|
||||
|
||||
import collections
|
||||
import os
|
||||
import sys
|
||||
|
||||
from shutil import rmtree
|
||||
from oeqa.runtime.case import OERuntimeTestCase
|
||||
@@ -190,6 +191,23 @@ ignore_errors = {
|
||||
] + common_errors,
|
||||
}
|
||||
|
||||
|
||||
# importlib.resources.open_text in Python <3.10 doesn't search all directories
|
||||
# when a package is split across multiple directories. Until we can rely on
|
||||
# 3.10+, reimplement the searching logic.
|
||||
if sys.version_info < (3, 10):
|
||||
def _open_text(package, resource):
|
||||
import importlib, pathlib
|
||||
module = importlib.import_module(package)
|
||||
for path in module.__path__:
|
||||
candidate = pathlib.Path(path) / resource
|
||||
if candidate.exists():
|
||||
return candidate.open(encoding='utf-8')
|
||||
raise FileNotFoundError
|
||||
else:
|
||||
from importlib.resources import open_text as _open_text
|
||||
|
||||
|
||||
class ParseLogsTest(OERuntimeTestCase):
|
||||
|
||||
# Which log files should be collected
|
||||
@@ -198,6 +216,9 @@ class ParseLogsTest(OERuntimeTestCase):
|
||||
# The keywords that identify error messages in the log files
|
||||
errors = ["error", "cannot", "can't", "failed"]
|
||||
|
||||
# A list of error messages that should be ignored
|
||||
ignore_errors = []
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
# When systemd is enabled we need to notice errors on
|
||||
@@ -212,11 +233,20 @@ class ParseLogsTest(OERuntimeTestCase):
|
||||
|
||||
cls.errors = [s.casefold() for s in cls.errors]
|
||||
|
||||
try:
|
||||
cls.ignore_errors = [s.casefold() for s in ignore_errors[cls.td.get('MACHINE')]]
|
||||
except KeyError:
|
||||
cls.logger.info('No ignore list found for this machine, using default')
|
||||
cls.ignore_errors = [s.casefold() for s in ignore_errors['default']]
|
||||
cls.load_machine_ignores()
|
||||
|
||||
@classmethod
|
||||
def load_machine_ignores(cls):
|
||||
# Add TARGET_ARCH explicitly as not every machine has that in MACHINEOVERRDES (eg qemux86-64)
|
||||
for candidate in ["common", cls.td.get("TARGET_ARCH")] + cls.td.get("MACHINEOVERRIDES").split(":"):
|
||||
try:
|
||||
name = f"parselogs-ignores-{candidate}.txt"
|
||||
for line in _open_text("oeqa.runtime.cases", name):
|
||||
line = line.strip()
|
||||
if line and not line.startswith("#"):
|
||||
cls.ignore_errors.append(line.casefold())
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
# Go through the log locations provided and if it's a folder
|
||||
# create a list with all the .log files in it, if it's a file
|
||||
|
||||
Reference in New Issue
Block a user