From: Thomas Haller <thaller@redhat.com>
To: NetFilter <netfilter-devel@vger.kernel.org>
Cc: Thomas Haller <thaller@redhat.com>
Subject: [PATCH nft 03/11] tests/shell: colorize terminal output with test result
Date: Fri, 8 Sep 2023 00:07:15 +0200 [thread overview]
Message-ID: <20230907220833.2435010-4-thaller@redhat.com> (raw)
In-Reply-To: <20230907220833.2435010-1-thaller@redhat.com>
Colors help to see what is important.
It honors the common NO_COLOR=<anything> to disable coloring. It also
does not colorize, if [ -t 1 ] indicates that stdout is not a terminal.
Signed-off-by: Thomas Haller <thaller@redhat.com>
---
tests/shell/run-tests.sh | 71 ++++++++++++++++++++++++++++++++++------
1 file changed, 61 insertions(+), 10 deletions(-)
diff --git a/tests/shell/run-tests.sh b/tests/shell/run-tests.sh
index e0adb27ad104..c8688587bbc4 100755
--- a/tests/shell/run-tests.sh
+++ b/tests/shell/run-tests.sh
@@ -1,15 +1,26 @@
#!/bin/bash
+GREEN=""
+YELLOW=""
+RED=""
+RESET=""
+if [[ -t 1 && -z "$NO_COLOR" ]] ; then
+ GREEN=$'\e[32m'
+ YELLOW=$'\e[33m'
+ RED=$'\e[31m'
+ RESET=$'\e[0m'
+fi
+
_msg() {
local level="$1"
shift
- local msg
- msg="$level: $*"
- if [ "$level" = E -o "$level" = W ] ; then
- printf '%s\n' "$msg" >&2
+ if [ "$level" = E ] ; then
+ printf '%s\n' "$RED$level$RESET: $*" >&2
+ elif [ "$level" = W ] ; then
+ printf '%s\n' "$YELLOW$level$RESET: $*" >&2
else
- printf '%s\n' "$msg"
+ printf '%s\n' "$level: $*"
fi
if [ "$level" = E ] ; then
exit 1
@@ -28,6 +39,39 @@ msg_info() {
_msg I "$@"
}
+align_text() {
+ local _OUT_VARNAME="$1"
+ local _LEFT_OR_RIGHT="$2"
+ local _INDENT="$3"
+ shift 3
+ local _text="$*"
+ local _text_plain
+ local _text_align
+ local _text_result
+ local _i
+
+ # This function is needed, because "$text" might contain color escape
+ # sequences. A plain `printf '%12s' "$text"` will not align properly.
+
+ # strip escape sequences
+ _text_plain="${_text//$'\e['[0-9]m/}"
+ _text_plain="${_text_plain//$'\e['[0-9][0-9]m/}"
+
+ _text_align=""
+ for (( _i = "${#_text_plain}" ; "$_i" < "$_INDENT" ; _i++ )) ; do
+ _text_align="$_text_align "
+ done
+
+ if [ "$_LEFT_OR_RIGHT" = left ] ; then
+ _text_result="$(printf "%s$_text_align-" "$_text")"
+ else
+ _text_result="$(printf "$_text_align%s-" "$_text")"
+ fi
+ _text_result="${_text_result%-}"
+
+ eval "$_OUT_VARNAME=\"\$_text_result\""
+}
+
bool_n() {
case "$1" in
n|N|no|No|NO|0|false|False|FALSE)
@@ -459,8 +503,7 @@ print_test_header() {
local suffix="$4"
local text
- text="[$status]"
- text="$(printf '%-12s' "$text")"
+ align_text text left 12 "[$status]"
_msg "$msglevel" "$text $testfile${suffix:+: $suffix}"
}
@@ -477,10 +520,10 @@ print_test_result() {
if [ "$rc_got" -eq 0 ] ; then
((ok++))
- result_msg_status="OK"
+ result_msg_status="${GREEN}OK$RESET"
elif [ "$rc_got" -eq 77 ] ; then
((skipped++))
- result_msg_status="SKIPPED"
+ result_msg_status="${YELLOW}SKIPPED$RESET"
else
((failed++))
result_msg_level="W"
@@ -492,6 +535,7 @@ print_test_result() {
result_msg_status="FAILED"
result_msg_suffix="got $rc_got"
fi
+ result_msg_status="$RED$result_msg_status$RESET"
result_msg_files=( "$NFT_TEST_TESTTMPDIR/testout.log" )
fi
@@ -578,7 +622,14 @@ echo ""
kmemleak_found=0
check_kmemleak_force
-msg_info "results: [OK] $ok [SKIPPED] $skipped [FAILED] $failed [TOTAL] $((ok+skipped+failed))"
+if [ "$failed" -gt 0 ] ; then
+ RR="$RED"
+elif [ "$skipped" -gt 0 ] ; then
+ RR="$YELLOW"
+else
+ RR="$GREEN"
+fi
+msg_info "${RR}results$RESET: [OK] $GREEN$ok$RESET [SKIPPED] $YELLOW$skipped$RESET [FAILED] $RED$failed$RESET [TOTAL] $((ok+skipped+failed))"
kernel_cleanup
--
2.41.0
next prev parent reply other threads:[~2023-09-07 22:09 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-07 22:07 [PATCH nft 00/11] tests/shell: colorize output, fix VALGRIND mode Thomas Haller
2023-09-07 22:07 ` [PATCH nft 01/11] tests/shell: cleanup result handling in "test-wrapper.sh" Thomas Haller
2023-09-07 22:07 ` [PATCH nft 02/11] tests/shell: cleanup print_test_result() and show TAINTED error code Thomas Haller
2023-09-07 22:07 ` Thomas Haller [this message]
2023-09-07 22:07 ` [PATCH nft 04/11] tests/shell: fix handling failures with VALGRIND=y Thomas Haller
2023-09-07 22:07 ` [PATCH nft 05/11] tests/shell: print the NFT setting with the VALGRIND=y wrapper Thomas Haller
2023-09-07 22:07 ` [PATCH nft 06/11] tests/shell: don't redirect error/warning messages to stderr Thomas Haller
2023-09-07 22:07 ` [PATCH nft 07/11] tests/shell: redirect output of test script to file too Thomas Haller
2023-09-07 22:07 ` [PATCH nft 08/11] tests/shell: print "kernel is tainted" separate from test result Thomas Haller
2023-09-07 22:07 ` [PATCH nft 09/11] tests/shell: no longer enable verbose output when selecting a test Thomas Haller
2023-09-07 22:07 ` [PATCH nft 10/11] tests/shell: record wall time of test run in result data Thomas Haller
2023-09-07 22:07 ` [PATCH nft 11/11] tests/shell: set NFT_TEST_JOBS based on $(nproc) Thomas Haller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230907220833.2435010-4-thaller@redhat.com \
--to=thaller@redhat.com \
--cc=netfilter-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).