* [PATCH v4 0/4] ftrace: Add a ftrace test collection
@ 2014-09-18 12:04 Masami Hiramatsu
2014-09-18 12:04 ` [PATCH v4 1/4] ftracetest: Initial commit for ftracetest Masami Hiramatsu
` (3 more replies)
0 siblings, 4 replies; 14+ messages in thread
From: Masami Hiramatsu @ 2014-09-18 12:04 UTC (permalink / raw)
To: Shuah Khan, Tom Zanussi, Oleg Nesterov, Steven Rostedt,
Namhyung Kim, Fengguang Wu, Ingo Molnar
Cc: Linux Kernel Mailing List
Hi,
Here is the collection of testcases for ftrace version 4.
In this version, I moved all scripts under the
tools/testing/selftest :)
Updates are:
- Use errexit option to simplify tests.
- Use signal-based result notify for result codes (except PASS/FAIL).
- Fix README according to Steven's comments.
- Move under the tools/testing/selftest.
- Remove XPASS support (unless someone really needs it)
ftracetest is a shell(dash) script for testing ftrace features.
It will be required to add a unit test for each new feature
after this is merged, because of preventing feature regressions.
Thank you,
---
Masami Hiramatsu (4):
ftracetest: Initial commit for ftracetest
ftracetest: Add ftrace basic testcases
ftracetest: Add kprobe basic testcases
ftracetest: Add POSIX.3 standard and XFAIL result codes
MAINTAINERS | 1
tools/testing/selftests/Makefile | 1
tools/testing/selftests/ftrace/Makefile | 7 +
tools/testing/selftests/ftrace/README | 82 +++++++
tools/testing/selftests/ftrace/ftracetest | 249 ++++++++++++++++++++
tools/testing/selftests/ftrace/samples/fail.tc | 4
tools/testing/selftests/ftrace/samples/pass.tc | 3
.../testing/selftests/ftrace/samples/unresolved.tc | 4
.../selftests/ftrace/samples/unsupported.tc | 3
tools/testing/selftests/ftrace/samples/untested.tc | 3
tools/testing/selftests/ftrace/samples/xfail.tc | 3
.../selftests/ftrace/test.d/00basic/basic1.tc | 3
.../selftests/ftrace/test.d/00basic/basic2.tc | 7 +
.../selftests/ftrace/test.d/00basic/basic3.tc | 8 +
.../ftrace/test.d/kprobe/add_and_remove.tc | 11 +
.../selftests/ftrace/test.d/kprobe/busy_check.tc | 13 +
tools/testing/selftests/ftrace/test.d/template | 9 +
17 files changed, 411 insertions(+)
create mode 100644 tools/testing/selftests/ftrace/Makefile
create mode 100644 tools/testing/selftests/ftrace/README
create mode 100755 tools/testing/selftests/ftrace/ftracetest
create mode 100644 tools/testing/selftests/ftrace/samples/fail.tc
create mode 100644 tools/testing/selftests/ftrace/samples/pass.tc
create mode 100644 tools/testing/selftests/ftrace/samples/unresolved.tc
create mode 100644 tools/testing/selftests/ftrace/samples/unsupported.tc
create mode 100644 tools/testing/selftests/ftrace/samples/untested.tc
create mode 100644 tools/testing/selftests/ftrace/samples/xfail.tc
create mode 100644 tools/testing/selftests/ftrace/test.d/00basic/basic1.tc
create mode 100644 tools/testing/selftests/ftrace/test.d/00basic/basic2.tc
create mode 100644 tools/testing/selftests/ftrace/test.d/00basic/basic3.tc
create mode 100644 tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc
create mode 100644 tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc
create mode 100644 tools/testing/selftests/ftrace/test.d/template
--
^ permalink raw reply [flat|nested] 14+ messages in thread* [PATCH v4 1/4] ftracetest: Initial commit for ftracetest 2014-09-18 12:04 [PATCH v4 0/4] ftrace: Add a ftrace test collection Masami Hiramatsu @ 2014-09-18 12:04 ` Masami Hiramatsu 2014-09-18 13:07 ` Shuah Khan 2014-09-18 12:04 ` [PATCH v4 2/4] ftracetest: Add ftrace basic testcases Masami Hiramatsu ` (2 subsequent siblings) 3 siblings, 1 reply; 14+ messages in thread From: Masami Hiramatsu @ 2014-09-18 12:04 UTC (permalink / raw) To: Shuah Khan, Tom Zanussi, Oleg Nesterov, Steven Rostedt, Namhyung Kim, Fengguang Wu, Ingo Molnar Cc: Linux Kernel Mailing List ftracetest is a collection of testcase shell-scripts for ftrace. To avoid regressions of ftrace, these testcases check correct ftrace behaviors. If someone would like to add any features on ftrace, the patch series should have at least one testcase for checking the new behavior. Changes in v4: - Move this under selftests. :) - Add a copyright and note of GPLv2. - Fix documents acconding to Steven's comments. - Fix a small bug pointed by Namhyng. Changes in v3: - Use "." instead of "source". - Don't use -e option for echo since dash doesn't support it. Changes in v2: - Remove unneeded 'function' keyword. - Add abspath and find_testcases. - Make OPT_TEST_CASES a local var. - Ensure given testcase ended with .tc. - Accept a directory option which has multiple testcases. - Change [PASSED]/[FAILED] to [PASS]/[FAIL] - Change the basic shell to sh (dash). Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> --- MAINTAINERS | 1 tools/testing/selftests/Makefile | 1 tools/testing/selftests/ftrace/Makefile | 7 + tools/testing/selftests/ftrace/README | 46 +++++++ tools/testing/selftests/ftrace/ftracetest | 157 ++++++++++++++++++++++++ tools/testing/selftests/ftrace/test.d/template | 4 + 6 files changed, 216 insertions(+) create mode 100644 tools/testing/selftests/ftrace/Makefile create mode 100644 tools/testing/selftests/ftrace/README create mode 100755 tools/testing/selftests/ftrace/ftracetest create mode 100644 tools/testing/selftests/ftrace/test.d/template diff --git a/MAINTAINERS b/MAINTAINERS index 5e7866a..29e22db 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9295,6 +9295,7 @@ F: include/*/ftrace.h F: include/linux/trace*.h F: include/trace/ F: kernel/trace/ +F: tools/testing/selftests/ftrace TRIVIAL PATCHES M: Jiri Kosina <trivial@kernel.org> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile index 36ff2e4..45f145c 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile @@ -14,6 +14,7 @@ TARGETS += powerpc TARGETS += user TARGETS += sysctl TARGETS += firmware +TARGETS += ftrace TARGETS_HOTPLUG = cpu-hotplug TARGETS_HOTPLUG += memory-hotplug diff --git a/tools/testing/selftests/ftrace/Makefile b/tools/testing/selftests/ftrace/Makefile new file mode 100644 index 0000000..76cc9f1 --- /dev/null +++ b/tools/testing/selftests/ftrace/Makefile @@ -0,0 +1,7 @@ +all: + +run_tests: + @/bin/sh ./ftracetest || echo "ftrace selftests: [FAIL]" + +clean: + rm -rf logs/* diff --git a/tools/testing/selftests/ftrace/README b/tools/testing/selftests/ftrace/README new file mode 100644 index 0000000..ee2cef7 --- /dev/null +++ b/tools/testing/selftests/ftrace/README @@ -0,0 +1,46 @@ +Linux Ftrace Testcases + +This is a collection of testcases for ftrace tracing feature in the Linux +kernel. Since ftrace exports interfaces via the debugfs, we just need +shell scripts for testing. Feel free to add new test cases. + +Running the ftrace testcases +============================ + +At first, you need to be the root user to run this script. +To run all testcases: + + $ sudo ./ftracetest + +To run specific testcases: + + # ./ftracetest test.d/basic3.tc + +Or you can also run testcases under given directory: + + # ./ftracetest test.d/kprobe/ + +Contributing new testcases +========================== + +Copy test.d/template to your testcase (whose filename must have *.tc +extension) and rewrite the test description line. + + * The working directory of the script is <debugfs>/tracing/. + + * Take care with side effects as the tests are run with root privilege. + + * The tests should not run for a long period of time (more than 1 min.) + These are to be unit tests. + + * You can add a directory for your testcases under test.d/ if needed. + + * The test cases should run on dash (busybox shell) for testing on + minimal cross-build environments. + +TODO +==== + + * Fancy colored output :) + + * Integrate with selftest? diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests/ftrace/ftracetest new file mode 100755 index 0000000..02f4e7a --- /dev/null +++ b/tools/testing/selftests/ftrace/ftracetest @@ -0,0 +1,157 @@ +#!/bin/sh + +# ftracetest - Ftrace test shell scripts +# +# Copyright (C) Hitachi Ltd., 2014 +# Written by Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> +# +# Released under the terms of the GPL v2. + +usage() { # errno [message] +[ "$2" ] && echo $2 +echo "Usage: ftracetest [options] [testcase(s)] [testcase-directory(s)]" +echo " Options:" +echo " -h|--help Show help message" +echo " -k|--keep Keep passed test logs" +echo " -d|--debug Debug mode (trace all shell commands)" +exit $1 +} + +errexit() { # message + echo "Error: $1" 1>&2 + exit 1 +} + +# Ensuring user privilege +if [ `id -u` -ne 0 ]; then + errexit "this must be run by root user" +fi + +# Utilities +absdir() { # file_path + (cd `dirname $1`; pwd) +} + +abspath() { + echo `absdir $1`/`basename $1` +} + +find_testcases() { #directory + echo `find $1 -name \*.tc` +} + +parse_opts() { # opts + local OPT_TEST_CASES= + local OPT_TEST_DIR= + + while [ "$1" ]; do + case "$1" in + --help|-h) + usage 0 + ;; + --keep|-k) + KEEP_LOG=1 + shift 1 + ;; + --debug|-d) + DEBUG=1 + shift 1 + ;; + *.tc) + if [ -f "$1" ]; then + OPT_TEST_CASES="$OPT_TEST_CASES `abspath $1`" + shift 1 + else + usage 1 "$1 is not a testcase" + fi + ;; + *) + if [ -d "$1" ]; then + OPT_TEST_DIR=`abspath $1` + OPT_TEST_CASES="$OPT_TEST_CASES `find_testcases $OPT_TEST_DIR`" + shift 1 + else + usage 1 "Invalid option ($1)" + fi + ;; + esac + done + if [ "$OPT_TEST_CASES" ]; then + TEST_CASES=$OPT_TEST_CASES + fi +} + +# Parameters +DEBUGFS_DIR=`grep debugfs /proc/mounts | cut -f2 -d' '` +TRACING_DIR=$DEBUGFS_DIR/tracing +TOP_DIR=`absdir $0` +TEST_DIR=$TOP_DIR/test.d +TEST_CASES=`find_testcases $TEST_DIR` +LOG_DIR=$TOP_DIR/logs/`date +%Y%m%d-%H%M%S`/ +KEEP_LOG=0 +DEBUG=0 +# Parse command-line options +parse_opts $* + +[ $DEBUG -ne 0 ] && set -x + +# Verify parameters +if [ -z "$DEBUGFS_DIR" -o ! -d "$TRACING_DIR" ]; then + errexit "No ftrace directory found" +fi + +# Preparing logs +LOG_FILE=$LOG_DIR/ftracetest.log +mkdir -p $LOG_DIR || errexit "Failed to make a log directory: $LOG_DIR" +date > $LOG_FILE +prlog() { # messages + echo "$@" | tee -a $LOG_FILE +} +catlog() { #file + cat $1 | tee -a $LOG_FILE +} + +# Testcase management +PASSED_CASES= +FAILED_CASES= +CASENO=0 +testcase() { # testfile + CASENO=$((CASENO+1)) + prlog -n "[$CASENO]"`grep "^#[ \t]*description:" $1 | cut -f2 -d:` +} +failed() { + prlog " [FAIL]" + FAILED_CASES="$FAILED_CASES $CASENO" +} +passed() { + prlog " [PASS]" + PASSED_CASES="$PASSED_CASES $CASENO" +} + + +# Run one test case +run_test() { # testfile + local testname=`basename $1` + local testlog=`mktemp --tmpdir=$LOG_DIR ${testname}-XXXXXX.log` + testcase $1 + echo "execute: "$1 > $testlog + (cd $TRACING_DIR; set -x ; . $1) >> $testlog 2>&1 + ret=$? + if [ $ret -ne 0 ]; then + failed + catlog $testlog + else + passed + [ $KEEP_LOG -eq 0 ] && rm $testlog + fi +} + +# Main loop +for t in $TEST_CASES; do + run_test $t +done +prlog "" +prlog "# of passed: " `echo $PASSED_CASES | wc -w` +prlog "# of failed: " `echo $FAILED_CASES | wc -w` + +test -z "$FAILED_CASES" # if no error, return 0 diff --git a/tools/testing/selftests/ftrace/test.d/template b/tools/testing/selftests/ftrace/test.d/template new file mode 100644 index 0000000..ce5f735 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/template @@ -0,0 +1,4 @@ +#!/bin/sh +# description: %HERE DESCRIBE WHAT THIS DOES% +# you have to add ".tc" extention for your testcase file +exit 0 # Return 0 if the test is passed, otherwise return !0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v4 1/4] ftracetest: Initial commit for ftracetest 2014-09-18 12:04 ` [PATCH v4 1/4] ftracetest: Initial commit for ftracetest Masami Hiramatsu @ 2014-09-18 13:07 ` Shuah Khan 2014-09-19 1:03 ` Masami Hiramatsu 0 siblings, 1 reply; 14+ messages in thread From: Shuah Khan @ 2014-09-18 13:07 UTC (permalink / raw) To: Masami Hiramatsu, Shuah Khan, Tom Zanussi, Oleg Nesterov, Steven Rostedt, Namhyung Kim, Fengguang Wu, Ingo Molnar Cc: Linux Kernel Mailing List, Shuah Khan On 09/18/2014 06:04 AM, Masami Hiramatsu wrote: > ftracetest is a collection of testcase shell-scripts for ftrace. > To avoid regressions of ftrace, these testcases check correct > ftrace behaviors. If someone would like to add any features on > ftrace, the patch series should have at least one testcase for > checking the new behavior. > > Changes in v4: > - Move this under selftests. :) > - Add a copyright and note of GPLv2. > - Fix documents acconding to Steven's comments. > - Fix a small bug pointed by Namhyng. > > Changes in v3: > - Use "." instead of "source". > - Don't use -e option for echo since dash doesn't support it. > > Changes in v2: > - Remove unneeded 'function' keyword. > - Add abspath and find_testcases. > - Make OPT_TEST_CASES a local var. > - Ensure given testcase ended with .tc. > - Accept a directory option which has multiple testcases. > - Change [PASSED]/[FAILED] to [PASS]/[FAIL] > - Change the basic shell to sh (dash). > > Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> > --- > MAINTAINERS | 1 > tools/testing/selftests/Makefile | 1 > tools/testing/selftests/ftrace/Makefile | 7 + > tools/testing/selftests/ftrace/README | 46 +++++++ > tools/testing/selftests/ftrace/ftracetest | 157 ++++++++++++++++++++++++ > tools/testing/selftests/ftrace/test.d/template | 4 + > 6 files changed, 216 insertions(+) > create mode 100644 tools/testing/selftests/ftrace/Makefile > create mode 100644 tools/testing/selftests/ftrace/README > create mode 100755 tools/testing/selftests/ftrace/ftracetest > create mode 100644 tools/testing/selftests/ftrace/test.d/template > > diff --git a/MAINTAINERS b/MAINTAINERS > index 5e7866a..29e22db 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -9295,6 +9295,7 @@ F: include/*/ftrace.h > F: include/linux/trace*.h > F: include/trace/ > F: kernel/trace/ > +F: tools/testing/selftests/ftrace > > TRIVIAL PATCHES > M: Jiri Kosina <trivial@kernel.org> > diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile > index 36ff2e4..45f145c 100644 > --- a/tools/testing/selftests/Makefile > +++ b/tools/testing/selftests/Makefile > @@ -14,6 +14,7 @@ TARGETS += powerpc > TARGETS += user > TARGETS += sysctl > TARGETS += firmware > +TARGETS += ftrace > > TARGETS_HOTPLUG = cpu-hotplug > TARGETS_HOTPLUG += memory-hotplug > diff --git a/tools/testing/selftests/ftrace/Makefile b/tools/testing/selftests/ftrace/Makefile > new file mode 100644 > index 0000000..76cc9f1 > --- /dev/null > +++ b/tools/testing/selftests/ftrace/Makefile > @@ -0,0 +1,7 @@ > +all: > + > +run_tests: > + @/bin/sh ./ftracetest || echo "ftrace selftests: [FAIL]" > + > +clean: > + rm -rf logs/* > diff --git a/tools/testing/selftests/ftrace/README b/tools/testing/selftests/ftrace/README > new file mode 100644 > index 0000000..ee2cef7 > --- /dev/null > +++ b/tools/testing/selftests/ftrace/README > @@ -0,0 +1,46 @@ > +Linux Ftrace Testcases > + > +This is a collection of testcases for ftrace tracing feature in the Linux > +kernel. Since ftrace exports interfaces via the debugfs, we just need > +shell scripts for testing. Feel free to add new test cases. > + > +Running the ftrace testcases > +============================ > + > +At first, you need to be the root user to run this script. > +To run all testcases: > + > + $ sudo ./ftracetest > + > +To run specific testcases: > + > + # ./ftracetest test.d/basic3.tc > + > +Or you can also run testcases under given directory: > + > + # ./ftracetest test.d/kprobe/ > + > +Contributing new testcases > +========================== > + > +Copy test.d/template to your testcase (whose filename must have *.tc > +extension) and rewrite the test description line. > + > + * The working directory of the script is <debugfs>/tracing/. > + > + * Take care with side effects as the tests are run with root privilege. > + > + * The tests should not run for a long period of time (more than 1 min.) > + These are to be unit tests. > + > + * You can add a directory for your testcases under test.d/ if needed. > + > + * The test cases should run on dash (busybox shell) for testing on > + minimal cross-build environments. > + > +TODO > +==== > + > + * Fancy colored output :) > + > + * Integrate with selftest? The second TODO can be removed since it is moved under selftests?? If you haven't already done this, could you please make sure it runs without hangs when run from the "make kselftest" target. thanks, -- Shuah -- Shuah Khan Sr. Linux Kernel Developer Samsung Research America (Silicon Valley) shuahkh@osg.samsung.com | (970) 217-8978 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 1/4] ftracetest: Initial commit for ftracetest 2014-09-18 13:07 ` Shuah Khan @ 2014-09-19 1:03 ` Masami Hiramatsu 2014-09-19 14:05 ` Shuah Khan 0 siblings, 1 reply; 14+ messages in thread From: Masami Hiramatsu @ 2014-09-19 1:03 UTC (permalink / raw) To: Shuah Khan Cc: Shuah Khan, Tom Zanussi, Oleg Nesterov, Steven Rostedt, Namhyung Kim, Fengguang Wu, Ingo Molnar, Linux Kernel Mailing List (2014/09/18 22:07), Shuah Khan wrote: > On 09/18/2014 06:04 AM, Masami Hiramatsu wrote: >> ftracetest is a collection of testcase shell-scripts for ftrace. >> To avoid regressions of ftrace, these testcases check correct >> ftrace behaviors. If someone would like to add any features on >> ftrace, the patch series should have at least one testcase for >> checking the new behavior. >> >> Changes in v4: >> - Move this under selftests. :) >> - Add a copyright and note of GPLv2. >> - Fix documents acconding to Steven's comments. >> - Fix a small bug pointed by Namhyng. >> >> Changes in v3: >> - Use "." instead of "source". >> - Don't use -e option for echo since dash doesn't support it. >> >> Changes in v2: >> - Remove unneeded 'function' keyword. >> - Add abspath and find_testcases. >> - Make OPT_TEST_CASES a local var. >> - Ensure given testcase ended with .tc. >> - Accept a directory option which has multiple testcases. >> - Change [PASSED]/[FAILED] to [PASS]/[FAIL] >> - Change the basic shell to sh (dash). >> >> Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> >> --- >> MAINTAINERS | 1 >> tools/testing/selftests/Makefile | 1 >> tools/testing/selftests/ftrace/Makefile | 7 + >> tools/testing/selftests/ftrace/README | 46 +++++++ >> tools/testing/selftests/ftrace/ftracetest | 157 ++++++++++++++++++++++++ >> tools/testing/selftests/ftrace/test.d/template | 4 + >> 6 files changed, 216 insertions(+) >> create mode 100644 tools/testing/selftests/ftrace/Makefile >> create mode 100644 tools/testing/selftests/ftrace/README >> create mode 100755 tools/testing/selftests/ftrace/ftracetest >> create mode 100644 tools/testing/selftests/ftrace/test.d/template >> >> diff --git a/MAINTAINERS b/MAINTAINERS >> index 5e7866a..29e22db 100644 >> --- a/MAINTAINERS >> +++ b/MAINTAINERS >> @@ -9295,6 +9295,7 @@ F: include/*/ftrace.h >> F: include/linux/trace*.h >> F: include/trace/ >> F: kernel/trace/ >> +F: tools/testing/selftests/ftrace >> >> TRIVIAL PATCHES >> M: Jiri Kosina <trivial@kernel.org> >> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile >> index 36ff2e4..45f145c 100644 >> --- a/tools/testing/selftests/Makefile >> +++ b/tools/testing/selftests/Makefile >> @@ -14,6 +14,7 @@ TARGETS += powerpc >> TARGETS += user >> TARGETS += sysctl >> TARGETS += firmware >> +TARGETS += ftrace >> >> TARGETS_HOTPLUG = cpu-hotplug >> TARGETS_HOTPLUG += memory-hotplug >> diff --git a/tools/testing/selftests/ftrace/Makefile b/tools/testing/selftests/ftrace/Makefile >> new file mode 100644 >> index 0000000..76cc9f1 >> --- /dev/null >> +++ b/tools/testing/selftests/ftrace/Makefile >> @@ -0,0 +1,7 @@ >> +all: >> + >> +run_tests: >> + @/bin/sh ./ftracetest || echo "ftrace selftests: [FAIL]" >> + >> +clean: >> + rm -rf logs/* >> diff --git a/tools/testing/selftests/ftrace/README b/tools/testing/selftests/ftrace/README >> new file mode 100644 >> index 0000000..ee2cef7 >> --- /dev/null >> +++ b/tools/testing/selftests/ftrace/README >> @@ -0,0 +1,46 @@ >> +Linux Ftrace Testcases >> + >> +This is a collection of testcases for ftrace tracing feature in the Linux >> +kernel. Since ftrace exports interfaces via the debugfs, we just need >> +shell scripts for testing. Feel free to add new test cases. >> + >> +Running the ftrace testcases >> +============================ >> + >> +At first, you need to be the root user to run this script. >> +To run all testcases: >> + >> + $ sudo ./ftracetest >> + >> +To run specific testcases: >> + >> + # ./ftracetest test.d/basic3.tc >> + >> +Or you can also run testcases under given directory: >> + >> + # ./ftracetest test.d/kprobe/ >> + >> +Contributing new testcases >> +========================== >> + >> +Copy test.d/template to your testcase (whose filename must have *.tc >> +extension) and rewrite the test description line. >> + >> + * The working directory of the script is <debugfs>/tracing/. >> + >> + * Take care with side effects as the tests are run with root privilege. >> + >> + * The tests should not run for a long period of time (more than 1 min.) >> + These are to be unit tests. >> + >> + * You can add a directory for your testcases under test.d/ if needed. >> + >> + * The test cases should run on dash (busybox shell) for testing on >> + minimal cross-build environments. >> + >> +TODO >> +==== >> + >> + * Fancy colored output :) >> + >> + * Integrate with selftest? > > The second TODO can be removed since it is moved under selftests?? Ah, I missed to remove that in this commit. It's already integrated. - * Integrate with selftest? Oops, and I removed it in 4/4 ... > If you haven't already done this, could you please make sure it > runs without hangs when run from the "make kselftest" target. OK, here is the last lines of the test result. == Testing sysctl behavior against /proc/sys/vm/swappiness == Writing test file ... ok Checking sysctl is not set to test value ... ok Writing sysctl from shell ... ok Resetting sysctl to original value ... ok Writing entire sysctl in single write ... ok Writing middle of sysctl after synchronized seek ... Writing beyond end of sysctl ... Writing sysctl with multiple long writes ... ok fw_filesystem: [FAIL] [1] Basic trace file check [PASS] [2] Basic test for tracers [PASS] [3] Basic trace clock test [PASS] [4] Kprobe dynamic event - adding and removing [PASS] [5] Kprobe dynamic event - busy event check [PASS] # of passed: 5 # of failed: 0 # of unresolved: 0 # of untested: 0 # of unsupported: 0 # of xfailed: 0 # of undefined(test bug): 0 Hmm, I think it should have a separation line before running ftracetest. Thank you, -- Masami HIRAMATSU Software Platform Research Dept. Linux Technology Research Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu.pt@hitachi.com ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 1/4] ftracetest: Initial commit for ftracetest 2014-09-19 1:03 ` Masami Hiramatsu @ 2014-09-19 14:05 ` Shuah Khan 2014-09-19 14:42 ` Steven Rostedt 2014-09-20 17:26 ` Masami Hiramatsu 0 siblings, 2 replies; 14+ messages in thread From: Shuah Khan @ 2014-09-19 14:05 UTC (permalink / raw) To: Masami Hiramatsu, Steven Rostedt Cc: Shuah Khan, Tom Zanussi, Oleg Nesterov, Namhyung Kim, Fengguang Wu, Ingo Molnar, Linux Kernel Mailing List, Shuah Khan On 09/18/2014 07:03 PM, Masami Hiramatsu wrote: > (2014/09/18 22:07), Shuah Khan wrote: >> On 09/18/2014 06:04 AM, Masami Hiramatsu wrote: >>> ftracetest is a collection of testcase shell-scripts for ftrace. >>> To avoid regressions of ftrace, these testcases check correct >>> ftrace behaviors. If someone would like to add any features on >>> ftrace, the patch series should have at least one testcase for >>> checking the new behavior. >>> >>> Changes in v4: >>> - Move this under selftests. :) >>> - Add a copyright and note of GPLv2. >>> - Fix documents acconding to Steven's comments. >>> - Fix a small bug pointed by Namhyng. >>> >>> Changes in v3: >>> - Use "." instead of "source". >>> - Don't use -e option for echo since dash doesn't support it. >>> >>> Changes in v2: >>> - Remove unneeded 'function' keyword. >>> - Add abspath and find_testcases. >>> - Make OPT_TEST_CASES a local var. >>> - Ensure given testcase ended with .tc. >>> - Accept a directory option which has multiple testcases. >>> - Change [PASSED]/[FAILED] to [PASS]/[FAIL] >>> - Change the basic shell to sh (dash). >>> >>> Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> >>> --- >>> MAINTAINERS | 1 >>> tools/testing/selftests/Makefile | 1 >>> tools/testing/selftests/ftrace/Makefile | 7 + >>> tools/testing/selftests/ftrace/README | 46 +++++++ >>> tools/testing/selftests/ftrace/ftracetest | 157 ++++++++++++++++++++++++ >>> tools/testing/selftests/ftrace/test.d/template | 4 + >>> 6 files changed, 216 insertions(+) >>> create mode 100644 tools/testing/selftests/ftrace/Makefile >>> create mode 100644 tools/testing/selftests/ftrace/README >>> create mode 100755 tools/testing/selftests/ftrace/ftracetest >>> create mode 100644 tools/testing/selftests/ftrace/test.d/template >>> >>> diff --git a/MAINTAINERS b/MAINTAINERS >>> index 5e7866a..29e22db 100644 >>> --- a/MAINTAINERS >>> +++ b/MAINTAINERS >>> @@ -9295,6 +9295,7 @@ F: include/*/ftrace.h >>> F: include/linux/trace*.h >>> F: include/trace/ >>> F: kernel/trace/ >>> +F: tools/testing/selftests/ftrace >>> >>> TRIVIAL PATCHES >>> M: Jiri Kosina <trivial@kernel.org> >>> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile >>> index 36ff2e4..45f145c 100644 >>> --- a/tools/testing/selftests/Makefile >>> +++ b/tools/testing/selftests/Makefile >>> @@ -14,6 +14,7 @@ TARGETS += powerpc >>> TARGETS += user >>> TARGETS += sysctl >>> TARGETS += firmware >>> +TARGETS += ftrace >>> >>> TARGETS_HOTPLUG = cpu-hotplug >>> TARGETS_HOTPLUG += memory-hotplug >>> diff --git a/tools/testing/selftests/ftrace/Makefile b/tools/testing/selftests/ftrace/Makefile >>> new file mode 100644 >>> index 0000000..76cc9f1 >>> --- /dev/null >>> +++ b/tools/testing/selftests/ftrace/Makefile >>> @@ -0,0 +1,7 @@ >>> +all: >>> + >>> +run_tests: >>> + @/bin/sh ./ftracetest || echo "ftrace selftests: [FAIL]" >>> + >>> +clean: >>> + rm -rf logs/* >>> diff --git a/tools/testing/selftests/ftrace/README b/tools/testing/selftests/ftrace/README >>> new file mode 100644 >>> index 0000000..ee2cef7 >>> --- /dev/null >>> +++ b/tools/testing/selftests/ftrace/README >>> @@ -0,0 +1,46 @@ >>> +Linux Ftrace Testcases >>> + >>> +This is a collection of testcases for ftrace tracing feature in the Linux >>> +kernel. Since ftrace exports interfaces via the debugfs, we just need >>> +shell scripts for testing. Feel free to add new test cases. >>> + >>> +Running the ftrace testcases >>> +============================ >>> + >>> +At first, you need to be the root user to run this script. >>> +To run all testcases: >>> + >>> + $ sudo ./ftracetest >>> + >>> +To run specific testcases: >>> + >>> + # ./ftracetest test.d/basic3.tc >>> + >>> +Or you can also run testcases under given directory: >>> + >>> + # ./ftracetest test.d/kprobe/ >>> + >>> +Contributing new testcases >>> +========================== >>> + >>> +Copy test.d/template to your testcase (whose filename must have *.tc >>> +extension) and rewrite the test description line. >>> + >>> + * The working directory of the script is <debugfs>/tracing/. >>> + >>> + * Take care with side effects as the tests are run with root privilege. >>> + >>> + * The tests should not run for a long period of time (more than 1 min.) >>> + These are to be unit tests. >>> + >>> + * You can add a directory for your testcases under test.d/ if needed. >>> + >>> + * The test cases should run on dash (busybox shell) for testing on >>> + minimal cross-build environments. >>> + >>> +TODO >>> +==== >>> + >>> + * Fancy colored output :) >>> + >>> + * Integrate with selftest? >> >> The second TODO can be removed since it is moved under selftests?? > > Ah, I missed to remove that in this commit. It's already integrated. > > - * Integrate with selftest? > > Oops, and I removed it in 4/4 ... If you could fix this README, that would be great. > >> If you haven't already done this, could you please make sure it >> runs without hangs when run from the "make kselftest" target. > > OK, here is the last lines of the test result. > > == Testing sysctl behavior against /proc/sys/vm/swappiness == > Writing test file ... ok > Checking sysctl is not set to test value ... ok > Writing sysctl from shell ... ok > Resetting sysctl to original value ... ok > Writing entire sysctl in single write ... ok > Writing middle of sysctl after synchronized seek ... Writing beyond end of sysctl ... Writing sysctl with multiple long writes ... ok > fw_filesystem: [FAIL] > [1] Basic trace file check [PASS] > [2] Basic test for tracers [PASS] > [3] Basic trace clock test [PASS] > [4] Kprobe dynamic event - adding and removing [PASS] > [5] Kprobe dynamic event - busy event check [PASS] > > # of passed: 5 > # of failed: 0 > # of unresolved: 0 > # of untested: 0 > # of unsupported: 0 > # of xfailed: 0 > # of undefined(test bug): 0 > > Hmm, I think it should have a separation line before running ftracetest. > I am not concerned about the spacing. Thanks for doing running the make kselftest target and sharing the results. selftests don't get built or run in integ test rings. I am working on addressing this at the moment. Steven! Could you please take this through your tree. You have my Acked-by: Shuah Khan <shuahkh@osg.samsung.com> for the selftests Makefile -- Shuah -- Shuah Khan Sr. Linux Kernel Developer Samsung Research America (Silicon Valley) shuahkh@osg.samsung.com | (970) 217-8978 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 1/4] ftracetest: Initial commit for ftracetest 2014-09-19 14:05 ` Shuah Khan @ 2014-09-19 14:42 ` Steven Rostedt 2014-09-20 17:33 ` Masami Hiramatsu 2014-09-20 17:26 ` Masami Hiramatsu 1 sibling, 1 reply; 14+ messages in thread From: Steven Rostedt @ 2014-09-19 14:42 UTC (permalink / raw) To: Shuah Khan Cc: Masami Hiramatsu, Shuah Khan, Tom Zanussi, Oleg Nesterov, Namhyung Kim, Fengguang Wu, Ingo Molnar, Linux Kernel Mailing List On Fri, 19 Sep 2014 08:05:23 -0600 Shuah Khan <shuahkh@osg.samsung.com> wrote: > I am not concerned about the spacing. > > Thanks for doing running the make kselftest target and sharing > the results. selftests don't get built or run in integ test > rings. I am working on addressing this at the moment. > > Steven! > > Could you please take this through your tree. You have my > > Acked-by: Shuah Khan <shuahkh@osg.samsung.com> > > for the selftests Makefile OK, thanks! I'll start trying to get my own personal tests working here. It may take some work as my tests may run for 10s of minutes, as they are more stress tests than a pass/fail thing. But I should have something other people can use. I'll continue using both my own personal tests as well as trying the new stuff that gets put here. -- Steve ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 1/4] ftracetest: Initial commit for ftracetest 2014-09-19 14:42 ` Steven Rostedt @ 2014-09-20 17:33 ` Masami Hiramatsu 0 siblings, 0 replies; 14+ messages in thread From: Masami Hiramatsu @ 2014-09-20 17:33 UTC (permalink / raw) To: Steven Rostedt Cc: Shuah Khan, Shuah Khan, Tom Zanussi, Oleg Nesterov, Namhyung Kim, Fengguang Wu, Ingo Molnar, Linux Kernel Mailing List (2014/09/19 23:42), Steven Rostedt wrote: > On Fri, 19 Sep 2014 08:05:23 -0600 > Shuah Khan <shuahkh@osg.samsung.com> wrote: > > >> I am not concerned about the spacing. >> >> Thanks for doing running the make kselftest target and sharing >> the results. selftests don't get built or run in integ test >> rings. I am working on addressing this at the moment. >> >> Steven! >> >> Could you please take this through your tree. You have my >> >> Acked-by: Shuah Khan <shuahkh@osg.samsung.com> >> >> for the selftests Makefile > > OK, thanks! > > I'll start trying to get my own personal tests working here. Great :) > > It may take some work as my tests may run for 10s of minutes, as they > are more stress tests than a pass/fail thing. But I should have > something other people can use. I'll continue using both my own > personal tests as well as trying the new stuff that gets put here. I think you can also put your stress tests in the ftrace/ directory (or just make a sub-directory for them). Even ftracetest doesn't run them, we can update Makefile so that kselftest can run them. For example, I will add a testcase for my IPMODFIY as a separated test(ftrace/ipmodify), since it involves some special kernel modules and doesn't use ftrace debugfs interface but tests ftrace(function trace). Thank you, -- Masami HIRAMATSU Software Platform Research Dept. Linux Technology Research Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu.pt@hitachi.com ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Re: [PATCH v4 1/4] ftracetest: Initial commit for ftracetest 2014-09-19 14:05 ` Shuah Khan 2014-09-19 14:42 ` Steven Rostedt @ 2014-09-20 17:26 ` Masami Hiramatsu 2014-09-22 16:00 ` Steven Rostedt 1 sibling, 1 reply; 14+ messages in thread From: Masami Hiramatsu @ 2014-09-20 17:26 UTC (permalink / raw) To: Shuah Khan Cc: Steven Rostedt, Shuah Khan, Tom Zanussi, Oleg Nesterov, Namhyung Kim, Fengguang Wu, Ingo Molnar, Linux Kernel Mailing List (2014/09/19 23:05), Shuah Khan wrote: >>>> +TODO >>>> +==== >>>> + >>>> + * Fancy colored output :) >>>> + >>>> + * Integrate with selftest? >>> >>> The second TODO can be removed since it is moved under selftests?? >> >> Ah, I missed to remove that in this commit. It's already integrated. >> >> - * Integrate with selftest? >> >> Oops, and I removed it in 4/4 ... > > If you could fix this README, that would be great. Yeah, but I guess if all of this series are merged, it may be not such a big flaw... Steven, would I better resend updates? >>> If you haven't already done this, could you please make sure it >>> runs without hangs when run from the "make kselftest" target. >> >> OK, here is the last lines of the test result. >> >> == Testing sysctl behavior against /proc/sys/vm/swappiness == >> Writing test file ... ok >> Checking sysctl is not set to test value ... ok >> Writing sysctl from shell ... ok >> Resetting sysctl to original value ... ok >> Writing entire sysctl in single write ... ok >> Writing middle of sysctl after synchronized seek ... Writing beyond end of sysctl ... Writing sysctl with multiple long writes ... ok >> fw_filesystem: [FAIL] >> [1] Basic trace file check [PASS] >> [2] Basic test for tracers [PASS] >> [3] Basic trace clock test [PASS] >> [4] Kprobe dynamic event - adding and removing [PASS] >> [5] Kprobe dynamic event - busy event check [PASS] >> >> # of passed: 5 >> # of failed: 0 >> # of unresolved: 0 >> # of untested: 0 >> # of unsupported: 0 >> # of xfailed: 0 >> # of undefined(test bug): 0 >> >> Hmm, I think it should have a separation line before running ftracetest. >> > > I am not concerned about the spacing. OK, anyway I can make an update for that afterwords. > Thanks for doing running the make kselftest target and sharing > the results. selftests don't get built or run in integ test > rings. I am working on addressing this at the moment. > > Steven! > > Could you please take this through your tree. You have my > > Acked-by: Shuah Khan <shuahkh@osg.samsung.com> > > for the selftests Makefile Thanks! > > -- Shuah > -- Masami HIRAMATSU Software Platform Research Dept. Linux Technology Research Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu.pt@hitachi.com ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 1/4] ftracetest: Initial commit for ftracetest 2014-09-20 17:26 ` Masami Hiramatsu @ 2014-09-22 16:00 ` Steven Rostedt 2014-09-22 23:37 ` Masami Hiramatsu 0 siblings, 1 reply; 14+ messages in thread From: Steven Rostedt @ 2014-09-22 16:00 UTC (permalink / raw) To: Masami Hiramatsu Cc: Shuah Khan, Shuah Khan, Tom Zanussi, Oleg Nesterov, Namhyung Kim, Fengguang Wu, Ingo Molnar, Linux Kernel Mailing List On Sun, 21 Sep 2014 02:26:37 +0900 Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> wrote: > Steven, would I better resend updates? > Yeah, can you please send a v5 with all the updates, just so I don't miss anything. I'm still not at 100% capacity and this will help a lot. Also, can you please add everyone's acked-bys and reviewed-bys that have posted so far. Thanks! -- Steve ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Re: [PATCH v4 1/4] ftracetest: Initial commit for ftracetest 2014-09-22 16:00 ` Steven Rostedt @ 2014-09-22 23:37 ` Masami Hiramatsu 0 siblings, 0 replies; 14+ messages in thread From: Masami Hiramatsu @ 2014-09-22 23:37 UTC (permalink / raw) To: Steven Rostedt Cc: Shuah Khan, Shuah Khan, Tom Zanussi, Oleg Nesterov, Namhyung Kim, Fengguang Wu, Ingo Molnar, Linux Kernel Mailing List (2014/09/23 1:00), Steven Rostedt wrote: > On Sun, 21 Sep 2014 02:26:37 +0900 > Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> wrote: > > >> Steven, would I better resend updates? >> > > Yeah, can you please send a v5 with all the updates, just so I don't > miss anything. I'm still not at 100% capacity and this will help a lot. > > Also, can you please add everyone's acked-bys and reviewed-bys that > have posted so far. OK, I'll update it soon :) Thank you, > > Thanks! > > -- Steve > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > -- Masami HIRAMATSU Software Platform Research Dept. Linux Technology Research Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu.pt@hitachi.com ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v4 2/4] ftracetest: Add ftrace basic testcases 2014-09-18 12:04 [PATCH v4 0/4] ftrace: Add a ftrace test collection Masami Hiramatsu 2014-09-18 12:04 ` [PATCH v4 1/4] ftracetest: Initial commit for ftracetest Masami Hiramatsu @ 2014-09-18 12:04 ` Masami Hiramatsu 2014-09-18 12:04 ` [PATCH v4 3/4] ftracetest: Add kprobe " Masami Hiramatsu 2014-09-18 12:05 ` [PATCH v4 4/4] ftracetest: Add POSIX.3 standard and XFAIL result codes Masami Hiramatsu 3 siblings, 0 replies; 14+ messages in thread From: Masami Hiramatsu @ 2014-09-18 12:04 UTC (permalink / raw) To: Shuah Khan, Tom Zanussi, Oleg Nesterov, Steven Rostedt, Namhyung Kim, Fengguang Wu, Ingo Molnar Cc: Linux Kernel Mailing List Add ftrace basic testcases. This just checks ftrace debugfs interface works as it is designed. Changes in v2: - Change shell to sh instead of bash. Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> --- .../selftests/ftrace/test.d/00basic/basic1.tc | 3 +++ .../selftests/ftrace/test.d/00basic/basic2.tc | 6 ++++++ .../selftests/ftrace/test.d/00basic/basic3.tc | 8 ++++++++ 3 files changed, 17 insertions(+) create mode 100644 tools/testing/selftests/ftrace/test.d/00basic/basic1.tc create mode 100644 tools/testing/selftests/ftrace/test.d/00basic/basic2.tc create mode 100644 tools/testing/selftests/ftrace/test.d/00basic/basic3.tc diff --git a/tools/testing/selftests/ftrace/test.d/00basic/basic1.tc b/tools/testing/selftests/ftrace/test.d/00basic/basic1.tc new file mode 100644 index 0000000..9980ff1 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/00basic/basic1.tc @@ -0,0 +1,3 @@ +#!/bin/sh +# description: Basic trace file check +test -f README -a -f trace -a -f tracing_on -a -f trace_pipe diff --git a/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc b/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc new file mode 100644 index 0000000..b04f30d --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc @@ -0,0 +1,6 @@ +#!/bin/sh +# description: Basic test for tracers +for t in `cat available_tracers`; do + echo $t > current_tracer || exit 1 +done +echo nop > current_tracer diff --git a/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc b/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc new file mode 100644 index 0000000..0c1a3a2 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc @@ -0,0 +1,8 @@ +#!/bin/sh +# description: Basic trace clock test +[ -f trace_clock ] || exit 1 +for c in `cat trace_clock | tr -d \[\]`; do + echo $c > trace_clock || exit 1 + grep '\['$c'\]' trace_clock || exit 1 +done +echo local > trace_clock ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v4 3/4] ftracetest: Add kprobe basic testcases 2014-09-18 12:04 [PATCH v4 0/4] ftrace: Add a ftrace test collection Masami Hiramatsu 2014-09-18 12:04 ` [PATCH v4 1/4] ftracetest: Initial commit for ftracetest Masami Hiramatsu 2014-09-18 12:04 ` [PATCH v4 2/4] ftracetest: Add ftrace basic testcases Masami Hiramatsu @ 2014-09-18 12:04 ` Masami Hiramatsu 2014-09-18 12:05 ` [PATCH v4 4/4] ftracetest: Add POSIX.3 standard and XFAIL result codes Masami Hiramatsu 3 siblings, 0 replies; 14+ messages in thread From: Masami Hiramatsu @ 2014-09-18 12:04 UTC (permalink / raw) To: Shuah Khan, Tom Zanussi, Oleg Nesterov, Steven Rostedt, Namhyung Kim, Fengguang Wu, Ingo Molnar Cc: Linux Kernel Mailing List Add basic testcases for kprobe dynamic events. This also shows that the ftracetest accepts sub-directory for new testcases. Changes in v2: - Change shell to sh instead of bash. Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> --- .../ftrace/test.d/kprobe/add_and_remove.tc | 11 +++++++++++ .../selftests/ftrace/test.d/kprobe/busy_check.tc | 14 ++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc create mode 100644 tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc b/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc new file mode 100644 index 0000000..5ddfb47 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc @@ -0,0 +1,11 @@ +#!/bin/sh +# description: Kprobe dynamic event - adding and removing + +[ -f kprobe_events ] || exit 1 + +echo 0 > events/enable || exit 1 +echo > kprobe_events || exit 1 +echo p:myevent do_fork > kprobe_events || exit 1 +grep myevent kprobe_events || exit 1 +[ -d events/kprobes/myevent ] || exit 1 +echo > kprobe_events diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc b/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc new file mode 100644 index 0000000..588fde97 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc @@ -0,0 +1,14 @@ +#!/bin/sh +# description: Kprobe dynamic event - busy event check + +[ -f kprobe_events ] || exit 1 + +echo 0 > events/enable || exit 1 +echo > kprobe_events || exit 1 +echo p:myevent do_fork > kprobe_events || exit 1 +[ -d events/kprobes/myevent ] || exit 1 +echo 1 > events/kprobes/myevent/enable || exit 1 +echo > kprobe_events && exit 1 # this must fail +echo 0 > events/kprobes/myevent/enable || exit 1 +echo > kprobe_events # this must succeed + ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v4 4/4] ftracetest: Add POSIX.3 standard and XFAIL result codes 2014-09-18 12:04 [PATCH v4 0/4] ftrace: Add a ftrace test collection Masami Hiramatsu ` (2 preceding siblings ...) 2014-09-18 12:04 ` [PATCH v4 3/4] ftracetest: Add kprobe " Masami Hiramatsu @ 2014-09-18 12:05 ` Masami Hiramatsu 2014-09-22 15:47 ` Namhyung Kim 3 siblings, 1 reply; 14+ messages in thread From: Masami Hiramatsu @ 2014-09-18 12:05 UTC (permalink / raw) To: Shuah Khan, Tom Zanussi, Oleg Nesterov, Steven Rostedt, Namhyung Kim, Fengguang Wu, Ingo Molnar Cc: Linux Kernel Mailing List Add XFAIL and POSIX 1003.3 standard codes (UNRESOLVED/ UNTESTED/UNSUPPORTED) as result codes. These are used for the results that test case is expected to fail or unsupported feature (by config). To return these result code, this introduces exit_unresolved, exit_untested, exit_unsupported and exit_xfail functions, which use real-time signals to notify the result code to ftracetest. This also set "errexit" option for the testcases, so that the tests don't need to exit explicitly. Changes in v4: - Remove XPASS and short-names. - Use real-time signals for result code. - Simplify test cases by using errexit option. - Add sample scripts for result code. Changes in v3: - Add UNRESOLVED/UNTESTED codes. - Fix to handle undefined codes. - Add a document about return codes. - Fix to show failure logs. - Don't use -e option for echo since dash doesn't support it. Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> --- tools/testing/selftests/ftrace/README | 38 ++++++ tools/testing/selftests/ftrace/ftracetest | 122 ++++++++++++++++++-- tools/testing/selftests/ftrace/samples/fail.tc | 4 + tools/testing/selftests/ftrace/samples/pass.tc | 3 .../testing/selftests/ftrace/samples/unresolved.tc | 4 + .../selftests/ftrace/samples/unsupported.tc | 3 tools/testing/selftests/ftrace/samples/untested.tc | 3 tools/testing/selftests/ftrace/samples/xfail.tc | 3 .../selftests/ftrace/test.d/00basic/basic2.tc | 3 .../selftests/ftrace/test.d/00basic/basic3.tc | 6 - .../ftrace/test.d/kprobe/add_and_remove.tc | 12 +- .../selftests/ftrace/test.d/kprobe/busy_check.tc | 15 +- tools/testing/selftests/ftrace/test.d/template | 5 + 13 files changed, 187 insertions(+), 34 deletions(-) create mode 100644 tools/testing/selftests/ftrace/samples/fail.tc create mode 100644 tools/testing/selftests/ftrace/samples/pass.tc create mode 100644 tools/testing/selftests/ftrace/samples/unresolved.tc create mode 100644 tools/testing/selftests/ftrace/samples/unsupported.tc create mode 100644 tools/testing/selftests/ftrace/samples/untested.tc create mode 100644 tools/testing/selftests/ftrace/samples/xfail.tc diff --git a/tools/testing/selftests/ftrace/README b/tools/testing/selftests/ftrace/README index ee2cef7..182e76f 100644 --- a/tools/testing/selftests/ftrace/README +++ b/tools/testing/selftests/ftrace/README @@ -38,9 +38,45 @@ extension) and rewrite the test description line. * The test cases should run on dash (busybox shell) for testing on minimal cross-build environments. + * Note that the tests are run with "set -e" (errexit) option. If any + command fails, the test will be terminated immediately. + + * The tests can return some result codes instead of pass or fail by + using exit_unresolved, exit_untested, exit_unsupported and exit_xfail. + +Result code +=========== + +Ftracetest supports following result codes. + + * PASS: The test succeeded as expected. The test which exits with 0 is + counted as passed test. + + * FAIL: The test failed, but was expected to succeed. The test which exits + with !0 is counted as failed test. + + * UNRESOLVED: The test produced unclear or intermidiate results. + for example, the test was interrupted + or the test depends on a previous test, which failed. + or the test was set up incorrectly + The test which is in above situation, must call exit_unresolved. + + * UNTESTED: The test was not run, currently just a placeholder. + In this case, the test must call exit_untested. + + * UNSUPPORTED: The test failed because of lack of feature. + In this case, the test must call exit_unsupported. + + * XFAIL: The test failed, and was expected to fail. + To return XFAIL, call exit_xfail from the test. + +There are some sample test scripts for result code under samples/. +You can also run samples as below: + + # ./ftracetest samples/ + TODO ==== * Fancy colored output :) - * Integrate with selftest? diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests/ftrace/ftracetest index 02f4e7a..2f7f8da0 100755 --- a/tools/testing/selftests/ftrace/ftracetest +++ b/tools/testing/selftests/ftrace/ftracetest @@ -112,22 +112,105 @@ catlog() { #file } # Testcase management +# Test result codes - Dejagnu extended code +PASS=0 # The test succeeded. +FAIL=1 # The test failed, but was expected to succeed. +UNRESOLVED=2 # The test produced indeterminate results. (e.g. interrupted) +UNTESTED=3 # The test was not run, currently just a placeholder. +UNSUPPORTED=4 # The test failed because of lack of feature. +XFAIL=5 # The test failed, and was expected to fail. + +# Accumulations PASSED_CASES= FAILED_CASES= +UNRESOLVED_CASES= +UNTESTED_CASES= +UNSUPPORTED_CASES= +XFAILED_CASES= +UNDEFINED_CASES= + CASENO=0 testcase() { # testfile CASENO=$((CASENO+1)) prlog -n "[$CASENO]"`grep "^#[ \t]*description:" $1 | cut -f2 -d:` } -failed() { - prlog " [FAIL]" - FAILED_CASES="$FAILED_CASES $CASENO" + +eval_result() { # retval sigval + local retval=$2 + if [ $2 -eq 0 ]; then + test $1 -ne 0 && retval=$FAIL + fi + case $retval in + $PASS) + prlog " [PASS]" + PASSED_CASES="$PASSED_CASES $CASENO" + return 0 + ;; + $FAIL) + prlog " [FAIL]" + FAILED_CASES="$FAILED_CASES $CASENO" + return 1 # this is a bug. + ;; + $UNRESOLVED) + prlog " [UNRESOLVED]" + UNRESOLVED_CASES="$UNRESOLVED_CASES $CASENO" + return 1 # this is a kind of bug.. something happened. + ;; + $UNTESTED) + prlog " [UNTESTED]" + UNTESTED_CASES="$UNTESTED_CASES $CASENO" + return 0 + ;; + $UNSUPPORTED) + prlog " [UNSUPPORTED]" + UNSUPPORTED_CASES="$UNSUPPORTED_CASES $CASENO" + return 0 # this is not a bug + ;; + $XFAIL) + prlog " [XFAIL]" + XFAILED_CASES="$XFAILED_CASES $CASENO" + return 0 + ;; + *) + prlog " [UNDEFINED]" + UNDEFINED_CASES="$UNDEFINED_CASES $CASENO" + return 1 # this must be a test bug + ;; + esac +} + +# Signal handling for result codes +SIG_RESULT= +SIG_BASE=36 # Use realtime signals +SIG_PID=$$ + +SIG_UNRESOLVED=$((SIG_BASE + UNRESOLVED)) +exit_unresolved () { + kill -s $SIG_UNRESOLVED $SIG_PID + exit 0 +} +trap 'SIG_RESULT=$UNRESOLVED' $SIG_UNRESOLVED + +SIG_UNTESTED=$((SIG_BASE + UNTESTED)) +exit_untested () { + kill -s $SIG_UNTESTED $SIG_PID + exit 0 } -passed() { - prlog " [PASS]" - PASSED_CASES="$PASSED_CASES $CASENO" +trap 'SIG_RESULT=$UNTESTED' $SIG_UNTESTED + +SIG_UNSUPPORTED=$((SIG_BASE + UNSUPPORTED)) +exit_unsupported () { + kill -s $SIG_UNSUPPORTED $SIG_PID + exit 0 } +trap 'SIG_RESULT=$UNSUPPORTED' $SIG_UNSUPPORTED +SIG_XFAIL=$((SIG_BASE + XFAIL)) +exit_xfail () { + kill -s $SIG_XFAIL $SIG_PID + exit 0 +} +trap 'SIG_RESULT=$XFAIL' $SIG_XFAIL # Run one test case run_test() { # testfile @@ -135,14 +218,16 @@ run_test() { # testfile local testlog=`mktemp --tmpdir=$LOG_DIR ${testname}-XXXXXX.log` testcase $1 echo "execute: "$1 > $testlog - (cd $TRACING_DIR; set -x ; . $1) >> $testlog 2>&1 - ret=$? - if [ $ret -ne 0 ]; then - failed - catlog $testlog - else - passed + SIG_RESULT=0 + # setup PID and PPID, $$ is not updated. + (cd $TRACING_DIR; read PID _ < /proc/self/stat ; + set -e; set -x; . $1) >> $testlog 2>&1 + eval_result $? $SIG_RESULT + if [ $? -eq 0 ]; then + # Remove test log if the test was done as it was expected. [ $KEEP_LOG -eq 0 ] && rm $testlog + else + catlog $testlog fi } @@ -150,8 +235,15 @@ run_test() { # testfile for t in $TEST_CASES; do run_test $t done + prlog "" prlog "# of passed: " `echo $PASSED_CASES | wc -w` prlog "# of failed: " `echo $FAILED_CASES | wc -w` - -test -z "$FAILED_CASES" # if no error, return 0 +prlog "# of unresolved: " `echo $UNRESOLVED_CASES | wc -w` +prlog "# of untested: " `echo $UNTESTED_CASES | wc -w` +prlog "# of unsupported: " `echo $UNSUPPORTED_CASES | wc -w` +prlog "# of xfailed: " `echo $XFAILED_CASES | wc -w` +prlog "# of undefined(test bug): " `echo $UNDEFINED_CASES | wc -w` + +# if no error, return 0 +test -z "$FAILED_CASES$UNDEFINED_CASES$UNRESOLVED_CASES" diff --git a/tools/testing/selftests/ftrace/samples/fail.tc b/tools/testing/selftests/ftrace/samples/fail.tc new file mode 100644 index 0000000..15e35b9 --- /dev/null +++ b/tools/testing/selftests/ftrace/samples/fail.tc @@ -0,0 +1,4 @@ +#!/bin/sh +# description: failure-case example +cat non-exist-file +echo "this is not executed" diff --git a/tools/testing/selftests/ftrace/samples/pass.tc b/tools/testing/selftests/ftrace/samples/pass.tc new file mode 100644 index 0000000..d015493 --- /dev/null +++ b/tools/testing/selftests/ftrace/samples/pass.tc @@ -0,0 +1,3 @@ +#!/bin/sh +# description: pass-case example +return 0 diff --git a/tools/testing/selftests/ftrace/samples/unresolved.tc b/tools/testing/selftests/ftrace/samples/unresolved.tc new file mode 100644 index 0000000..41e99d3 --- /dev/null +++ b/tools/testing/selftests/ftrace/samples/unresolved.tc @@ -0,0 +1,4 @@ +#!/bin/sh +# description: unresolved-case example +trap exit_unresolved INT +kill -INT $PID diff --git a/tools/testing/selftests/ftrace/samples/unsupported.tc b/tools/testing/selftests/ftrace/samples/unsupported.tc new file mode 100644 index 0000000..45910ff --- /dev/null +++ b/tools/testing/selftests/ftrace/samples/unsupported.tc @@ -0,0 +1,3 @@ +#!/bin/sh +# description: unsupported-case example +exit_unsupported diff --git a/tools/testing/selftests/ftrace/samples/untested.tc b/tools/testing/selftests/ftrace/samples/untested.tc new file mode 100644 index 0000000..35a4594 --- /dev/null +++ b/tools/testing/selftests/ftrace/samples/untested.tc @@ -0,0 +1,3 @@ +#!/bin/sh +# description: untested-case example +exit_untested diff --git a/tools/testing/selftests/ftrace/samples/xfail.tc b/tools/testing/selftests/ftrace/samples/xfail.tc new file mode 100644 index 0000000..9dd3953 --- /dev/null +++ b/tools/testing/selftests/ftrace/samples/xfail.tc @@ -0,0 +1,3 @@ +#!/bin/sh +# description: xfail-case example +cat non-exist-file || exit_xfail diff --git a/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc b/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc index b04f30d..bf9a7b0 100644 --- a/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc +++ b/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc @@ -1,6 +1,7 @@ #!/bin/sh # description: Basic test for tracers +test -f available_tracers for t in `cat available_tracers`; do - echo $t > current_tracer || exit 1 + echo $t > current_tracer done echo nop > current_tracer diff --git a/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc b/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc index 0c1a3a2..bde6625 100644 --- a/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc +++ b/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc @@ -1,8 +1,8 @@ #!/bin/sh # description: Basic trace clock test -[ -f trace_clock ] || exit 1 +test -f trace_clock for c in `cat trace_clock | tr -d \[\]`; do - echo $c > trace_clock || exit 1 - grep '\['$c'\]' trace_clock || exit 1 + echo $c > trace_clock + grep '\['$c'\]' trace_clock done echo local > trace_clock diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc b/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc index 5ddfb47..1b8b665 100644 --- a/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc +++ b/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc @@ -1,11 +1,11 @@ #!/bin/sh # description: Kprobe dynamic event - adding and removing -[ -f kprobe_events ] || exit 1 +[ -f kprobe_events ] || exit_unsupported # this is configurable -echo 0 > events/enable || exit 1 -echo > kprobe_events || exit 1 -echo p:myevent do_fork > kprobe_events || exit 1 -grep myevent kprobe_events || exit 1 -[ -d events/kprobes/myevent ] || exit 1 +echo 0 > events/enable +echo > kprobe_events +echo p:myevent do_fork > kprobe_events +grep myevent kprobe_events +test -d events/kprobes/myevent echo > kprobe_events diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc b/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc index 588fde97..b55c840 100644 --- a/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc +++ b/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc @@ -1,14 +1,13 @@ #!/bin/sh # description: Kprobe dynamic event - busy event check -[ -f kprobe_events ] || exit 1 +[ -f kprobe_events ] || exit_unsupported -echo 0 > events/enable || exit 1 -echo > kprobe_events || exit 1 -echo p:myevent do_fork > kprobe_events || exit 1 -[ -d events/kprobes/myevent ] || exit 1 -echo 1 > events/kprobes/myevent/enable || exit 1 +echo 0 > events/enable +echo > kprobe_events +echo p:myevent do_fork > kprobe_events +test -d events/kprobes/myevent +echo 1 > events/kprobes/myevent/enable echo > kprobe_events && exit 1 # this must fail -echo 0 > events/kprobes/myevent/enable || exit 1 +echo 0 > events/kprobes/myevent/enable echo > kprobe_events # this must succeed - diff --git a/tools/testing/selftests/ftrace/test.d/template b/tools/testing/selftests/ftrace/test.d/template index ce5f735..5448f7a 100644 --- a/tools/testing/selftests/ftrace/test.d/template +++ b/tools/testing/selftests/ftrace/test.d/template @@ -1,4 +1,9 @@ #!/bin/sh # description: %HERE DESCRIBE WHAT THIS DOES% # you have to add ".tc" extention for your testcase file +# Note that all tests are run with "errexit" option. + exit 0 # Return 0 if the test is passed, otherwise return !0 +# If the test could not run because of lack of feature, call exit_unsupported +# If the test returned unclear results, call exit_unresolved +# If the test is a dummy, or a placeholder, call exit_untested ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v4 4/4] ftracetest: Add POSIX.3 standard and XFAIL result codes 2014-09-18 12:05 ` [PATCH v4 4/4] ftracetest: Add POSIX.3 standard and XFAIL result codes Masami Hiramatsu @ 2014-09-22 15:47 ` Namhyung Kim 0 siblings, 0 replies; 14+ messages in thread From: Namhyung Kim @ 2014-09-22 15:47 UTC (permalink / raw) To: Masami Hiramatsu Cc: Shuah Khan, Tom Zanussi, Oleg Nesterov, Steven Rostedt, Fengguang Wu, Ingo Molnar, Linux Kernel Mailing List Hi Masami, 2014-09-18 (목), 12:05 +0000, Masami Hiramatsu: > Add XFAIL and POSIX 1003.3 standard codes (UNRESOLVED/ > UNTESTED/UNSUPPORTED) as result codes. These are used for the > results that test case is expected to fail or unsupported > feature (by config). > > To return these result code, this introduces exit_unresolved, > exit_untested, exit_unsupported and exit_xfail functions, > which use real-time signals to notify the result code to > ftracetest. > > This also set "errexit" option for the testcases, so that > the tests don't need to exit explicitly. Looks much better than before! Thanks, Namhyung > > Changes in v4: > - Remove XPASS and short-names. > - Use real-time signals for result code. > - Simplify test cases by using errexit option. > - Add sample scripts for result code. > > Changes in v3: > - Add UNRESOLVED/UNTESTED codes. > - Fix to handle undefined codes. > - Add a document about return codes. > - Fix to show failure logs. > - Don't use -e option for echo since dash doesn't support it. > > Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> > --- > tools/testing/selftests/ftrace/README | 38 ++++++ > tools/testing/selftests/ftrace/ftracetest | 122 ++++++++++++++++++-- > tools/testing/selftests/ftrace/samples/fail.tc | 4 + > tools/testing/selftests/ftrace/samples/pass.tc | 3 > .../testing/selftests/ftrace/samples/unresolved.tc | 4 + > .../selftests/ftrace/samples/unsupported.tc | 3 > tools/testing/selftests/ftrace/samples/untested.tc | 3 > tools/testing/selftests/ftrace/samples/xfail.tc | 3 > .../selftests/ftrace/test.d/00basic/basic2.tc | 3 > .../selftests/ftrace/test.d/00basic/basic3.tc | 6 - > .../ftrace/test.d/kprobe/add_and_remove.tc | 12 +- > .../selftests/ftrace/test.d/kprobe/busy_check.tc | 15 +- > tools/testing/selftests/ftrace/test.d/template | 5 + > 13 files changed, 187 insertions(+), 34 deletions(-) > create mode 100644 tools/testing/selftests/ftrace/samples/fail.tc > create mode 100644 tools/testing/selftests/ftrace/samples/pass.tc > create mode 100644 tools/testing/selftests/ftrace/samples/unresolved.tc > create mode 100644 tools/testing/selftests/ftrace/samples/unsupported.tc > create mode 100644 tools/testing/selftests/ftrace/samples/untested.tc > create mode 100644 tools/testing/selftests/ftrace/samples/xfail.tc > > diff --git a/tools/testing/selftests/ftrace/README b/tools/testing/selftests/ftrace/README > index ee2cef7..182e76f 100644 > --- a/tools/testing/selftests/ftrace/README > +++ b/tools/testing/selftests/ftrace/README > @@ -38,9 +38,45 @@ extension) and rewrite the test description line. > * The test cases should run on dash (busybox shell) for testing on > minimal cross-build environments. > > + * Note that the tests are run with "set -e" (errexit) option. If any > + command fails, the test will be terminated immediately. > + > + * The tests can return some result codes instead of pass or fail by > + using exit_unresolved, exit_untested, exit_unsupported and exit_xfail. > + > +Result code > +=========== > + > +Ftracetest supports following result codes. > + > + * PASS: The test succeeded as expected. The test which exits with 0 is > + counted as passed test. > + > + * FAIL: The test failed, but was expected to succeed. The test which exits > + with !0 is counted as failed test. > + > + * UNRESOLVED: The test produced unclear or intermidiate results. > + for example, the test was interrupted > + or the test depends on a previous test, which failed. > + or the test was set up incorrectly > + The test which is in above situation, must call exit_unresolved. > + > + * UNTESTED: The test was not run, currently just a placeholder. > + In this case, the test must call exit_untested. > + > + * UNSUPPORTED: The test failed because of lack of feature. > + In this case, the test must call exit_unsupported. > + > + * XFAIL: The test failed, and was expected to fail. > + To return XFAIL, call exit_xfail from the test. > + > +There are some sample test scripts for result code under samples/. > +You can also run samples as below: > + > + # ./ftracetest samples/ > + > TODO > ==== > > * Fancy colored output :) > > - * Integrate with selftest? > diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests/ftrace/ftracetest > index 02f4e7a..2f7f8da0 100755 > --- a/tools/testing/selftests/ftrace/ftracetest > +++ b/tools/testing/selftests/ftrace/ftracetest > @@ -112,22 +112,105 @@ catlog() { #file > } > > # Testcase management > +# Test result codes - Dejagnu extended code > +PASS=0 # The test succeeded. > +FAIL=1 # The test failed, but was expected to succeed. > +UNRESOLVED=2 # The test produced indeterminate results. (e.g. interrupted) > +UNTESTED=3 # The test was not run, currently just a placeholder. > +UNSUPPORTED=4 # The test failed because of lack of feature. > +XFAIL=5 # The test failed, and was expected to fail. > + > +# Accumulations > PASSED_CASES= > FAILED_CASES= > +UNRESOLVED_CASES= > +UNTESTED_CASES= > +UNSUPPORTED_CASES= > +XFAILED_CASES= > +UNDEFINED_CASES= > + > CASENO=0 > testcase() { # testfile > CASENO=$((CASENO+1)) > prlog -n "[$CASENO]"`grep "^#[ \t]*description:" $1 | cut -f2 -d:` > } > -failed() { > - prlog " [FAIL]" > - FAILED_CASES="$FAILED_CASES $CASENO" > + > +eval_result() { # retval sigval > + local retval=$2 > + if [ $2 -eq 0 ]; then > + test $1 -ne 0 && retval=$FAIL > + fi > + case $retval in > + $PASS) > + prlog " [PASS]" > + PASSED_CASES="$PASSED_CASES $CASENO" > + return 0 > + ;; > + $FAIL) > + prlog " [FAIL]" > + FAILED_CASES="$FAILED_CASES $CASENO" > + return 1 # this is a bug. > + ;; > + $UNRESOLVED) > + prlog " [UNRESOLVED]" > + UNRESOLVED_CASES="$UNRESOLVED_CASES $CASENO" > + return 1 # this is a kind of bug.. something happened. > + ;; > + $UNTESTED) > + prlog " [UNTESTED]" > + UNTESTED_CASES="$UNTESTED_CASES $CASENO" > + return 0 > + ;; > + $UNSUPPORTED) > + prlog " [UNSUPPORTED]" > + UNSUPPORTED_CASES="$UNSUPPORTED_CASES $CASENO" > + return 0 # this is not a bug > + ;; > + $XFAIL) > + prlog " [XFAIL]" > + XFAILED_CASES="$XFAILED_CASES $CASENO" > + return 0 > + ;; > + *) > + prlog " [UNDEFINED]" > + UNDEFINED_CASES="$UNDEFINED_CASES $CASENO" > + return 1 # this must be a test bug > + ;; > + esac > +} > + > +# Signal handling for result codes > +SIG_RESULT= > +SIG_BASE=36 # Use realtime signals > +SIG_PID=$$ > + > +SIG_UNRESOLVED=$((SIG_BASE + UNRESOLVED)) > +exit_unresolved () { > + kill -s $SIG_UNRESOLVED $SIG_PID > + exit 0 > +} > +trap 'SIG_RESULT=$UNRESOLVED' $SIG_UNRESOLVED > + > +SIG_UNTESTED=$((SIG_BASE + UNTESTED)) > +exit_untested () { > + kill -s $SIG_UNTESTED $SIG_PID > + exit 0 > } > -passed() { > - prlog " [PASS]" > - PASSED_CASES="$PASSED_CASES $CASENO" > +trap 'SIG_RESULT=$UNTESTED' $SIG_UNTESTED > + > +SIG_UNSUPPORTED=$((SIG_BASE + UNSUPPORTED)) > +exit_unsupported () { > + kill -s $SIG_UNSUPPORTED $SIG_PID > + exit 0 > } > +trap 'SIG_RESULT=$UNSUPPORTED' $SIG_UNSUPPORTED > > +SIG_XFAIL=$((SIG_BASE + XFAIL)) > +exit_xfail () { > + kill -s $SIG_XFAIL $SIG_PID > + exit 0 > +} > +trap 'SIG_RESULT=$XFAIL' $SIG_XFAIL > > # Run one test case > run_test() { # testfile > @@ -135,14 +218,16 @@ run_test() { # testfile > local testlog=`mktemp --tmpdir=$LOG_DIR ${testname}-XXXXXX.log` > testcase $1 > echo "execute: "$1 > $testlog > - (cd $TRACING_DIR; set -x ; . $1) >> $testlog 2>&1 > - ret=$? > - if [ $ret -ne 0 ]; then > - failed > - catlog $testlog > - else > - passed > + SIG_RESULT=0 > + # setup PID and PPID, $$ is not updated. > + (cd $TRACING_DIR; read PID _ < /proc/self/stat ; > + set -e; set -x; . $1) >> $testlog 2>&1 > + eval_result $? $SIG_RESULT > + if [ $? -eq 0 ]; then > + # Remove test log if the test was done as it was expected. > [ $KEEP_LOG -eq 0 ] && rm $testlog > + else > + catlog $testlog > fi > } > > @@ -150,8 +235,15 @@ run_test() { # testfile > for t in $TEST_CASES; do > run_test $t > done > + > prlog "" > prlog "# of passed: " `echo $PASSED_CASES | wc -w` > prlog "# of failed: " `echo $FAILED_CASES | wc -w` > - > -test -z "$FAILED_CASES" # if no error, return 0 > +prlog "# of unresolved: " `echo $UNRESOLVED_CASES | wc -w` > +prlog "# of untested: " `echo $UNTESTED_CASES | wc -w` > +prlog "# of unsupported: " `echo $UNSUPPORTED_CASES | wc -w` > +prlog "# of xfailed: " `echo $XFAILED_CASES | wc -w` > +prlog "# of undefined(test bug): " `echo $UNDEFINED_CASES | wc -w` > + > +# if no error, return 0 > +test -z "$FAILED_CASES$UNDEFINED_CASES$UNRESOLVED_CASES" > diff --git a/tools/testing/selftests/ftrace/samples/fail.tc b/tools/testing/selftests/ftrace/samples/fail.tc > new file mode 100644 > index 0000000..15e35b9 > --- /dev/null > +++ b/tools/testing/selftests/ftrace/samples/fail.tc > @@ -0,0 +1,4 @@ > +#!/bin/sh > +# description: failure-case example > +cat non-exist-file > +echo "this is not executed" > diff --git a/tools/testing/selftests/ftrace/samples/pass.tc b/tools/testing/selftests/ftrace/samples/pass.tc > new file mode 100644 > index 0000000..d015493 > --- /dev/null > +++ b/tools/testing/selftests/ftrace/samples/pass.tc > @@ -0,0 +1,3 @@ > +#!/bin/sh > +# description: pass-case example > +return 0 > diff --git a/tools/testing/selftests/ftrace/samples/unresolved.tc b/tools/testing/selftests/ftrace/samples/unresolved.tc > new file mode 100644 > index 0000000..41e99d3 > --- /dev/null > +++ b/tools/testing/selftests/ftrace/samples/unresolved.tc > @@ -0,0 +1,4 @@ > +#!/bin/sh > +# description: unresolved-case example > +trap exit_unresolved INT > +kill -INT $PID > diff --git a/tools/testing/selftests/ftrace/samples/unsupported.tc b/tools/testing/selftests/ftrace/samples/unsupported.tc > new file mode 100644 > index 0000000..45910ff > --- /dev/null > +++ b/tools/testing/selftests/ftrace/samples/unsupported.tc > @@ -0,0 +1,3 @@ > +#!/bin/sh > +# description: unsupported-case example > +exit_unsupported > diff --git a/tools/testing/selftests/ftrace/samples/untested.tc b/tools/testing/selftests/ftrace/samples/untested.tc > new file mode 100644 > index 0000000..35a4594 > --- /dev/null > +++ b/tools/testing/selftests/ftrace/samples/untested.tc > @@ -0,0 +1,3 @@ > +#!/bin/sh > +# description: untested-case example > +exit_untested > diff --git a/tools/testing/selftests/ftrace/samples/xfail.tc b/tools/testing/selftests/ftrace/samples/xfail.tc > new file mode 100644 > index 0000000..9dd3953 > --- /dev/null > +++ b/tools/testing/selftests/ftrace/samples/xfail.tc > @@ -0,0 +1,3 @@ > +#!/bin/sh > +# description: xfail-case example > +cat non-exist-file || exit_xfail > diff --git a/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc b/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc > index b04f30d..bf9a7b0 100644 > --- a/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc > +++ b/tools/testing/selftests/ftrace/test.d/00basic/basic2.tc > @@ -1,6 +1,7 @@ > #!/bin/sh > # description: Basic test for tracers > +test -f available_tracers > for t in `cat available_tracers`; do > - echo $t > current_tracer || exit 1 > + echo $t > current_tracer > done > echo nop > current_tracer > diff --git a/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc b/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc > index 0c1a3a2..bde6625 100644 > --- a/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc > +++ b/tools/testing/selftests/ftrace/test.d/00basic/basic3.tc > @@ -1,8 +1,8 @@ > #!/bin/sh > # description: Basic trace clock test > -[ -f trace_clock ] || exit 1 > +test -f trace_clock > for c in `cat trace_clock | tr -d \[\]`; do > - echo $c > trace_clock || exit 1 > - grep '\['$c'\]' trace_clock || exit 1 > + echo $c > trace_clock > + grep '\['$c'\]' trace_clock > done > echo local > trace_clock > diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc b/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc > index 5ddfb47..1b8b665 100644 > --- a/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc > +++ b/tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc > @@ -1,11 +1,11 @@ > #!/bin/sh > # description: Kprobe dynamic event - adding and removing > > -[ -f kprobe_events ] || exit 1 > +[ -f kprobe_events ] || exit_unsupported # this is configurable > > -echo 0 > events/enable || exit 1 > -echo > kprobe_events || exit 1 > -echo p:myevent do_fork > kprobe_events || exit 1 > -grep myevent kprobe_events || exit 1 > -[ -d events/kprobes/myevent ] || exit 1 > +echo 0 > events/enable > +echo > kprobe_events > +echo p:myevent do_fork > kprobe_events > +grep myevent kprobe_events > +test -d events/kprobes/myevent > echo > kprobe_events > diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc b/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc > index 588fde97..b55c840 100644 > --- a/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc > +++ b/tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc > @@ -1,14 +1,13 @@ > #!/bin/sh > # description: Kprobe dynamic event - busy event check > > -[ -f kprobe_events ] || exit 1 > +[ -f kprobe_events ] || exit_unsupported > > -echo 0 > events/enable || exit 1 > -echo > kprobe_events || exit 1 > -echo p:myevent do_fork > kprobe_events || exit 1 > -[ -d events/kprobes/myevent ] || exit 1 > -echo 1 > events/kprobes/myevent/enable || exit 1 > +echo 0 > events/enable > +echo > kprobe_events > +echo p:myevent do_fork > kprobe_events > +test -d events/kprobes/myevent > +echo 1 > events/kprobes/myevent/enable > echo > kprobe_events && exit 1 # this must fail > -echo 0 > events/kprobes/myevent/enable || exit 1 > +echo 0 > events/kprobes/myevent/enable > echo > kprobe_events # this must succeed > - > diff --git a/tools/testing/selftests/ftrace/test.d/template b/tools/testing/selftests/ftrace/test.d/template > index ce5f735..5448f7a 100644 > --- a/tools/testing/selftests/ftrace/test.d/template > +++ b/tools/testing/selftests/ftrace/test.d/template > @@ -1,4 +1,9 @@ > #!/bin/sh > # description: %HERE DESCRIBE WHAT THIS DOES% > # you have to add ".tc" extention for your testcase file > +# Note that all tests are run with "errexit" option. > + > exit 0 # Return 0 if the test is passed, otherwise return !0 > +# If the test could not run because of lack of feature, call exit_unsupported > +# If the test returned unclear results, call exit_unresolved > +# If the test is a dummy, or a placeholder, call exit_untested > > -- Regards, Namhyung Kim ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2014-09-22 23:37 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-09-18 12:04 [PATCH v4 0/4] ftrace: Add a ftrace test collection Masami Hiramatsu 2014-09-18 12:04 ` [PATCH v4 1/4] ftracetest: Initial commit for ftracetest Masami Hiramatsu 2014-09-18 13:07 ` Shuah Khan 2014-09-19 1:03 ` Masami Hiramatsu 2014-09-19 14:05 ` Shuah Khan 2014-09-19 14:42 ` Steven Rostedt 2014-09-20 17:33 ` Masami Hiramatsu 2014-09-20 17:26 ` Masami Hiramatsu 2014-09-22 16:00 ` Steven Rostedt 2014-09-22 23:37 ` Masami Hiramatsu 2014-09-18 12:04 ` [PATCH v4 2/4] ftracetest: Add ftrace basic testcases Masami Hiramatsu 2014-09-18 12:04 ` [PATCH v4 3/4] ftracetest: Add kprobe " Masami Hiramatsu 2014-09-18 12:05 ` [PATCH v4 4/4] ftracetest: Add POSIX.3 standard and XFAIL result codes Masami Hiramatsu 2014-09-22 15:47 ` Namhyung Kim
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).