You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
6.0 KiB
189 lines
6.0 KiB
#!/bin/sh |
|
|
|
test_description='test trace2 facility (normal target)' |
|
. ./test-lib.sh |
|
|
|
# Turn off any inherited trace2 settings for this test. |
|
sane_unset GIT_TRACE2 GIT_TRACE2_PERF GIT_TRACE2_EVENT |
|
sane_unset GIT_TRACE2_BRIEF |
|
sane_unset GIT_TRACE2_CONFIG_PARAMS |
|
|
|
# Add t/helper directory to PATH so that we can use a relative |
|
# path to run nested instances of test-tool.exe (see 004child). |
|
# This helps with HEREDOC comparisons later. |
|
TTDIR="$GIT_BUILD_DIR/t/helper/" && export TTDIR |
|
PATH="$TTDIR:$PATH" && export PATH |
|
|
|
# Warning: use of 'test_cmp' may run test-tool.exe and/or git.exe |
|
# Warning: to do the actual diff/comparison, so the HEREDOCs here |
|
# Warning: only cover our actual calls to test-tool and/or git. |
|
# Warning: So you may see extra lines in artifact files when |
|
# Warning: interactively debugging. |
|
|
|
V=$(git version | sed -e 's/^git version //') && export V |
|
|
|
# There are multiple trace2 targets: normal, perf, and event. |
|
# Trace2 events will/can be written to each active target (subject |
|
# to whatever filtering that target decides to do). |
|
# This script tests the normal target in isolation. |
|
# |
|
# Defer setting GIT_TRACE2 until the actual command line we want to test |
|
# because hidden git and test-tool commands run by the test harness |
|
# can contaminate our output. |
|
|
|
# Enable "brief" feature which turns off "<clock> <file>:<line> " prefix. |
|
GIT_TRACE2_BRIEF=1 && export GIT_TRACE2_BRIEF |
|
|
|
# Basic tests of the trace2 normal stream. Since this stream is used |
|
# primarily with printf-style debugging/tracing, we do limited testing |
|
# here. |
|
# |
|
# We do confirm the following API features: |
|
# [] the 'version <v>' event |
|
# [] the 'start <argv>' event |
|
# [] the 'cmd_name <name>' event |
|
# [] the 'exit <time> code:<code>' event |
|
# [] the 'atexit <time> code:<code>' event |
|
# |
|
# Fields of the form _FIELD_ are tokens that have been replaced (such |
|
# as the elapsed time). |
|
|
|
# Verb 001return |
|
# |
|
# Implicit return from cmd_<verb> function propagates <code>. |
|
|
|
test_expect_success 'normal stream, return code 0' ' |
|
test_when_finished "rm trace.normal actual expect" && |
|
GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 001return 0 && |
|
perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
|
cat >expect <<-EOF && |
|
version $V |
|
start _EXE_ trace2 001return 0 |
|
cmd_name trace2 (trace2) |
|
exit elapsed:_TIME_ code:0 |
|
atexit elapsed:_TIME_ code:0 |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'normal stream, return code 1' ' |
|
test_when_finished "rm trace.normal actual expect" && |
|
test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 001return 1 && |
|
perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
|
cat >expect <<-EOF && |
|
version $V |
|
start _EXE_ trace2 001return 1 |
|
cmd_name trace2 (trace2) |
|
exit elapsed:_TIME_ code:1 |
|
atexit elapsed:_TIME_ code:1 |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'automatic filename' ' |
|
test_when_finished "rm -r traces actual expect" && |
|
mkdir traces && |
|
GIT_TRACE2="$(pwd)/traces" test-tool trace2 001return 0 && |
|
perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <"$(ls traces/*)" >actual && |
|
cat >expect <<-EOF && |
|
version $V |
|
start _EXE_ trace2 001return 0 |
|
cmd_name trace2 (trace2) |
|
exit elapsed:_TIME_ code:0 |
|
atexit elapsed:_TIME_ code:0 |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
# Verb 002exit |
|
# |
|
# Explicit exit(code) from within cmd_<verb> propagates <code>. |
|
|
|
test_expect_success 'normal stream, exit code 0' ' |
|
test_when_finished "rm trace.normal actual expect" && |
|
GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 002exit 0 && |
|
perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
|
cat >expect <<-EOF && |
|
version $V |
|
start _EXE_ trace2 002exit 0 |
|
cmd_name trace2 (trace2) |
|
exit elapsed:_TIME_ code:0 |
|
atexit elapsed:_TIME_ code:0 |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'normal stream, exit code 1' ' |
|
test_when_finished "rm trace.normal actual expect" && |
|
test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 002exit 1 && |
|
perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
|
cat >expect <<-EOF && |
|
version $V |
|
start _EXE_ trace2 002exit 1 |
|
cmd_name trace2 (trace2) |
|
exit elapsed:_TIME_ code:1 |
|
atexit elapsed:_TIME_ code:1 |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
# Verb 003error |
|
# |
|
# To the above, add multiple 'error <msg>' events |
|
|
|
test_expect_success 'normal stream, error event' ' |
|
test_when_finished "rm trace.normal actual expect" && |
|
GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 003error "hello world" "this is a test" && |
|
perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
|
cat >expect <<-EOF && |
|
version $V |
|
start _EXE_ trace2 003error '\''hello world'\'' '\''this is a test'\'' |
|
cmd_name trace2 (trace2) |
|
error hello world |
|
error this is a test |
|
exit elapsed:_TIME_ code:0 |
|
atexit elapsed:_TIME_ code:0 |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
sane_unset GIT_TRACE2_BRIEF |
|
|
|
# Now test without environment variables and get all Trace2 settings |
|
# from the global config. |
|
|
|
test_expect_success 'using global config, normal stream, return code 0' ' |
|
test_when_finished "rm trace.normal actual expect" && |
|
test_config_global trace2.normalBrief 1 && |
|
test_config_global trace2.normalTarget "$(pwd)/trace.normal" && |
|
test-tool trace2 001return 0 && |
|
perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
|
cat >expect <<-EOF && |
|
version $V |
|
start _EXE_ trace2 001return 0 |
|
cmd_name trace2 (trace2) |
|
exit elapsed:_TIME_ code:0 |
|
atexit elapsed:_TIME_ code:0 |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'using global config with include' ' |
|
test_when_finished "rm trace.normal actual expect real.gitconfig" && |
|
test_config_global trace2.normalBrief 1 && |
|
test_config_global trace2.normalTarget "$(pwd)/trace.normal" && |
|
mv "$(pwd)/.gitconfig" "$(pwd)/real.gitconfig" && |
|
test_config_global include.path "$(pwd)/real.gitconfig" && |
|
test-tool trace2 001return 0 && |
|
perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
|
cat >expect <<-EOF && |
|
version $V |
|
start _EXE_ trace2 001return 0 |
|
cmd_name trace2 (trace2) |
|
exit elapsed:_TIME_ code:0 |
|
atexit elapsed:_TIME_ code:0 |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_done
|
|
|