Commit | Line | Data |
---|---|---|
01654d69 JR |
1 | #!/bin/bash |
2 | # | |
4942c256 | 3 | # Copyright (C) 2019 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> |
01654d69 | 4 | # |
9d16b343 MJ |
5 | # SPDX-License-Identifier: LGPL-2.1-only |
6 | ||
01654d69 JR |
7 | TEST_DESC="Metadata env - User space tracing" |
8 | ||
9 | CURDIR=$(dirname "$0")/ | |
10 | TESTDIR=$CURDIR/../../.. | |
11 | TESTAPP_PATH="$TESTDIR/utils/testapp" | |
12 | TESTAPP_NAME="gen-ust-events" | |
13 | TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" | |
14 | EVENT_NAME="tp:tptest" | |
15 | ||
8d5a3312 | 16 | TRACE_PATH=$(mktemp -d -t tmp.test_metadata_env_ust_trace_path.XXXXXX) |
01654d69 JR |
17 | |
18 | NUM_TESTS=37 | |
19 | ||
20 | NR_ITER=10 | |
21 | NR_USEC_WAIT=0 | |
22 | ||
23 | source "$TESTDIR/utils/utils.sh" | |
24 | ||
25 | # Fetch utils functions common to ust and kernel tests. | |
26 | source "$CURDIR/utils.sh" | |
27 | ||
28 | if [ ! -x "$TESTAPP_BIN" ]; then | |
29 | BAIL_OUT "No UST events binary detected." | |
30 | fi | |
31 | ||
32 | function test_per_uid () | |
33 | { | |
01654d69 | 34 | local metadata_path |
b7a2f86d MJ |
35 | local metadata |
36 | local metadata_env | |
01654d69 JR |
37 | |
38 | local expected_path="${TRACE_PATH}/lttng-traces" | |
39 | local session_name="per-uid" | |
b7a2f86d MJ |
40 | |
41 | metadata=$(mktemp -t tmp.test_per_uid_metadata.XXXXXX) | |
42 | metadata_env=$(mktemp -t tmp.test_per_uid_metadata_env.XXXXXX) | |
01654d69 JR |
43 | |
44 | diag "Test UST metadata env field in per-uid mode" | |
45 | create_lttng_session_ok "$session_name" | |
46 | enable_ust_lttng_event_ok "$session_name" $EVENT_NAME | |
47 | start_lttng_tracing_ok "$session_name" | |
48 | ||
6c4a91d6 | 49 | $TESTAPP_BIN -i $NR_ITER |
01654d69 JR |
50 | |
51 | stop_lttng_tracing_ok "$session_name" | |
52 | destroy_lttng_session_ok "$session_name" | |
53 | ||
54 | # bt1 accepts only a directory while bt2 accepts either the metadata | |
55 | # file directly or a directory with an immediate metadata file. | |
56 | # Settle for the common denominator. | |
fc2dd19e | 57 | metadata_path=$(find "${expected_path}/${session_name}"* -name "metadata") |
01654d69 JR |
58 | metadata_path=$(dirname "$metadata_path") |
59 | ||
60 | $BABELTRACE_BIN --output-format=ctf-metadata "${metadata_path}" > "$metadata" | |
61 | ||
62 | # Extract "env" scope | |
63 | awk '/env {/,/};/' < "$metadata" > "$metadata_env" | |
64 | ||
65 | # Construct the expected path from the env metadata and use it to | |
66 | # validate that all information make sense. This information is present | |
67 | # to allow trace viewer to recreate the same directory hierarchy. | |
68 | ||
69 | # Trace name | |
b7a2f86d MJ |
70 | local trace_name |
71 | trace_name=$(get_env_value "$metadata_env" trace_name) | |
72 | ok $? "Extracting trace_name from env metadata: \`$trace_name\`" | |
73 | expected_path="${expected_path}/${trace_name}" | |
01654d69 JR |
74 | |
75 | # Session creation time | |
b7a2f86d MJ |
76 | local trace_creation_datetime |
77 | trace_creation_datetime=$(get_env_value "$metadata_env" trace_creation_datetime) | |
78 | ok $? "Extracting trace_creation_datetime from env metadata: \`$trace_creation_datetime\`" | |
79 | trace_creation_datetime=$(iso8601_to_lttng_dir_datetime "$trace_creation_datetime") | |
80 | expected_path="${expected_path}-${trace_creation_datetime}" | |
01654d69 JR |
81 | |
82 | # Domain | |
b7a2f86d MJ |
83 | local domain |
84 | domain=$(get_env_value "$metadata_env" domain) | |
85 | ok $? "Extracting domain from env metadata: \`$domain\`" | |
86 | expected_path="${expected_path}/${domain}" | |
01654d69 JR |
87 | |
88 | # Buffering scheme | |
b7a2f86d MJ |
89 | local tracer_buffering_scheme |
90 | tracer_buffering_scheme=$(get_env_value "$metadata_env" tracer_buffering_scheme) | |
91 | ok $? "Extracting tracer_buffering_scheme from env metadata: \`$tracer_buffering_scheme\`" | |
92 | expected_path="${expected_path}/${tracer_buffering_scheme}" | |
01654d69 JR |
93 | |
94 | # tracer_buffering_id | |
b7a2f86d MJ |
95 | local tracer_buffering_id |
96 | tracer_buffering_id=$(get_env_value "$metadata_env" tracer_buffering_id) | |
97 | ok $? "Extracting tracer_buffering_id from env metadata: \`$tracer_buffering_id\`" | |
98 | expected_path="${expected_path}/${tracer_buffering_id}" | |
01654d69 JR |
99 | |
100 | # Check that the uid is the one we expect from the current user | |
b7a2f86d | 101 | is "$tracer_buffering_id" "$(id -u)" "tracer_buffering_id match current user uid: \`$tracer_buffering_id\`" |
01654d69 JR |
102 | |
103 | # Architecture_bit_width | |
b7a2f86d MJ |
104 | local architecture_bit_width |
105 | architecture_bit_width=$(get_env_value "$metadata_env" architecture_bit_width) | |
106 | ok $? "Extracting architecture_bit_width from env metadata: \`$architecture_bit_width\`" | |
107 | expected_path="${expected_path}/${architecture_bit_width}-bit" | |
01654d69 JR |
108 | |
109 | # Append "metadata" and test that we find the file. | |
110 | expected_path="${expected_path}/metadata" | |
111 | ||
b7a2f86d MJ |
112 | test -f "$expected_path" |
113 | ok $? "Reconstructed path from metadata is an existing file: \`$expected_path\`" | |
01654d69 JR |
114 | |
115 | # Hostname | |
116 | # The hostname is not part of the lttng hierarchy still we can test for | |
117 | # its validity here. | |
b7a2f86d MJ |
118 | local hostname |
119 | hostname=$(get_env_value "$metadata_env" hostname) | |
120 | ok $? "Extracting hostname from env metadata: \`$hostname\`" | |
121 | is "$hostname" "$(hostname)" "Extracted hostname matches current hostname" | |
01654d69 JR |
122 | |
123 | rm -f "$metadata" | |
124 | rm -f "$metadata_env" | |
125 | } | |
126 | ||
127 | function test_per_pid () | |
128 | { | |
01654d69 | 129 | local metadata_path |
b7a2f86d MJ |
130 | local metadata |
131 | local metadata_env | |
01654d69 | 132 | local testapp_pid |
01654d69 JR |
133 | |
134 | local expected_path="${TRACE_PATH}/lttng-traces" | |
135 | local session_name="per-pid" | |
b7a2f86d MJ |
136 | |
137 | metadata=$(mktemp -t tmp.test_per_pid_metadata.XXXXXX) | |
138 | metadata_env=$(mktemp -t tmp.test_per_pid_metadata_env.XXXXXX) | |
01654d69 JR |
139 | |
140 | diag "Test UST metadata env field in per-pid mode" | |
141 | create_lttng_session_ok "$session_name" | |
142 | enable_ust_lttng_channel_ok "$session_name" channel "--buffers-pid" | |
143 | enable_ust_lttng_event_ok "$session_name" $EVENT_NAME channel | |
144 | start_lttng_tracing_ok "$session_name" | |
145 | ||
6c4a91d6 | 146 | $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT & |
01654d69 JR |
147 | testapp_pid=$! |
148 | wait $testapp_pid | |
149 | ||
150 | stop_lttng_tracing_ok "$session_name" | |
151 | destroy_lttng_session_ok "$session_name" | |
152 | ||
153 | # bt1 accepts only a directory while bt2 accepts either the metadata | |
154 | # file directly or a directory with an immediate metadata file. | |
155 | # Settle for the common denominator. | |
fc2dd19e | 156 | metadata_path=$(find "${expected_path}/${session_name}"* -name "metadata") |
01654d69 JR |
157 | metadata_path=$(dirname "$metadata_path") |
158 | ||
159 | $BABELTRACE_BIN --output-format=ctf-metadata "${metadata_path}" 1> "$metadata" | |
160 | ||
161 | # Extract "env" scope | |
162 | awk '/env {/,/};/' < "$metadata" > "$metadata_env" | |
163 | ||
164 | # Construct the expected path from the env metadata and use it to | |
165 | # validate that all information make sense. This information is present | |
166 | # to allow trace viewer to recreate the same directory hierarchy. | |
167 | ||
168 | # Trace name | |
b7a2f86d MJ |
169 | local trace_name |
170 | trace_name=$(get_env_value "$metadata_env" trace_name) | |
171 | ok $? "Extracting trace_name from env metadata: \`$trace_name\`" | |
172 | expected_path="${expected_path}/${trace_name}" | |
01654d69 JR |
173 | |
174 | # Session creation time | |
b7a2f86d MJ |
175 | local trace_creation_datetime |
176 | trace_creation_datetime=$(get_env_value "$metadata_env" trace_creation_datetime) | |
177 | ok $? "Extracting trace_creation_datetime from env metadata: \`$trace_creation_datetime\`" | |
178 | trace_creation_datetime=$(iso8601_to_lttng_dir_datetime "$trace_creation_datetime") | |
179 | expected_path="${expected_path}-${trace_creation_datetime}" | |
01654d69 JR |
180 | |
181 | # Domain | |
b7a2f86d MJ |
182 | local domain |
183 | domain=$(get_env_value "$metadata_env" domain) | |
184 | ok $? "Extracting domain from env metadata: \`$domain\`" | |
185 | expected_path="${expected_path}/${domain}" | |
01654d69 JR |
186 | |
187 | # Buffering scheme | |
b7a2f86d MJ |
188 | local tracer_buffering_scheme |
189 | tracer_buffering_scheme=$(get_env_value "$metadata_env" tracer_buffering_scheme) | |
190 | ok $? "Extracting tracer_buffering_scheme from env metadata: \`$tracer_buffering_scheme\`" | |
191 | expected_path="${expected_path}/${tracer_buffering_scheme}" | |
01654d69 JR |
192 | |
193 | # Procname | |
b7a2f86d MJ |
194 | local procname |
195 | procname=$(get_env_value "$metadata_env" procname) | |
196 | ok $? "Extracting procname from env metadata: \`$procname\`" | |
197 | expected_path="${expected_path}/${procname}" | |
01654d69 JR |
198 | |
199 | # vpid and tracer_buffering_id should be the same here. | |
b7a2f86d MJ |
200 | local vpid |
201 | vpid=$(get_env_value "$metadata_env" "vpid") | |
202 | ok $? "Extracting vpid from env metadata: \`$vpid\`" | |
01654d69 | 203 | |
b7a2f86d MJ |
204 | local tracer_buffering_id |
205 | tracer_buffering_id=$(get_env_value "$metadata_env" tracer_buffering_id) | |
206 | ok $? "Extracting tracer_buffering_id from env metadata: \`$tracer_buffering_id\`" | |
207 | expected_path="${expected_path}-${tracer_buffering_id}" | |
01654d69 | 208 | |
b7a2f86d MJ |
209 | is "$vpid" "$tracer_buffering_id" "vpid and tracer_buffering_id are identical" |
210 | is "$testapp_pid" "$vpid" "vpid and known testapp pid are identical" | |
211 | is "$testapp_pid" "$tracer_buffering_id" "tracer_buffering_id and known testapp pid are identical" | |
01654d69 JR |
212 | |
213 | # vpid_datetime | |
b7a2f86d MJ |
214 | local vpid_datetime |
215 | vpid_datetime=$(get_env_value "$metadata_env" vpid_datetime) | |
216 | ok $? "Extracting vpid_datetime from env metadata: \`$vpid_datetime\`" | |
217 | vpid_datetime=$(iso8601_to_lttng_dir_datetime "$vpid_datetime") | |
218 | expected_path="${expected_path}-${vpid_datetime}" | |
01654d69 JR |
219 | |
220 | # Append "metadata" and test that we find the file. | |
221 | expected_path="${expected_path}/metadata" | |
222 | ||
b7a2f86d MJ |
223 | test -f "$expected_path" |
224 | ok $? "Reconstructed path from metadata is an existing file: \`$expected_path\`" | |
01654d69 JR |
225 | |
226 | # Hostname | |
227 | # The hostname is not part of the lttng hierarchy still we can test for | |
228 | # its validity here. | |
b7a2f86d MJ |
229 | local hostname |
230 | hostname=$(get_env_value "$metadata_env" hostname) | |
231 | ok $? "Extracting hostname from env metadata: \`$hostname\`" | |
232 | is "$hostname" "$(hostname)" "Extracted hostname matches current hostname" | |
01654d69 JR |
233 | |
234 | rm -f "$metadata" | |
235 | rm -f "$metadata_env" | |
236 | } | |
237 | ||
238 | plan_tests $NUM_TESTS | |
239 | ||
240 | print_test_banner "$TEST_DESC" | |
241 | ||
c125de8f FD |
242 | bail_out_if_no_babeltrace |
243 | ||
01654d69 JR |
244 | # Use LTTNG_HOME since we want the complete "default" lttng directory hierarchy |
245 | # with "<session_name>-<datetime>/...". | |
b7a2f86d | 246 | export LTTNG_HOME="$TRACE_PATH" |
01654d69 | 247 | |
01654d69 JR |
248 | start_lttng_sessiond |
249 | ||
250 | tests=( test_per_uid test_per_pid ) | |
251 | ||
252 | for fct_test in "${tests[@]}"; | |
253 | do | |
254 | ${fct_test} | |
255 | done | |
256 | ||
257 | stop_lttng_sessiond | |
258 | unset LTTNG_HOME | |
259 | ||
260 | rm -rf "$TRACE_PATH" |