SoW-2020-0002: Trace Hit Counters
[lttng-tools.git] / tests / regression / tools / map / test_map_kernel
1 #!/bin/bash
2 #
3 # Copyright (C) 2020 Francis Deslauriers <francis.deslauriers@efficios.com>
4 #
5 # SPDX-License-Identifier: LGPL-2.1-only
6
7 CURDIR=$(dirname "$0")/
8 TESTDIR=$CURDIR/../../..
9 NR_ITER=5
10 KERNEL_EVENT_NAME="lttng_test_filter_event"
11 KERNEL_TEST_FILE_NAME="/proc/lttng-test-filter-event"
12 TESTAPP_PATH="$TESTDIR/utils/testapp"
13 TESTAPP_SYSCALL_BIN="$TESTAPP_PATH/gen-syscall-events/gen-syscall-events"
14 TESTAPP_USERSPACE_BINARY="$TESTAPP_PATH/userspace-probe-elf-binary/.libs/userspace-probe-elf-binary"
15
16 KERNEL_NUM_TESTS=421
17 NUM_TESTS=$(($KERNEL_NUM_TESTS))
18
19 TMPDIR=$(mktemp -d)
20
21 SH_TAP=1
22
23 # shellcheck source=../../../utils/utils.sh
24 source "$TESTDIR/utils/utils.sh"
25 source "$CURDIR/map_base_test.sh"
26
27 FULL_LTTNG_BIN="${TESTDIR}/../src/bin/lttng/${LTTNG_BIN}"
28
29 plan_tests $NUM_TESTS
30
31 function kernel_test_app()
32 {
33 /bin/echo -n "$NR_ITER" > "$KERNEL_TEST_FILE_NAME"
34 }
35
36 function kernel_syscall_test_app()
37 {
38 for i in $(seq 1 $NR_ITER)
39 do
40 "$TESTAPP_SYSCALL_BIN" /dev/null /proc/cpuinfo /proc/cmdline
41 done
42 }
43
44 function kernel_userspace_test_app()
45 {
46 for i in $(seq 1 $NR_ITER)
47 do
48 "$TESTAPP_USERSPACE_BINARY"
49 done
50 }
51
52 function test_map_kernel_create()
53 {
54 local MAP_NAME="my_map_name"
55 local MAP_NAME_2="my_map_name2"
56 local MAP_NAME_3="my_map_name3"
57 local MAP_NAME_4="my_map_name4"
58 local SESSION_NAME="my_session_name"
59
60 create_lttng_session_ok "$SESSION_NAME"
61
62 "$FULL_LTTNG_BIN" add-map --kernel --bitness 32 --session "wrong_session_name" "$MAP_NAME" > /dev/null
63 isnt $? 0 "Map creation failed on wrong session name"
64
65 "$FULL_LTTNG_BIN" add-map --kernel --bitness 42 --session "$SESSION_NAME" "$MAP_NAME" > /dev/null
66 isnt $? 0 "Map creation failed \"--bitness\" wrong value as expected"
67
68 "$FULL_LTTNG_BIN" add-map --kernel --session "SESS_DOESNT_EXIST" "$MAP_NAME" > /dev/null
69 isnt $? 0 "Failed to add map to session that doesn't exist"
70
71 "$FULL_LTTNG_BIN" disable-map --kernel "MAP_DOESNT_EXIST" > /dev/null
72 isnt $? 0 "Failed to disable map that doesn't exist"
73
74 "$FULL_LTTNG_BIN" add-map --kernel --bitness 64 --session "$SESSION_NAME" "$MAP_NAME" > /dev/null
75 ok $? "Map with 64bit bitness created succesfully"
76
77 "$FULL_LTTNG_BIN" disable-map --kernel "$MAP_NAME" > /dev/null
78 ok $? "Map disabled succesfully"
79
80 "$FULL_LTTNG_BIN" add-map --kernel --bitness 32 --session "$SESSION_NAME" "$MAP_NAME_2" > /dev/null
81 ok $? "Map with 32bit bitness created succesfully"
82
83 "$FULL_LTTNG_BIN" add-map --kernel --session "$SESSION_NAME" "$MAP_NAME_2" > /dev/null
84 isnt $? 0 "Duplicated map fails to create as expected"
85
86 "$FULL_LTTNG_BIN" disable-map --kernel "$MAP_NAME_2" > /dev/null
87 ok $? "Map disabled succesfully"
88
89 "$FULL_LTTNG_BIN" add-map --kernel --session "$SESSION_NAME" "$MAP_NAME_3" > /dev/null
90 ok $? "Map with default bitness created succesfully"
91
92 "$FULL_LTTNG_BIN" disable-map --kernel "$MAP_NAME_3" > /dev/null
93 ok $? "Map removed succesfully"
94
95 "$FULL_LTTNG_BIN" add-map --kernel --session "$SESSION_NAME" --max-key-count 212 "$MAP_NAME_4" > /dev/null
96 ok $? "Map with max key count created succesfully"
97
98 "$FULL_LTTNG_BIN" disable-map --kernel "$MAP_NAME_4" > /dev/null
99 ok $? "Map disabled succesfully"
100
101 "$FULL_LTTNG_BIN" enable-map --kernel "$MAP_NAME_4" > /dev/null
102 ok $? "Map enabled succesfully"
103
104 destroy_lttng_session_ok "$SESSION_NAME"
105 }
106
107 function test_map_kernel_probe()
108 {
109 local MAP_NAME="my_map_name"
110 local SESSION_NAME="my_session_name"
111 local TRIGGER_NAME_1="my_trigger_name_1"
112 local TRIGGER_NAME_2="my_trigger_name_2"
113 local TARGET_SYMBOL="lttng_test_filter_event_write"
114 local event_name_1="my_probe1"
115 local event_name_2="my_probe2"
116 local KEY="foo"
117
118 diag "Test map kernel probe"
119 create_lttng_session_ok "$SESSION_NAME"
120
121 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "--kernel" "32" ""
122
123 lttng_add_trigger_ok "$TRIGGER_NAME_1" \
124 --condition \
125 on-event --kernel --probe="$TARGET_SYMBOL" "$event_name_1" \
126 --action \
127 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
128
129 lttng_add_trigger_ok "$TRIGGER_NAME_2" \
130 --condition \
131 on-event --kernel --probe="$TARGET_SYMBOL" "$event_name_2" \
132 --action \
133 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "\${EVENT_NAME}"
134
135 start_lttng_tracing_ok $SESSION_NAME
136
137 kernel_test_app
138
139 stop_lttng_tracing_ok $SESSION_NAME
140
141 view_map_ok "$MAP_NAME" "$KEY" "1"
142 view_map_ok "$MAP_NAME" "$event_name_2" "1"
143
144 lttng_remove_trigger_ok "$TRIGGER_NAME_1"
145 lttng_remove_trigger_ok "$TRIGGER_NAME_2"
146
147 destroy_lttng_session_ok "$SESSION_NAME"
148 }
149
150 function test_map_kernel_function()
151 {
152 local MAP_NAME="my_map_name"
153 local SESSION_NAME="my_session_name"
154 local TRIGGER_NAME="my_trigger_name_1"
155 local TARGET_SYMBOL="lttng_test_filter_event_write"
156 local event_name="my_probe1"
157 local KEY="foo"
158
159 diag "Test map kernel function"
160 create_lttng_session_ok "$SESSION_NAME"
161
162 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "--kernel" "32" ""
163
164 lttng_add_trigger_ok "$TRIGGER_NAME" \
165 --condition \
166 on-event --kernel --function="$TARGET_SYMBOL" "$event_name" \
167 --action incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY" \
168 --action incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "\${EVENT_NAME}"
169
170 start_lttng_tracing_ok $SESSION_NAME
171
172 kernel_test_app
173
174 stop_lttng_tracing_ok $SESSION_NAME
175
176 view_map_ok "$MAP_NAME" "${KEY}" "2"
177 view_map_ok "$MAP_NAME" "${event_name}_entry" "1"
178 view_map_ok "$MAP_NAME" "${event_name}_return" "1"
179
180 lttng_remove_trigger_ok "$TRIGGER_NAME"
181
182 destroy_lttng_session_ok "$SESSION_NAME"
183 }
184
185 function test_map_kernel_syscall()
186 {
187 local MAP_NAME="my_map_name"
188 local SESSION_NAME="my_session_name"
189 local TRIGGER_NAME_1="my_trigger_name_1"
190 local TRIGGER_NAME_2="my_trigger_name_2"
191 local FILE_1="/proc/cmdline"
192 local FILE_2="/proc/cpuinfo"
193 local TARGET_SYSCALL=openat
194 local KEY="foo"
195
196 diag "Test map kernel syscall"
197 create_lttng_session_ok "$SESSION_NAME"
198
199 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "--kernel" "32" ""
200
201 lttng_add_trigger_ok "$TRIGGER_NAME_1" \
202 --condition \
203 on-event --kernel --syscall "$TARGET_SYSCALL" --filter "filename == \"$FILE_1\"" \
204 --action \
205 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
206
207 lttng_add_trigger_ok "$TRIGGER_NAME_2" \
208 --condition \
209 on-event --kernel --syscall "$TARGET_SYSCALL" --filter "filename == \"$FILE_2\"" \
210 --action \
211 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "\${EVENT_NAME}"
212
213 start_lttng_tracing_ok $SESSION_NAME
214
215 kernel_syscall_test_app
216
217 stop_lttng_tracing_ok $SESSION_NAME
218
219 # When using filtering on filename we only get hits on the entry event
220 # as it's the one having the filename argument.
221 view_map_ok "$MAP_NAME" "${KEY}" "$NR_ITER"
222 view_map_ok "$MAP_NAME" "syscall_entry_$TARGET_SYSCALL" "$NR_ITER"
223
224 lttng_remove_trigger_ok "$TRIGGER_NAME_1"
225 lttng_remove_trigger_ok "$TRIGGER_NAME_2"
226
227 destroy_lttng_session_ok "$SESSION_NAME"
228 }
229
230 function test_map_kernel_userspace_probe()
231 {
232 local MAP_NAME="my_map_name"
233 local SESSION_NAME="my_session_name"
234 local TRIGGER_NAME_1="my_trigger_name_1"
235 local TEST_FUNCTION="test_function"
236 local KEY="foo"
237
238 diag "Test map kernel userspace probe"
239 create_lttng_session_ok "$SESSION_NAME"
240
241 lttng_add_map_ok "$MAP_NAME" "$SESSION_NAME" "--kernel" "32" ""
242
243 lttng_add_trigger_ok "$TRIGGER_NAME_1" \
244 --condition \
245 on-event --kernel --userspace-probe="elf:$TESTAPP_USERSPACE_BINARY:$TEST_FUNCTION" event_name \
246 --action \
247 incr-value --session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
248
249 start_lttng_tracing_ok $SESSION_NAME
250
251 kernel_userspace_test_app
252
253 stop_lttng_tracing_ok $SESSION_NAME
254
255 view_map_ok "$MAP_NAME" "$KEY" "$NR_ITER"
256
257 lttng_remove_trigger_ok "$TRIGGER_NAME_1"
258
259 destroy_lttng_session_ok "$SESSION_NAME"
260 }
261
262 if [ "$(id -u)" == "0" ]; then
263
264 start_lttng_sessiond_notap
265
266 validate_lttng_modules_present
267
268 modprobe lttng-test
269
270 test_map_kernel_create
271
272 test_map_formated_keys "--kernel" "$KERNEL_EVENT_NAME" "\${EVENT_NAME}" "$KERNEL_EVENT_NAME" kernel_test_app
273 test_map_formated_keys "--kernel" "$KERNEL_EVENT_NAME" "pitarifique-\${EVENT_NAME}" "pitarifique-$KERNEL_EVENT_NAME" kernel_test_app
274
275 test_map_view_empty "--kernel" "64" ""
276 test_map_view_empty "--kernel" "32" ""
277
278 test_map_n_triggers_n_keys "--kernel" "32" "$KERNEL_EVENT_NAME" kernel_test_app
279 test_map_n_triggers_n_keys "--kernel" "64" "$KERNEL_EVENT_NAME" kernel_test_app
280
281 test_map_n_triggers_1_key "--kernel" "32" "$KERNEL_EVENT_NAME" kernel_test_app
282 test_map_n_triggers_1_key "--kernel" "64" "$KERNEL_EVENT_NAME" kernel_test_app
283
284 test_map_n_triggers_1_key_coalesced "--kernel" "32" "$KERNEL_EVENT_NAME" kernel_test_app
285 test_map_n_triggers_1_key_coalesced "--kernel" "64" "$KERNEL_EVENT_NAME" kernel_test_app
286
287 test_map_disable_enable "--kernel" "32" "$KERNEL_EVENT_NAME" kernel_test_app
288 test_map_disable_enable "--kernel" "64" "$KERNEL_EVENT_NAME" kernel_test_app
289
290 test_map_add_remove_add_trigger "--kernel" "32" "$KERNEL_EVENT_NAME" kernel_test_app
291 test_map_add_remove_add_trigger "--kernel" "64" "$KERNEL_EVENT_NAME" kernel_test_app
292
293 test_map_creation_after_trigger "--kernel" "32" "$KERNEL_EVENT_NAME" kernel_test_app
294 test_map_creation_after_trigger "--kernel" "64" "$KERNEL_EVENT_NAME" kernel_test_app
295
296 test_map_remove_trigger_before_stop "--kernel" "32" "$KERNEL_EVENT_NAME" kernel_test_app
297 test_map_remove_trigger_before_stop "--kernel" "64" "$KERNEL_EVENT_NAME" kernel_test_app
298
299 test_map_two_incr_value_two_keys "--kernel" "64" "$KERNEL_EVENT_NAME" kernel_test_app
300
301 test_map_clear "--kernel" 32 "$KERNEL_EVENT_NAME" kernel_test_app
302 test_map_clear "--kernel" 64 "$KERNEL_EVENT_NAME" kernel_test_app
303
304 test_map_kernel_probe
305 test_map_kernel_function
306
307 test_map_kernel_syscall
308
309 test_map_kernel_userspace_probe
310
311 test_map_filter "--kernel" "$KERNEL_EVENT_NAME" "intfield" kernel_test_app
312
313 modprobe --remove lttng-test
314
315 stop_lttng_sessiond_notap
316 else
317 # Kernel tests are skipped.
318 skip 0 "Root access is needed. Skipping all kernel notification tests." $KERNEL_NUM_TESTS
319 fi
320
321
322 rm -rf "$TMPDIR"
This page took 0.036968 seconds and 5 git commands to generate.