[PATCH v5 02/10] test-lib-functions: improve diagnostic output for trace2 data assertions
- From
Kristofer Karlsson via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jul 1, 2026, 16:37 UTC
- Message-ID
- <143f5e0cc183bff1bbc5e9cfa65f456f615f4ad0.1782923832.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.2149.v5.git.1782923832.gitgitgadget@gmail.com>
From: Kristofer Karlsson <krka@spotify.com>
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: 0Signed-off-by: Kristofer Karlsson <krka@spotify.com> --- 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