#!/bin/sh
# description: event trigger - test histogram trigger

do_reset() {
    reset_trigger
    echo > set_event
    clear_trace
}

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

if [ ! -f set_event -o ! -d events/sched ]; then
    echo "event tracing is not supported"
    exit_unsupported
fi

if [ ! -f events/sched/sched_process_fork/trigger ]; then
    echo "event trigger is not supported"
    exit_unsupported
fi

if [ ! -f events/sched/sched_process_fork/hist ]; then
    echo "hist trigger is not supported"
    exit_unsupported
fi

reset_tracer
do_reset

echo "Test histogram basic tigger"

echo 'hist:keys=parent_pid:vals=child_pid' > events/sched/sched_process_fork/trigger
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
grep parent_pid events/sched/sched_process_fork/hist > /dev/null || \
    fail "hist trigger on sched_process_fork did not work"
grep child events/sched/sched_process_fork/hist > /dev/null || \
    fail "hist trigger on sched_process_fork did not work"

reset_trigger

echo "Test histogram with compound keys"

echo 'hist:keys=parent_pid,child_pid' > events/sched/sched_process_fork/trigger
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
grep '^{ parent_pid:.*, child_pid:.*}' events/sched/sched_process_fork/hist > /dev/null || \
    fail "compound keys on sched_process_fork did not work"

reset_trigger

echo "Test histogram with string key"

echo 'hist:keys=parent_comm' > events/sched/sched_process_fork/trigger
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
COMM=`cat /proc/$$/comm`
grep "parent_comm: $COMM" events/sched/sched_process_fork/hist > /dev/null || \
    fail "string key on sched_process_fork did not work"

reset_trigger

echo "Test histogram with sort key"

echo 'hist:keys=parent_pid,child_pid:sort=child_pid.ascending' > events/sched/sched_process_fork/trigger
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done

check_inc() {
    while [ $# -gt 1 ]; do
        [ $1 -gt $2 ] && return 1
        shift 1
    done
    return 0
}
check_inc `grep -o "child_pid:[[:space:]]*[[:digit:]]*" \
    events/sched/sched_process_fork/hist | cut -d: -f2 ` ||
    fail "sort param on sched_process_fork did not work"

do_reset

exit 0
