[PATCH v5 02/10] test-lib-functions: improve diagnostic output for trace2 data assertions
From: Kristofer Karlsson via GitGitGadget <hidden>
Date: 2026-07-01 16:37:18
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Kristofer Karlsson <redacted>
test_trace2_data is a bare grep that silently exits on failure.
Add a more informative variant that verifies the event appears
exactly once and reports what went wrong: key not found, multiple
entries, or value mismatch. Diagnostics go to FD 4 like test_grep.
Before (value mismatch):
$ test_trace2_data status count/changed 999 <trace2.txt
$ echo $?
1
(no output)
After:
$ test_trace2_data_singular status count/changed 999 <trace2.txt
error: trace2 data 'status/count/changed'
expected: 999
actual: 0
Signed-off-by: Kristofer Karlsson <redacted>
---
t/test-lib-functions.sh | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 809c662124..3521efe5d7 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh@@ -1996,6 +1996,42 @@ test_trace2_data () { grep -e '"category":"'"$1"'","key":"'"$2"'","value":"'"$3"'"' } +# Check that the given trace2 data event has the expected value and +# appears exactly once. Produces a diagnostic on failure. +# +# test_trace2_data_singular <category> <key> <value> [<label>] +test_trace2_data_singular () { + local category="$1" key="$2" expect_val="$3" + local label_suffix="${4:+ [$4]}" + local kv_pattern='"category":"'"$category"'","key":"'"$key"'","value":"\([^"]*\)"' + local actual + + actual=$(sed -n "s|.*${kv_pattern}.*|\1|p") && + + if test -z "$actual" + then + echo >&4 "error: trace2 data '$category/$key'$label_suffix not found" + return 1 + fi && + + case "$actual" in + *" +"*) + echo >&4 "error: trace2 data '$category/$key'$label_suffix has multiple entries, expected 1" + printf '%s\n' "$actual" | sed 's/^/ actual: /' >&4 + return 1 + ;; + esac && + + if test "$actual" != "$expect_val" + then + echo >&4 "error: trace2 data '$category/$key'$label_suffix" + echo >&4 " expected: $expect_val" + echo >&4 " actual: $actual" + return 1 + fi +} + # Given a GIT_TRACE2_EVENT log over stdin, writes to stdout a list of URLs # sent to git-remote-https child processes. test_remote_https_urls() {
--
gitgitgadget