Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kselftests/ftrace : Add event trigger testcases

This adds simple event trigger testcases for ftracetest,
which covers following triggers.
- traceon-traceoff trigger
- enable/disable_event trigger
- snapshot trigger
- stacktrace trigger
- trigger filters

Here is the test result.

----
# ./ftracetest test.d/trigger/
=== Ftrace unit tests ===
[1] event trigger - test event enable/disable trigger [PASS]
[2] event trigger - test trigger filter [PASS]
[3] event trigger - test snapshot-trigger [PASS]
[4] event trigger - test stacktrace-trigger [PASS]
[5] event trigger - test traceon/off trigger [PASS]

# of passed: 5
# of failed: 0
# of unresolved: 0
# of untested: 0
# of unsupported: 0
# of xfailed: 0
# of undefined(test bug): 0
----

Link: http://lkml.kernel.org/r/12b9c2b289a0dc1e4386e7b77674611a83abca85.1457029949.git.tom.zanussi@linux.intel.com

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Shuah Khan <shuahkh@osg.samsung.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Tom Zanussi <tom.zanussi@linux.intel.com>
Reviewed-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>

authored by

Masami Hiramatsu and committed by
Steven Rostedt
cfa0963d 5463bfda

+299
+9
tools/testing/selftests/ftrace/test.d/functions
··· 14 14 reset_tracer() { # reset the current tracer 15 15 echo nop > current_tracer 16 16 } 17 + 18 + reset_trigger() { # reset all current setting triggers 19 + grep -v ^# events/*/*/trigger | 20 + while read line; do 21 + cmd=`echo $line | cut -f2- -d: | cut -f1 -d" "` 22 + echo "!$cmd" > `echo $line | cut -f1 -d:` 23 + done 24 + } 25 +
+64
tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc
··· 1 + #!/bin/sh 2 + # description: event trigger - test event enable/disable trigger 3 + 4 + do_reset() { 5 + reset_trigger 6 + echo > set_event 7 + clear_trace 8 + } 9 + 10 + fail() { #msg 11 + do_reset 12 + echo $1 13 + exit $FAIL 14 + } 15 + 16 + if [ ! -f set_event -o ! -d events/sched ]; then 17 + echo "event tracing is not supported" 18 + exit_unsupported 19 + fi 20 + 21 + if [ ! -f events/sched/sched_process_fork/trigger ]; then 22 + echo "event trigger is not supported" 23 + exit_unsupported 24 + fi 25 + 26 + reset_tracer 27 + do_reset 28 + 29 + FEATURE=`grep enable_event events/sched/sched_process_fork/trigger` 30 + if [ -z "$FEATURE" ]; then 31 + echo "event enable/disable trigger is not supported" 32 + exit_unsupported 33 + fi 34 + 35 + echo "Test enable_event trigger" 36 + echo 0 > events/sched/sched_switch/enable 37 + echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger 38 + ( echo "forked") 39 + if [ `cat events/sched/sched_switch/enable` != '1*' ]; then 40 + fail "enable_event trigger on sched_process_fork did not work" 41 + fi 42 + 43 + reset_trigger 44 + 45 + echo "Test disable_event trigger" 46 + echo 1 > events/sched/sched_switch/enable 47 + echo 'disable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger 48 + ( echo "forked") 49 + if [ `cat events/sched/sched_switch/enable` != '0*' ]; then 50 + fail "disable_event trigger on sched_process_fork did not work" 51 + fi 52 + 53 + reset_trigger 54 + 55 + echo "Test semantic error for event enable/disable trigger" 56 + ! echo 'enable_event:nogroup:noevent' > events/sched/sched_process_fork/trigger 57 + ! echo 'disable_event+1' > events/sched/sched_process_fork/trigger 58 + echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger 59 + ! echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger 60 + ! echo 'disable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger 61 + 62 + do_reset 63 + 64 + exit 0
+59
tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc
··· 1 + #!/bin/sh 2 + # description: event trigger - test trigger filter 3 + 4 + do_reset() { 5 + reset_trigger 6 + echo > set_event 7 + clear_trace 8 + } 9 + 10 + fail() { #msg 11 + do_reset 12 + echo $1 13 + exit $FAIL 14 + } 15 + 16 + if [ ! -f set_event -o ! -d events/sched ]; then 17 + echo "event tracing is not supported" 18 + exit_unsupported 19 + fi 20 + 21 + if [ ! -f events/sched/sched_process_fork/trigger ]; then 22 + echo "event trigger is not supported" 23 + exit_unsupported 24 + fi 25 + 26 + reset_tracer 27 + do_reset 28 + 29 + echo "Test trigger filter" 30 + echo 1 > tracing_on 31 + echo 'traceoff if child_pid == 0' > events/sched/sched_process_fork/trigger 32 + ( echo "forked") 33 + if [ `cat tracing_on` -ne 1 ]; then 34 + fail "traceoff trigger on sched_process_fork did not work" 35 + fi 36 + 37 + reset_trigger 38 + 39 + echo "Test semantic error for trigger filter" 40 + ! echo 'traceoff if a' > events/sched/sched_process_fork/trigger 41 + ! echo 'traceoff if common_pid=0' > events/sched/sched_process_fork/trigger 42 + ! echo 'traceoff if common_pid==b' > events/sched/sched_process_fork/trigger 43 + echo 'traceoff if common_pid == 0' > events/sched/sched_process_fork/trigger 44 + echo '!traceoff' > events/sched/sched_process_fork/trigger 45 + ! echo 'traceoff if common_pid == child_pid' > events/sched/sched_process_fork/trigger 46 + echo 'traceoff if common_pid <= 0' > events/sched/sched_process_fork/trigger 47 + echo '!traceoff' > events/sched/sched_process_fork/trigger 48 + echo 'traceoff if common_pid >= 0' > events/sched/sched_process_fork/trigger 49 + echo '!traceoff' > events/sched/sched_process_fork/trigger 50 + echo 'traceoff if parent_pid >= 0 && child_pid >= 0' > events/sched/sched_process_fork/trigger 51 + echo '!traceoff' > events/sched/sched_process_fork/trigger 52 + echo 'traceoff if parent_pid >= 0 || child_pid >= 0' > events/sched/sched_process_fork/trigger 53 + echo '!traceoff' > events/sched/sched_process_fork/trigger 54 + 55 + 56 + 57 + do_reset 58 + 59 + exit 0
+56
tools/testing/selftests/ftrace/test.d/trigger/trigger-snapshot.tc
··· 1 + #!/bin/sh 2 + # description: event trigger - test snapshot-trigger 3 + 4 + do_reset() { 5 + reset_trigger 6 + echo > set_event 7 + clear_trace 8 + } 9 + 10 + fail() { #msg 11 + do_reset 12 + echo $1 13 + exit $FAIL 14 + } 15 + 16 + if [ ! -f set_event -o ! -d events/sched ]; then 17 + echo "event tracing is not supported" 18 + exit_unsupported 19 + fi 20 + 21 + if [ ! -f events/sched/sched_process_fork/trigger ]; then 22 + echo "event trigger is not supported" 23 + exit_unsupported 24 + fi 25 + 26 + reset_tracer 27 + do_reset 28 + 29 + FEATURE=`grep snapshot events/sched/sched_process_fork/trigger` 30 + if [ -z "$FEATURE" ]; then 31 + echo "snapshot trigger is not supported" 32 + exit_unsupported 33 + fi 34 + 35 + echo "Test snapshot tigger" 36 + echo 0 > snapshot 37 + echo 1 > events/sched/sched_process_fork/enable 38 + ( echo "forked") 39 + echo 'snapshot:1' > events/sched/sched_process_fork/trigger 40 + ( echo "forked") 41 + grep sched_process_fork snapshot > /dev/null || \ 42 + fail "snapshot trigger on sched_process_fork did not work" 43 + 44 + reset_trigger 45 + echo 0 > snapshot 46 + echo 0 > events/sched/sched_process_fork/enable 47 + 48 + echo "Test snapshot semantic errors" 49 + 50 + ! echo "snapshot+1" > events/sched/sched_process_fork/trigger 51 + echo "snapshot" > events/sched/sched_process_fork/trigger 52 + ! echo "snapshot" > events/sched/sched_process_fork/trigger 53 + 54 + do_reset 55 + 56 + exit 0
+53
tools/testing/selftests/ftrace/test.d/trigger/trigger-stacktrace.tc
··· 1 + #!/bin/sh 2 + # description: event trigger - test stacktrace-trigger 3 + 4 + do_reset() { 5 + reset_trigger 6 + echo > set_event 7 + clear_trace 8 + } 9 + 10 + fail() { #msg 11 + do_reset 12 + echo $1 13 + exit $FAIL 14 + } 15 + 16 + if [ ! -f set_event -o ! -d events/sched ]; then 17 + echo "event tracing is not supported" 18 + exit_unsupported 19 + fi 20 + 21 + if [ ! -f events/sched/sched_process_fork/trigger ]; then 22 + echo "event trigger is not supported" 23 + exit_unsupported 24 + fi 25 + 26 + reset_tracer 27 + do_reset 28 + 29 + FEATURE=`grep stacktrace events/sched/sched_process_fork/trigger` 30 + if [ -z "$FEATURE" ]; then 31 + echo "stacktrace trigger is not supported" 32 + exit_unsupported 33 + fi 34 + 35 + echo "Test stacktrace tigger" 36 + echo 0 > trace 37 + echo 0 > options/stacktrace 38 + echo 'stacktrace' > events/sched/sched_process_fork/trigger 39 + ( echo "forked") 40 + grep "<stack trace>" trace > /dev/null || \ 41 + fail "stacktrace trigger on sched_process_fork did not work" 42 + 43 + reset_trigger 44 + 45 + echo "Test stacktrace semantic errors" 46 + 47 + ! echo "stacktrace:foo" > events/sched/sched_process_fork/trigger 48 + echo "stacktrace" > events/sched/sched_process_fork/trigger 49 + ! echo "stacktrace" > events/sched/sched_process_fork/trigger 50 + 51 + do_reset 52 + 53 + exit 0
+58
tools/testing/selftests/ftrace/test.d/trigger/trigger-traceonoff.tc
··· 1 + #!/bin/sh 2 + # description: event trigger - test traceon/off trigger 3 + 4 + do_reset() { 5 + reset_trigger 6 + echo > set_event 7 + clear_trace 8 + } 9 + 10 + fail() { #msg 11 + do_reset 12 + echo $1 13 + exit $FAIL 14 + } 15 + 16 + if [ ! -f set_event -o ! -d events/sched ]; then 17 + echo "event tracing is not supported" 18 + exit_unsupported 19 + fi 20 + 21 + if [ ! -f events/sched/sched_process_fork/trigger ]; then 22 + echo "event trigger is not supported" 23 + exit_unsupported 24 + fi 25 + 26 + reset_tracer 27 + do_reset 28 + 29 + echo "Test traceoff trigger" 30 + echo 1 > tracing_on 31 + echo 'traceoff' > events/sched/sched_process_fork/trigger 32 + ( echo "forked") 33 + if [ `cat tracing_on` -ne 0 ]; then 34 + fail "traceoff trigger on sched_process_fork did not work" 35 + fi 36 + 37 + reset_trigger 38 + 39 + echo "Test traceon trigger" 40 + echo 0 > tracing_on 41 + echo 'traceon' > events/sched/sched_process_fork/trigger 42 + ( echo "forked") 43 + if [ `cat tracing_on` -ne 1 ]; then 44 + fail "traceoff trigger on sched_process_fork did not work" 45 + fi 46 + 47 + reset_trigger 48 + 49 + echo "Test semantic error for traceoff/on trigger" 50 + ! echo 'traceoff:badparam' > events/sched/sched_process_fork/trigger 51 + ! echo 'traceoff+0' > events/sched/sched_process_fork/trigger 52 + echo 'traceon' > events/sched/sched_process_fork/trigger 53 + ! echo 'traceon' > events/sched/sched_process_fork/trigger 54 + ! echo 'traceoff' > events/sched/sched_process_fork/trigger 55 + 56 + do_reset 57 + 58 + exit 0