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>
This commit is contained in:
Kristofer Karlsson
2026-08-06 10:59:33 +00:00
committed by Junio C Hamano
parent d159b47a03
commit 2a980753f3

View File

@@ -1996,6 +1996,41 @@ 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
*"$LF"*)
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() {