1 #!/bin/sh 1 #!/bin/sh 2 # SPDX-License-Identifier: GPL-2.0 2 # SPDX-License-Identifier: GPL-2.0 3 # description: event trigger - test histogram 3 # description: event trigger - test histogram expression parsing 4 # requires: set_event events/sched/sched_proce 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 5 6 6 7 fail() { #msg 7 fail() { #msg 8 echo $1 8 echo $1 9 exit_fail 9 exit_fail 10 } 10 } 11 11 12 test_hist_expr() { # test_name expression expe 12 test_hist_expr() { # test_name expression expected_val 13 trigger="events/sched/sched_process_fork/t 13 trigger="events/sched/sched_process_fork/trigger" 14 14 15 reset_trigger_file $trigger 15 reset_trigger_file $trigger 16 16 17 echo "Test hist trigger expressions - $1" 17 echo "Test hist trigger expressions - $1" 18 18 19 echo "hist:keys=common_pid:x=$2" > $trigge 19 echo "hist:keys=common_pid:x=$2" > $trigger 20 20 21 for i in `seq 1 10` ; do ( echo "forked" > 21 for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done 22 22 23 actual=`grep -o 'x=[[:digit:]]*' $trigger 23 actual=`grep -o 'x=[[:digit:]]*' $trigger | awk -F= '{ print $2 }'` 24 24 25 if [ $actual != $3 ]; then 25 if [ $actual != $3 ]; then 26 fail "Failed hist trigger expression e 26 fail "Failed hist trigger expression evaluation: Expression: $2 Expected: $3, Actual: $actual" 27 fi 27 fi 28 28 29 reset_trigger_file $trigger 29 reset_trigger_file $trigger 30 } 30 } 31 31 32 check_error() { # test_name command-with-error 32 check_error() { # test_name command-with-error-pos-by-^ 33 trigger="events/sched/sched_process_fork/t 33 trigger="events/sched/sched_process_fork/trigger" 34 34 35 echo "Test hist trigger expressions - $1" 35 echo "Test hist trigger expressions - $1" 36 ftrace_errlog_check 'hist:sched:sched_proc 36 ftrace_errlog_check 'hist:sched:sched_process_fork' "$2" $trigger 37 } 37 } 38 38 39 test_hist_expr "Variable assignment" "123" "12 39 test_hist_expr "Variable assignment" "123" "123" 40 40 41 test_hist_expr "Subtraction not associative" " 41 test_hist_expr "Subtraction not associative" "16-8-4-2" "2" 42 42 43 test_hist_expr "Division not associative" "64/ 43 test_hist_expr "Division not associative" "64/8/4/2" "1" 44 44 45 test_hist_expr "Same precedence operators (+,- 45 test_hist_expr "Same precedence operators (+,-) evaluated left to right" "16-8+4+2" "14" 46 46 47 test_hist_expr "Same precedence operators (*,/ 47 test_hist_expr "Same precedence operators (*,/) evaluated left to right" "4*3/2*2" "12" 48 48 49 test_hist_expr "Multiplication evaluated befor 49 test_hist_expr "Multiplication evaluated before addition/subtraction" "4+3*2-2" "8" 50 50 51 test_hist_expr "Division evaluated before addi 51 test_hist_expr "Division evaluated before addition/subtraction" "4+6/2-2" "5" 52 52 53 # err pos for "too many subexpressions" is dep 53 # err pos for "too many subexpressions" is dependent on where 54 # the last subexpression was detected. This ca 54 # the last subexpression was detected. This can vary depending 55 # on how the expression tree was generated. 55 # on how the expression tree was generated. 56 check_error "Too many subexpressions" 'hist:ke 56 check_error "Too many subexpressions" 'hist:keys=common_pid:x=32+^10*3/20-4' 57 check_error "Too many subexpressions" 'hist:ke 57 check_error "Too many subexpressions" 'hist:keys=common_pid:x=^1+2+3+4+5' 58 58 59 check_error "Unary minus not supported in sube 59 check_error "Unary minus not supported in subexpression" 'hist:keys=common_pid:x=-(^1)+2' 60 60 61 check_error "Division by zero" 'hist:keys=comm 61 check_error "Division by zero" 'hist:keys=common_pid:x=3/^0' 62 62 63 exit 0 63 exit 0
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.