Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8b39e1d authored by Steven Rostedt (VMware)'s avatar Steven Rostedt (VMware)
Browse files

selftests: ftrace: Add a test to test function triggers to start and stop tracing



This adds a test to test the function tiggers traceon and traceoff to make
sure that it starts and stops tracing when a function is hit.

The test performs the following:

 o Enables all events

 o Writes schedule:traceoff into set_ftrace_filter

 o Makes sure the tigger exists in the file

 o Makes sure the trace file no longer grows

 o Makes sure that tracing_on is now zero

 o Clears the trace file

 o Makes sure it's still empty

 o Removes the trigger

 o Makes sure tracing is still off (tracing_on is zero)

 o Writes schedule:traceon into set_ftrace_filter

 o Makes sure the trace file is no longer empty

 o Makes sure that tracing_on file is set to one

 o Removes the trigger

 o Makes sure the trigger is no longer there

 o Writes schedule:traceoff:3 into set_ftrace_filter

 o Makes sure that tracing_on turns off

   . Writes 1 into tracing_on

   . Makes sure that it turns off 2 more times

 o Writes 1 into tracing_on

 o Makes sure that tracing_on is still a one

Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent 43bb45da
Loading
Loading
Loading
Loading
+171 −0
Original line number Diff line number Diff line
#!/bin/sh
# description: ftrace - test for function traceon/off triggers
#
# Ftrace allows to add triggers to functions, such as enabling or disabling
# tracing, enabling or disabling trace events, or recording a stack trace
# within the ring buffer.
#
# This test is designed to test enabling and disabling tracing triggers
#

# The triggers are set within the set_ftrace_filter file
if [ ! -f set_ftrace_filter ]; then
    echo "set_ftrace_filter not found? Is dynamic ftrace not set?"
    exit_unsupported
fi

do_reset() {
    reset_ftrace_filter
    reset_tracer
    disable_events
    clear_trace
    enable_tracing
}

fail() { # mesg
    do_reset
    echo $1
    exit $FAIL
}

SLEEP_TIME=".1"

do_reset

echo "Testing function probes with enabling disabling tracing:"

cnt_trace() {
    grep -v '^#' trace | wc -l
}

echo '** DISABLE TRACING'
disable_tracing
clear_trace

cnt=`cnt_trace`
if [ $cnt -ne 0 ]; then
    fail "Found junk in trace"
fi


echo '** ENABLE EVENTS'

echo 1 > events/enable

echo '** ENABLE TRACING'
enable_tracing

cnt=`cnt_trace`
if [ $cnt -eq 0 ]; then
   fail "Nothing found in trace"
fi

# powerpc uses .schedule
func="schedule"
x=`grep '^\.schedule$' available_filter_functions | wc -l`
if [ "$x" -eq 1 ]; then
   func=".schedule"
fi

echo '** SET TRACEOFF'

echo "$func:traceoff" > set_ftrace_filter

cnt=`grep schedule set_ftrace_filter | wc -l`
if [ $cnt -ne 1 ]; then
   fail "Did not find traceoff trigger"
fi

cnt=`cnt_trace`
sleep $SLEEP_TIME
cnt2=`cnt_trace`

if [ $cnt -ne $cnt2 ]; then
   fail "Tracing is not stopped"
fi

on=`cat tracing_on`
if [ $on != "0" ]; then
    fail "Tracing is not off"
fi

line1=`cat trace | tail -1`
sleep $SLEEP_TIME
line2=`cat trace | tail -1`

if [ "$line1" != "$line2" ]; then
    fail "Tracing file is still changing"
fi

clear_trace

cnt=`cnt_trace`
if [ $cnt -ne 0 ]; then
    fail "Tracing is still happeing"
fi

echo "!$func:traceoff" >> set_ftrace_filter

cnt=`grep schedule set_ftrace_filter | wc -l`
if [ $cnt -ne 0 ]; then
    fail "traceoff trigger still exists"
fi

on=`cat tracing_on`
if [ $on != "0" ]; then
    fail "Tracing is started again"
fi

echo "$func:traceon" > set_ftrace_filter

cnt=`grep schedule set_ftrace_filter | wc -l`
if [ $cnt -ne 1 ]; then
    fail "traceon trigger not found"
fi

cnt=`cnt_trace`
if [ $cnt -eq 0 ]; then
   fail "Tracing did not start"
fi

on=`cat tracing_on`
if [ $on != "1" ]; then
    fail "Tracing was not enabled"
fi


echo "!$func:traceon" >> set_ftrace_filter

cnt=`grep schedule set_ftrace_filter | wc -l`
if [ $cnt -ne 0 ]; then
   fail "traceon trigger still exists"
fi

check_sleep() {
    val=$1
    sleep $SLEEP_TIME
    cat set_ftrace_filter
    on=`cat tracing_on`
    if [ $on != "$val" ]; then
	fail "Expected tracing_on to be $val, but it was $on"
    fi
}


echo "$func:traceoff:3" > set_ftrace_filter
check_sleep "0"
echo 1 > tracing_on
check_sleep "0"
echo 1 > tracing_on
check_sleep "0"
echo 1 > tracing_on
check_sleep "1"
echo "!$func:traceoff:0" > set_ftrace_filter

if grep -e traceon -e traceoff set_ftrace_filter; then
    fail "Tracing on and off triggers still exist"
fi

disable_events

exit 0