]>
Commit | Line | Data |
---|---|---|
a15860dc JH |
1 | #!/bin/sh |
2 | ||
3 | test_description='test trace2 facility (normal target)' | |
4 | . ./test-lib.sh | |
5 | ||
bce9db6d | 6 | # Turn off any inherited trace2 settings for this test. |
e4b75d6a SG |
7 | sane_unset GIT_TRACE2 GIT_TRACE2_PERF GIT_TRACE2_EVENT |
8 | sane_unset GIT_TRACE2_BRIEF | |
9 | sane_unset GIT_TRACE2_CONFIG_PARAMS | |
bce9db6d | 10 | |
a15860dc JH |
11 | # Add t/helper directory to PATH so that we can use a relative |
12 | # path to run nested instances of test-tool.exe (see 004child). | |
13 | # This helps with HEREDOC comparisons later. | |
14 | TTDIR="$GIT_BUILD_DIR/t/helper/" && export TTDIR | |
15 | PATH="$TTDIR:$PATH" && export PATH | |
16 | ||
17 | # Warning: use of 'test_cmp' may run test-tool.exe and/or git.exe | |
18 | # Warning: to do the actual diff/comparison, so the HEREDOCs here | |
19 | # Warning: only cover our actual calls to test-tool and/or git. | |
20 | # Warning: So you may see extra lines in artifact files when | |
21 | # Warning: interactively debugging. | |
22 | ||
a15860dc JH |
23 | V=$(git version | sed -e 's/^git version //') && export V |
24 | ||
25 | # There are multiple trace2 targets: normal, perf, and event. | |
26 | # Trace2 events will/can be written to each active target (subject | |
27 | # to whatever filtering that target decides to do). | |
28 | # This script tests the normal target in isolation. | |
29 | # | |
e4b75d6a | 30 | # Defer setting GIT_TRACE2 until the actual command line we want to test |
a15860dc JH |
31 | # because hidden git and test-tool commands run by the test harness |
32 | # can contaminate our output. | |
33 | ||
34 | # Enable "brief" feature which turns off "<clock> <file>:<line> " prefix. | |
e4b75d6a | 35 | GIT_TRACE2_BRIEF=1 && export GIT_TRACE2_BRIEF |
a15860dc JH |
36 | |
37 | # Basic tests of the trace2 normal stream. Since this stream is used | |
38 | # primarily with printf-style debugging/tracing, we do limited testing | |
39 | # here. | |
40 | # | |
41 | # We do confirm the following API features: | |
42 | # [] the 'version <v>' event | |
43 | # [] the 'start <argv>' event | |
44 | # [] the 'cmd_name <name>' event | |
45 | # [] the 'exit <time> code:<code>' event | |
46 | # [] the 'atexit <time> code:<code>' event | |
47 | # | |
48 | # Fields of the form _FIELD_ are tokens that have been replaced (such | |
49 | # as the elapsed time). | |
50 | ||
51 | # Verb 001return | |
52 | # | |
53 | # Implicit return from cmd_<verb> function propagates <code>. | |
54 | ||
55 | test_expect_success 'normal stream, return code 0' ' | |
56 | test_when_finished "rm trace.normal actual expect" && | |
e4b75d6a | 57 | GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 001return 0 && |
a15860dc JH |
58 | perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
59 | cat >expect <<-EOF && | |
60 | version $V | |
61 | start _EXE_ trace2 001return 0 | |
62 | cmd_name trace2 (trace2) | |
63 | exit elapsed:_TIME_ code:0 | |
64 | atexit elapsed:_TIME_ code:0 | |
65 | EOF | |
66 | test_cmp expect actual | |
67 | ' | |
68 | ||
69 | test_expect_success 'normal stream, return code 1' ' | |
70 | test_when_finished "rm trace.normal actual expect" && | |
e4b75d6a | 71 | test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 001return 1 && |
a15860dc JH |
72 | perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
73 | cat >expect <<-EOF && | |
74 | version $V | |
75 | start _EXE_ trace2 001return 1 | |
76 | cmd_name trace2 (trace2) | |
77 | exit elapsed:_TIME_ code:1 | |
78 | atexit elapsed:_TIME_ code:1 | |
79 | EOF | |
80 | test_cmp expect actual | |
81 | ' | |
82 | ||
a4d3a283 JS |
83 | test_expect_success 'automatic filename' ' |
84 | test_when_finished "rm -r traces actual expect" && | |
85 | mkdir traces && | |
e4b75d6a | 86 | GIT_TRACE2="$(pwd)/traces" test-tool trace2 001return 0 && |
a4d3a283 JS |
87 | perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <"$(ls traces/*)" >actual && |
88 | cat >expect <<-EOF && | |
89 | version $V | |
90 | start _EXE_ trace2 001return 0 | |
91 | cmd_name trace2 (trace2) | |
92 | exit elapsed:_TIME_ code:0 | |
93 | atexit elapsed:_TIME_ code:0 | |
94 | EOF | |
95 | test_cmp expect actual | |
96 | ' | |
97 | ||
a15860dc JH |
98 | # Verb 002exit |
99 | # | |
100 | # Explicit exit(code) from within cmd_<verb> propagates <code>. | |
101 | ||
102 | test_expect_success 'normal stream, exit code 0' ' | |
103 | test_when_finished "rm trace.normal actual expect" && | |
e4b75d6a | 104 | GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 002exit 0 && |
a15860dc JH |
105 | perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
106 | cat >expect <<-EOF && | |
107 | version $V | |
108 | start _EXE_ trace2 002exit 0 | |
109 | cmd_name trace2 (trace2) | |
110 | exit elapsed:_TIME_ code:0 | |
111 | atexit elapsed:_TIME_ code:0 | |
112 | EOF | |
113 | test_cmp expect actual | |
114 | ' | |
115 | ||
116 | test_expect_success 'normal stream, exit code 1' ' | |
117 | test_when_finished "rm trace.normal actual expect" && | |
e4b75d6a | 118 | test_must_fail env GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 002exit 1 && |
a15860dc JH |
119 | perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
120 | cat >expect <<-EOF && | |
121 | version $V | |
122 | start _EXE_ trace2 002exit 1 | |
123 | cmd_name trace2 (trace2) | |
124 | exit elapsed:_TIME_ code:1 | |
125 | atexit elapsed:_TIME_ code:1 | |
126 | EOF | |
127 | test_cmp expect actual | |
128 | ' | |
129 | ||
130 | # Verb 003error | |
131 | # | |
132 | # To the above, add multiple 'error <msg>' events | |
133 | ||
134 | test_expect_success 'normal stream, error event' ' | |
135 | test_when_finished "rm trace.normal actual expect" && | |
e4b75d6a | 136 | GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 003error "hello world" "this is a test" && |
a15860dc JH |
137 | perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && |
138 | cat >expect <<-EOF && | |
139 | version $V | |
140 | start _EXE_ trace2 003error '\''hello world'\'' '\''this is a test'\'' | |
141 | cmd_name trace2 (trace2) | |
142 | error hello world | |
143 | error this is a test | |
144 | exit elapsed:_TIME_ code:0 | |
145 | atexit elapsed:_TIME_ code:0 | |
146 | EOF | |
147 | test_cmp expect actual | |
148 | ' | |
149 | ||
e4b75d6a | 150 | sane_unset GIT_TRACE2_BRIEF |
bce9db6d JH |
151 | |
152 | # Now test without environment variables and get all Trace2 settings | |
153 | # from the global config. | |
154 | ||
155 | test_expect_success 'using global config, normal stream, return code 0' ' | |
156 | test_when_finished "rm trace.normal actual expect" && | |
157 | test_config_global trace2.normalBrief 1 && | |
158 | test_config_global trace2.normalTarget "$(pwd)/trace.normal" && | |
159 | test-tool trace2 001return 0 && | |
160 | perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && | |
161 | cat >expect <<-EOF && | |
162 | version $V | |
163 | start _EXE_ trace2 001return 0 | |
164 | cmd_name trace2 (trace2) | |
165 | exit elapsed:_TIME_ code:0 | |
166 | atexit elapsed:_TIME_ code:0 | |
167 | EOF | |
168 | test_cmp expect actual | |
169 | ' | |
170 | ||
171 | test_expect_success 'using global config with include' ' | |
172 | test_when_finished "rm trace.normal actual expect real.gitconfig" && | |
173 | test_config_global trace2.normalBrief 1 && | |
174 | test_config_global trace2.normalTarget "$(pwd)/trace.normal" && | |
175 | mv "$(pwd)/.gitconfig" "$(pwd)/real.gitconfig" && | |
176 | test_config_global include.path "$(pwd)/real.gitconfig" && | |
177 | test-tool trace2 001return 0 && | |
178 | perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual && | |
179 | cat >expect <<-EOF && | |
180 | version $V | |
181 | start _EXE_ trace2 001return 0 | |
182 | cmd_name trace2 (trace2) | |
183 | exit elapsed:_TIME_ code:0 | |
184 | atexit elapsed:_TIME_ code:0 | |
185 | EOF | |
186 | test_cmp expect actual | |
187 | ' | |
188 | ||
a15860dc | 189 | test_done |