3 # Copyright (C) 2019 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
5 # SPDX-License-Identifier: LGPL-2.1-only
7 TEST_DESC
="Metadata env - User space tracing"
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"
16 TRACE_PATH
=$
(mktemp
-d -t tmp.test_metadata_env_ust_trace_path.XXXXXX
)
23 source "$TESTDIR/utils/utils.sh"
25 # Fetch utils functions common to ust and kernel tests.
26 source "$CURDIR/utils.sh"
28 if [ ! -x "$TESTAPP_BIN" ]; then
29 BAIL_OUT
"No UST events binary detected."
32 function test_per_uid
()
38 local expected_path
="${TRACE_PATH}/lttng-traces"
39 local session_name
="per-uid"
41 metadata
=$
(mktemp
-t tmp.test_per_uid_metadata.XXXXXX
)
42 metadata_env
=$
(mktemp
-t tmp.test_per_uid_metadata_env.XXXXXX
)
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"
49 $TESTAPP_BIN -i $NR_ITER
51 stop_lttng_tracing_ok
"$session_name"
52 destroy_lttng_session_ok
"$session_name"
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.
57 metadata_path
=$
(find "${expected_path}/${session_name}"* -name "metadata")
58 metadata_path
=$
(dirname "$metadata_path")
60 $BABELTRACE_BIN --output-format=ctf-metadata
"${metadata_path}" > "$metadata"
63 awk '/env {/,/};/' < "$metadata" > "$metadata_env"
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.
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}"
75 # Session creation time
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}"
84 domain
=$
(get_env_value
"$metadata_env" domain
)
85 ok $?
"Extracting domain from env metadata: \`$domain\`"
86 expected_path
="${expected_path}/${domain}"
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}"
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}"
100 # Check that the uid is the one we expect from the current user
101 is
"$tracer_buffering_id" "$(id -u)" "tracer_buffering_id match current user uid: \`$tracer_buffering_id\`"
103 # Architecture_bit_width
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"
109 # Append "metadata" and test that we find the file.
110 expected_path
="${expected_path}/metadata"
112 test -f "$expected_path"
113 ok $?
"Reconstructed path from metadata is an existing file: \`$expected_path\`"
116 # The hostname is not part of the lttng hierarchy still we can test for
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"
124 rm -f "$metadata_env"
127 function test_per_pid
()
134 local expected_path
="${TRACE_PATH}/lttng-traces"
135 local session_name
="per-pid"
137 metadata
=$
(mktemp
-t tmp.test_per_pid_metadata.XXXXXX
)
138 metadata_env
=$
(mktemp
-t tmp.test_per_pid_metadata_env.XXXXXX
)
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"
146 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT &
150 stop_lttng_tracing_ok
"$session_name"
151 destroy_lttng_session_ok
"$session_name"
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.
156 metadata_path
=$
(find "${expected_path}/${session_name}"* -name "metadata")
157 metadata_path
=$
(dirname "$metadata_path")
159 $BABELTRACE_BIN --output-format=ctf-metadata
"${metadata_path}" 1> "$metadata"
161 # Extract "env" scope
162 awk '/env {/,/};/' < "$metadata" > "$metadata_env"
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.
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}"
174 # Session creation time
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}"
183 domain
=$
(get_env_value
"$metadata_env" domain
)
184 ok $?
"Extracting domain from env metadata: \`$domain\`"
185 expected_path
="${expected_path}/${domain}"
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}"
195 procname
=$
(get_env_value
"$metadata_env" procname
)
196 ok $?
"Extracting procname from env metadata: \`$procname\`"
197 expected_path
="${expected_path}/${procname}"
199 # vpid and tracer_buffering_id should be the same here.
201 vpid
=$
(get_env_value
"$metadata_env" "vpid")
202 ok $?
"Extracting vpid from env metadata: \`$vpid\`"
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}"
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"
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}"
220 # Append "metadata" and test that we find the file.
221 expected_path
="${expected_path}/metadata"
223 test -f "$expected_path"
224 ok $?
"Reconstructed path from metadata is an existing file: \`$expected_path\`"
227 # The hostname is not part of the lttng hierarchy still we can test for
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"
235 rm -f "$metadata_env"
238 plan_tests
$NUM_TESTS
240 print_test_banner
"$TEST_DESC"
242 bail_out_if_no_babeltrace
244 # Use LTTNG_HOME since we want the complete "default" lttng directory hierarchy
245 # with "<session_name>-<datetime>/...".
246 export LTTNG_HOME
="$TRACE_PATH"
250 tests
=( test_per_uid test_per_pid
)
252 for fct_test
in "${tests[@]}";