SoW-2020-0003: Trace Hit Counters
[lttng-tools.git] / tests / regression / tools / map / test_map_kernel
CommitLineData
ebdb334b
JR
1#!/bin/bash
2#
3# Copyright (C) 2020 Francis Deslauriers <francis.deslauriers@efficios.com>
4#
5# SPDX-License-Identifier: LGPL-2.1-only
6
7CURDIR=$(dirname "$0")/
8TESTDIR=$CURDIR/../../..
9NR_ITER=5
10KERNEL_EVENT_NAME="lttng_test_filter_event"
11KERNEL_TEST_FILE_NAME="/proc/lttng-test-filter-event"
12TESTAPP_PATH="$TESTDIR/utils/testapp"
13TESTAPP_SYSCALL_BIN="$TESTAPP_PATH/gen-syscall-events/gen-syscall-events"
14TESTAPP_USERSPACE_BINARY="$TESTAPP_PATH/userspace-probe-elf-binary/.libs/userspace-probe-elf-binary"
15
16KERNEL_NUM_TESTS=421
17NUM_TESTS=$(($KERNEL_NUM_TESTS))
18
19TMPDIR=$(mktemp -d)
20
21SH_TAP=1
22
23# shellcheck source=../../../utils/utils.sh
24source "$TESTDIR/utils/utils.sh"
25source "$CURDIR/map_base_test.sh"
26
27FULL_LTTNG_BIN="${TESTDIR}/../src/bin/lttng/${LTTNG_BIN}"
28
29plan_tests $NUM_TESTS
30
31function kernel_test_app()
32{
33 /bin/echo -n "$NR_ITER" > "$KERNEL_TEST_FILE_NAME"
34}
35
36function 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
44function kernel_userspace_test_app()
45{
46 for i in $(seq 1 $NR_ITER)
47 do
48 "$TESTAPP_USERSPACE_BINARY"
49 done
50}
51
52function 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
107function 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
150function 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
185function 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
230function 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
262if [ "$(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
316else
317 # Kernel tests are skipped.
318 skip 0 "Root access is needed. Skipping all kernel notification tests." $KERNEL_NUM_TESTS
319fi
320
321
322rm -rf "$TMPDIR"
This page took 0.034323 seconds and 5 git commands to generate.