@leroysheep / CrazyWebTemps / commits / e694501891

test-lib-functions: improve diagnostic output for trace2 data assertions

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 <krka@spotify.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Kristofer Karlsson committed Jul 11, 2026 at 13:27 UTC e69450189128ae285871bd821f78c71e9f729599
1 file changed +36
t/test-lib-functions.sh
+36
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() {