Skip to content

Commit 4e9f63c

Browse files
Kalesh Singhrostedt
authored andcommitted
tracing/selftests: Add tests for hist trigger expression parsing
Add tests for the parsing of hist trigger expressions; and to validate expression evaluation. Link: https://lkml.kernel.org/r/[email protected] Cc: Jonathan Corbet <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Shuah Khan <[email protected]> Cc: Tom Zanussi <[email protected]> Signed-off-by: Kalesh Singh <[email protected]> Signed-off-by: Steven Rostedt (VMware) <[email protected]>
1 parent 6a6e5ef commit 4e9f63c

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/bin/sh
2+
# SPDX-License-Identifier: GPL-2.0
3+
# description: event trigger - test histogram expression parsing
4+
# requires: set_event events/sched/sched_process_fork/trigger events/sched/sched_process_fork/hist error_log "<var1>=<field|var_ref|numeric_literal>":README
5+
6+
7+
fail() { #msg
8+
echo $1
9+
exit_fail
10+
}
11+
12+
test_hist_expr() { # test_name expression expected_val
13+
trigger="events/sched/sched_process_fork/trigger"
14+
15+
reset_trigger_file $trigger
16+
17+
echo "Test hist trigger expressions - $1"
18+
19+
echo "hist:keys=common_pid:x=$2" > $trigger
20+
21+
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
22+
23+
actual=`grep -o 'x=[[:digit:]]*' $trigger | awk -F= '{ print $2 }'`
24+
25+
if [ $actual != $3 ]; then
26+
fail "Failed hist trigger expression evaluation: Expression: $2 Expected: $3, Actual: $actual"
27+
fi
28+
29+
reset_trigger_file $trigger
30+
}
31+
32+
check_error() { # test_name command-with-error-pos-by-^
33+
trigger="events/sched/sched_process_fork/trigger"
34+
35+
echo "Test hist trigger expressions - $1"
36+
ftrace_errlog_check 'hist:sched:sched_process_fork' "$2" $trigger
37+
}
38+
39+
test_hist_expr "Variable assignment" "123" "123"
40+
41+
test_hist_expr "Subtraction not associative" "16-8-4-2" "2"
42+
43+
test_hist_expr "Division not associative" "64/8/4/2" "1"
44+
45+
test_hist_expr "Same precedence operators (+,-) evaluated left to right" "16-8+4+2" "14"
46+
47+
test_hist_expr "Same precedence operators (*,/) evaluated left to right" "4*3/2*2" "12"
48+
49+
test_hist_expr "Multiplication evaluated before addition/subtraction" "4+3*2-2" "8"
50+
51+
test_hist_expr "Division evaluated before addition/subtraction" "4+6/2-2" "5"
52+
53+
# err pos for "too many subexpressions" is dependent on where
54+
# the last subexpression was detected. This can vary depending
55+
# on how the expression tree was generated.
56+
check_error "Too many subexpressions" 'hist:keys=common_pid:x=32+^10*3/20-4'
57+
check_error "Too many subexpressions" 'hist:keys=common_pid:x=^1+2+3+4+5'
58+
59+
check_error "Unary minus not supported in subexpression" 'hist:keys=common_pid:x=-(^1)+2'
60+
61+
check_error "Division by zero" 'hist:keys=common_pid:x=3/^0'
62+
63+
exit 0

0 commit comments

Comments
 (0)