3 # Copyright (C) 2020 Francis Deslauriers <francis.deslauriers@efficios.com>
5 # SPDX-License-Identifier: LGPL-2.1-only
7 CURDIR
=$
(dirname "$0")/
8 TESTDIR
=$CURDIR/..
/..
/..
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"
17 NUM_TESTS
=$
(($KERNEL_NUM_TESTS))
23 # shellcheck source=../../../utils/utils.sh
24 source "$TESTDIR/utils/utils.sh"
25 source "$CURDIR/map_base_test.sh"
27 FULL_LTTNG_BIN
="${TESTDIR}/../src/bin/lttng/${LTTNG_BIN}"
31 function kernel_test_app
()
33 /bin
/echo -n "$NR_ITER" > "$KERNEL_TEST_FILE_NAME"
36 function kernel_syscall_test_app
()
38 for i
in $
(seq 1 $NR_ITER)
40 "$TESTAPP_SYSCALL_BIN" /dev
/null
/proc
/cpuinfo
/proc
/cmdline
44 function kernel_userspace_test_app
()
46 for i
in $
(seq 1 $NR_ITER)
48 "$TESTAPP_USERSPACE_BINARY"
52 function test_map_kernel_create
()
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"
60 create_lttng_session_ok
"$SESSION_NAME"
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"
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"
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"
71 "$FULL_LTTNG_BIN" disable-map
--kernel "MAP_DOESNT_EXIST" > /dev
/null
72 isnt $?
0 "Failed to disable map that doesn't exist"
74 "$FULL_LTTNG_BIN" add-map
--kernel --bitness 64 --session "$SESSION_NAME" "$MAP_NAME" > /dev
/null
75 ok $?
"Map with 64bit bitness created succesfully"
77 "$FULL_LTTNG_BIN" disable-map
--kernel "$MAP_NAME" > /dev
/null
78 ok $?
"Map disabled succesfully"
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"
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"
86 "$FULL_LTTNG_BIN" disable-map
--kernel "$MAP_NAME_2" > /dev
/null
87 ok $?
"Map disabled succesfully"
89 "$FULL_LTTNG_BIN" add-map
--kernel --session "$SESSION_NAME" "$MAP_NAME_3" > /dev
/null
90 ok $?
"Map with default bitness created succesfully"
92 "$FULL_LTTNG_BIN" disable-map
--kernel "$MAP_NAME_3" > /dev
/null
93 ok $?
"Map removed succesfully"
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"
98 "$FULL_LTTNG_BIN" disable-map
--kernel "$MAP_NAME_4" > /dev
/null
99 ok $?
"Map disabled succesfully"
101 "$FULL_LTTNG_BIN" enable-map
--kernel "$MAP_NAME_4" > /dev
/null
102 ok $?
"Map enabled succesfully"
104 destroy_lttng_session_ok
"$SESSION_NAME"
107 function test_map_kernel_probe
()
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"
118 diag
"Test map kernel probe"
119 create_lttng_session_ok
"$SESSION_NAME"
121 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "--kernel" "32" ""
123 lttng_add_trigger_ok
"$TRIGGER_NAME_1" \
125 on-event
--kernel --probe="$TARGET_SYMBOL" "$event_name_1" \
127 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
129 lttng_add_trigger_ok
"$TRIGGER_NAME_2" \
131 on-event
--kernel --probe="$TARGET_SYMBOL" "$event_name_2" \
133 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "\${EVENT_NAME}"
135 start_lttng_tracing_ok
$SESSION_NAME
139 stop_lttng_tracing_ok
$SESSION_NAME
141 view_map_ok
"$MAP_NAME" "$KEY" "1"
142 view_map_ok
"$MAP_NAME" "$event_name_2" "1"
144 lttng_remove_trigger_ok
"$TRIGGER_NAME_1"
145 lttng_remove_trigger_ok
"$TRIGGER_NAME_2"
147 destroy_lttng_session_ok
"$SESSION_NAME"
150 function test_map_kernel_function
()
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"
159 diag
"Test map kernel function"
160 create_lttng_session_ok
"$SESSION_NAME"
162 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "--kernel" "32" ""
164 lttng_add_trigger_ok
"$TRIGGER_NAME" \
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}"
170 start_lttng_tracing_ok
$SESSION_NAME
174 stop_lttng_tracing_ok
$SESSION_NAME
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"
180 lttng_remove_trigger_ok
"$TRIGGER_NAME"
182 destroy_lttng_session_ok
"$SESSION_NAME"
185 function test_map_kernel_syscall
()
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
196 diag
"Test map kernel syscall"
197 create_lttng_session_ok
"$SESSION_NAME"
199 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "--kernel" "32" ""
201 lttng_add_trigger_ok
"$TRIGGER_NAME_1" \
203 on-event
--kernel --syscall "$TARGET_SYSCALL" --filter "filename == \"$FILE_1\"" \
205 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
207 lttng_add_trigger_ok
"$TRIGGER_NAME_2" \
209 on-event
--kernel --syscall "$TARGET_SYSCALL" --filter "filename == \"$FILE_2\"" \
211 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "\${EVENT_NAME}"
213 start_lttng_tracing_ok
$SESSION_NAME
215 kernel_syscall_test_app
217 stop_lttng_tracing_ok
$SESSION_NAME
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"
224 lttng_remove_trigger_ok
"$TRIGGER_NAME_1"
225 lttng_remove_trigger_ok
"$TRIGGER_NAME_2"
227 destroy_lttng_session_ok
"$SESSION_NAME"
230 function test_map_kernel_userspace_probe
()
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"
238 diag
"Test map kernel userspace probe"
239 create_lttng_session_ok
"$SESSION_NAME"
241 lttng_add_map_ok
"$MAP_NAME" "$SESSION_NAME" "--kernel" "32" ""
243 lttng_add_trigger_ok
"$TRIGGER_NAME_1" \
245 on-event
--kernel --userspace-probe="elf:$TESTAPP_USERSPACE_BINARY:$TEST_FUNCTION" event_name \
247 incr-value
--session "$SESSION_NAME" --map "$MAP_NAME" --key "$KEY"
249 start_lttng_tracing_ok
$SESSION_NAME
251 kernel_userspace_test_app
253 stop_lttng_tracing_ok
$SESSION_NAME
255 view_map_ok
"$MAP_NAME" "$KEY" "$NR_ITER"
257 lttng_remove_trigger_ok
"$TRIGGER_NAME_1"
259 destroy_lttng_session_ok
"$SESSION_NAME"
262 if [ "$(id -u)" == "0" ]; then
264 start_lttng_sessiond_notap
266 validate_lttng_modules_present
270 test_map_kernel_create
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
275 test_map_view_empty
"--kernel" "64" ""
276 test_map_view_empty
"--kernel" "32" ""
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
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
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
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
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
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
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
299 test_map_two_incr_value_two_keys
"--kernel" "64" "$KERNEL_EVENT_NAME" kernel_test_app
301 test_map_clear
"--kernel" 32 "$KERNEL_EVENT_NAME" kernel_test_app
302 test_map_clear
"--kernel" 64 "$KERNEL_EVENT_NAME" kernel_test_app
304 test_map_kernel_probe
305 test_map_kernel_function
307 test_map_kernel_syscall
309 test_map_kernel_userspace_probe
311 test_map_filter
"--kernel" "$KERNEL_EVENT_NAME" "intfield" kernel_test_app
313 modprobe
--remove lttng-test
315 stop_lttng_sessiond_notap
317 # Kernel tests are skipped.
318 skip
0 "Root access is needed. Skipping all kernel notification tests." $KERNEL_NUM_TESTS