Commit | Line | Data |
---|---|---|
002db623 MD |
1 | #!/bin/bash |
2 | # | |
9d16b343 MJ |
3 | # Copyright (C) 2013 Christian Babeux <christian.babeux@efficios.com> |
4 | # Copyright (C) 2014, 2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | |
002db623 | 5 | # |
9d16b343 | 6 | # SPDX-License-Identifier: GPL-2.0-only |
002db623 | 7 | # |
002db623 MD |
8 | |
9 | TEST_DESC="Kernel tracer - Clock override plugin" | |
10 | ||
30977619 | 11 | CURDIR=$(dirname "$0")/ |
002db623 MD |
12 | TESTDIR=$CURDIR/../.. |
13 | SESSION_NAME="clock_override" | |
14 | ||
15 | NUM_TESTS=30 | |
16 | EVENT_NAME="lttng_test_filter_event" | |
17 | ||
18 | TESTCMD="echo -n 10 > /proc/lttng-test-filter-event" | |
19 | ||
002db623 MD |
20 | source $TESTDIR/utils/utils.sh |
21 | ||
30977619 JR |
22 | if [ "$TRACE_FORMAT_OUTPUT" == "ctf1" ]; then |
23 | NUM_TESTS=30 | |
24 | elif [ "$TRACE_FORMAT_OUTPUT" == "ctf2" ]; then | |
25 | NUM_TESTS=28 | |
26 | fi | |
27 | ||
002db623 MD |
28 | function signal_cleanup() |
29 | { | |
30 | diag "*** Exiting ***" | |
002db623 | 31 | stop_lttng_sessiond |
d0e263e7 | 32 | modprobe --remove lttng-test lttng-clock-plugin-test lttng-clock |
3be453c9 | 33 | full_cleanup |
002db623 MD |
34 | } |
35 | ||
30977619 | 36 | function extract_clock_metadata_ctf1() |
002db623 | 37 | { |
30977619 JR |
38 | local metadata_clock_start_token="clock {" |
39 | local metadata_clock_end_token="};" | |
40 | ||
002db623 MD |
41 | local metadata_file=$1 |
42 | local clock_metadata_file_destination=$2 | |
30977619 JR |
43 | |
44 | sed -n "/$metadata_clock_start_token/,/$metadata_clock_end_token/p" "$metadata_file" > "$clock_metadata_file_destination" | |
002db623 MD |
45 | ok $? "Clock metadata extraction" |
46 | } | |
47 | ||
30977619 | 48 | function extract_clock_metadata_token_ctf1() |
002db623 MD |
49 | { |
50 | local clock_metadata_file=$1 | |
51 | local token=$2 | |
52 | # Look for token and get value between "" | |
30977619 JR |
53 | grep "$token" "$clock_metadata_file" | awk -F"= |;" '{print $2}' | tr -d '"' |
54 | } | |
55 | ||
56 | function validate_tokens_ctf1 | |
57 | { | |
58 | ||
59 | local metadata_token_list=( | |
60 | "name" | |
61 | "uuid" | |
62 | "description" | |
63 | "freq" | |
64 | ) | |
65 | ||
66 | local ust_clock_token_value=( | |
67 | "lttng_test_clock_override" | |
68 | "83c63deb-7aa4-48fb-abda-946f400d76e6" | |
69 | "Freeze time with 1KHz for regression test" | |
70 | "1000" | |
71 | ) | |
72 | ||
73 | local metadata_directory_path=$1 | |
74 | local ctf_metadata_file | |
75 | local clock_metadata_file | |
76 | ||
77 | test ${#metadata_token_list[@]} -eq ${#ust_clock_token_value[@]} | |
78 | ok $? "Tokens to check(${#metadata_token_list[@]}) and provided values(${#ust_clock_token_value[@]}) count is equal" | |
79 | ||
80 | ||
81 | clock_metadata_file=$(mktemp --tmpdir -p "$TRACE_PATH" clock-metadata.XXXXXX) | |
82 | ctf_metadata_file=$(mktemp --tmpdir -p "$TRACE_PATH" ctf-metadata.XXXXXX) | |
83 | ||
84 | $BABELTRACE_BIN -o ctf-metadata -w "$ctf_metadata_file" "$metadata_directory_path" | |
85 | ok $? "Metadata extraction from babeltrace" | |
86 | ||
87 | extract_clock_metadata_ctf1 "$ctf_metadata_file" "$clock_metadata_file" | |
88 | ||
89 | local counter=0 | |
90 | while [ "$counter" -lt "${#metadata_token_list[@]}" ]; do | |
91 | result=$(extract_clock_metadata_token_ctf1 "$clock_metadata_file" \ | |
92 | "${metadata_token_list[$counter]}") | |
93 | test "$result" == "${ust_clock_token_value[$counter]}" | |
94 | ok $? "Token \"${metadata_token_list[$counter]}\" expect:${ust_clock_token_value[$counter]} got:$result" | |
95 | (( counter++ )) | |
96 | done | |
97 | ||
98 | rm -rf "$ctf_metadata_file" | |
99 | rm -rf "$clock_metadata_file" | |
100 | } | |
101 | ||
102 | function validate_tokens_ctf2 | |
103 | { | |
104 | local metadata_token_list=( | |
105 | "name" | |
106 | "uuid" | |
107 | "description" | |
108 | "frequency" | |
109 | ) | |
110 | ||
111 | local ust_clock_token_value=( | |
112 | "lttng_test_clock_override" | |
113 | "[131,198,61,235,122,164,72,251,171,218,148,111,64,13,118,230]" | |
114 | "Freeze time with 1KHz for regression test" | |
115 | "1000" | |
116 | ) | |
117 | ||
118 | test ${#metadata_token_list[@]} -eq ${#ust_clock_token_value[@]} | |
119 | ok $? "Tokens to check(${#metadata_token_list[@]}) and provided values(${#ust_clock_token_value[@]}) count is equal" | |
120 | ||
121 | local metadata_path=$1 | |
122 | ||
123 | local counter=0 | |
124 | while [ "$counter" -lt "${#metadata_token_list[@]}" ]; do | |
125 | result=$(jq -c -r "select(.type == \"clock-class\").${metadata_token_list[$counter]}" "$metadata_path") | |
126 | test "$result" == "${ust_clock_token_value[$counter]}" | |
127 | ok $? "Token \"${metadata_token_list[$counter]}\" expect:${ust_clock_token_value[$counter]} got:$result" | |
128 | (( counter++ )) | |
129 | done | |
130 | ||
002db623 MD |
131 | } |
132 | ||
133 | function test_clock_override_metadata() | |
134 | { | |
30977619 JR |
135 | local trace_metadata_file_path |
136 | local trace_metadata_dir | |
002db623 MD |
137 | |
138 | diag "Clock override plugin metadata test" | |
139 | ||
140 | modprobe lttng-clock-plugin-test | |
141 | start_lttng_sessiond | |
142 | modprobe lttng-test | |
143 | ||
30977619 | 144 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
002db623 MD |
145 | enable_kernel_lttng_event_ok $SESSION_NAME "$EVENT_NAME" |
146 | start_lttng_tracing_ok $SESSION_NAME | |
30977619 | 147 | eval "${TESTCMD}" |
002db623 MD |
148 | stop_lttng_tracing_ok $SESSION_NAME |
149 | destroy_lttng_session_ok $SESSION_NAME | |
150 | ||
002db623 | 151 | stop_lttng_sessiond |
d0e263e7 | 152 | modprobe --remove lttng-test lttng-clock-plugin-test lttng-clock |
002db623 | 153 | |
30977619 JR |
154 | trace_metadata_file_path="$(find "$TRACE_PATH" -name metadata -type f)" |
155 | trace_metadata_dir="$(dirname "$trace_metadata_file_path")" | |
002db623 | 156 | |
30977619 JR |
157 | if [ "$TRACE_FORMAT_OUTPUT" == "ctf1" ]; then |
158 | validate_tokens_ctf1 "$trace_metadata_dir" | |
159 | elif [ "$TRACE_FORMAT_OUTPUT" == "ctf2" ]; then | |
160 | validate_tokens_ctf2 "$trace_metadata_file_path" | |
161 | fi | |
002db623 MD |
162 | } |
163 | ||
164 | function test_clock_override_timestamp() | |
165 | { | |
166 | diag "Clock override test" | |
167 | ||
168 | # Test without the plugin | |
169 | diag "Plugin disabled" | |
170 | ||
171 | start_lttng_sessiond | |
172 | modprobe lttng-test | |
173 | ||
30977619 | 174 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
002db623 MD |
175 | enable_kernel_lttng_event_ok $SESSION_NAME "$EVENT_NAME" |
176 | start_lttng_tracing_ok $SESSION_NAME | |
30977619 | 177 | eval "${TESTCMD}" |
002db623 MD |
178 | stop_lttng_tracing_ok $SESSION_NAME |
179 | destroy_lttng_session_ok $SESSION_NAME | |
180 | ||
181 | # Use Babeltrace with "-n all" to give a comma separated list for | |
182 | # easy extraction of timestamps. | |
30977619 | 183 | unique_timestamps_count=$($BABELTRACE_BIN -n all "$TRACE_PATH" | \ |
002db623 | 184 | cut -d, -f1 | uniq | wc -l) |
30977619 | 185 | test "$unique_timestamps_count" -gt 1 |
002db623 | 186 | ok $? "Unique event timestamps without clock override: $unique_timestamps_count expect >1" |
d0e263e7 | 187 | modprobe --remove lttng-test |
002db623 MD |
188 | stop_lttng_sessiond |
189 | ||
190 | # Test with clock override plugin. | |
191 | diag "Plugin enabled" | |
192 | ||
193 | modprobe lttng-clock-plugin-test | |
194 | start_lttng_sessiond | |
195 | modprobe lttng-test | |
196 | ||
197 | start_lttng_sessiond | |
30977619 | 198 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
002db623 MD |
199 | enable_kernel_lttng_event_ok $SESSION_NAME "$EVENT_NAME" |
200 | start_lttng_tracing_ok $SESSION_NAME | |
30977619 | 201 | eval "${TESTCMD}" |
002db623 MD |
202 | stop_lttng_tracing_ok $SESSION_NAME |
203 | destroy_lttng_session_ok $SESSION_NAME | |
204 | ||
002db623 | 205 | stop_lttng_sessiond |
8f981892 | 206 | modprobe --remove lttng-test lttng-clock-plugin-test lttng-clock |
002db623 MD |
207 | |
208 | # Use Babeltrace with "-n all" to give a comma separated list for | |
209 | # easy extraction of timestamps. | |
30977619 | 210 | unique_timestamps_count=$($BABELTRACE_BIN -n all "$TRACE_PATH" | \ |
002db623 | 211 | cut -d, -f1 | uniq | wc -l) |
30977619 | 212 | test "$unique_timestamps_count" -eq 1 |
002db623 MD |
213 | ok $? "Unique event timestamps with clock override: $unique_timestamps_count expect 1" |
214 | } | |
215 | ||
216 | # MUST set TESTDIR before calling those functions | |
217 | plan_tests $NUM_TESTS | |
218 | ||
219 | print_test_banner "$TEST_DESC" | |
220 | ||
c125de8f FD |
221 | bail_out_if_no_babeltrace |
222 | ||
002db623 MD |
223 | TESTS=( |
224 | "test_clock_override_metadata" | |
225 | "test_clock_override_timestamp" | |
226 | ) | |
227 | ||
228 | TEST_COUNT=${#TESTS[@]} | |
229 | i=0 | |
230 | ||
231 | if [ "$(id -u)" == "0" ]; then | |
232 | isroot=1 | |
233 | else | |
234 | isroot=0 | |
235 | fi | |
236 | ||
237 | skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || | |
238 | { | |
0159fa50 | 239 | validate_lttng_modules_present |
002db623 MD |
240 | trap signal_cleanup SIGTERM SIGINT |
241 | ||
242 | while [ "$i" -lt "$TEST_COUNT" ]; do | |
243 | ||
33e55711 | 244 | TRACE_PATH=$(mktemp --tmpdir -d tmp.test_clock_override_trace_path.XXXXXX) |
002db623 MD |
245 | |
246 | # Execute test | |
247 | ${TESTS[$i]} | |
248 | ||
249 | rm -rf $TRACE_PATH | |
250 | ||
251 | let "i++" | |
252 | done | |
253 | } |