From: Jakub Kicinski Date: Thu, 2 Apr 2026 21:54:44 +0000 (-0700) Subject: selftests: net: py: color the basics in the output X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3b45559f6c0af0eaf8a91dfc1037a423337cf21d;p=thirdparty%2Fkernel%2Flinux.git selftests: net: py: color the basics in the output Sometimes it's hard to spot the ok / not ok lines in the output. This is especially true for the GRO tests which retries a lot so there's a wall of non-fatal output printed. Try to color the crucial lines green / red / yellow when running in a terminal. Acked-by: Stanislav Fomichev Reviewed-by: Willem de Bruijn Acked-by: Joe Damato Link: https://patch.msgid.link/20260402215444.1589893-1-kuba@kernel.org Signed-off-by: Jakub Kicinski --- diff --git a/tools/testing/selftests/net/lib/py/ksft.py b/tools/testing/selftests/net/lib/py/ksft.py index 6cdfb8afccb56..7b8af463e35d2 100644 --- a/tools/testing/selftests/net/lib/py/ksft.py +++ b/tools/testing/selftests/net/lib/py/ksft.py @@ -2,6 +2,7 @@ import functools import inspect +import os import signal import sys import time @@ -31,6 +32,17 @@ class KsftTerminate(KeyboardInterrupt): pass +@functools.lru_cache() +def _ksft_supports_color(): + if os.environ.get("NO_COLOR") is not None: + return False + if not hasattr(sys.stdout, "isatty") or not sys.stdout.isatty(): + return False + if os.environ.get("TERM") == "dumb": + return False + return True + + def ksft_pr(*objs, **kwargs): """ Print logs to stdout. @@ -165,6 +177,14 @@ def ktap_result(ok, cnt=1, case_name="", comment=""): res += "." + case_name if comment: res += " # " + comment + if _ksft_supports_color(): + if comment.startswith(("SKIP", "XFAIL")): + color = "\033[33m" + elif ok: + color = "\033[32m" + else: + color = "\033[31m" + res = color + res + "\033[0m" print(res, flush=True)