[PATCH v7 02/10] test-lib-functions: improve diagnostic output for trace2 data assertions
"Kristofer Karlsson via GitGitGadget" <[email protected]> Thu, 06 Aug 2026 10:59:33 +0000
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <57ecc0b18a53ac567c24d90288d75aee16eefc01.1786013982.git.gitgitgadget@gmail.com> |
From: Kristofer Karlsson <[email protected]> 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 <[email protected]> --- t/test-lib-functions.sh | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh index 809c662124..8c6d327b03 100644 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@ -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() { -- gitgitgadget