aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>2014-09-22 19:42:50 -0400
committerSteven Rostedt <rostedt@goodmis.org>2014-09-23 09:31:05 -0400
commit6e68e6c5e4b67a02aaa406da6124ea5cae7d5e10 (patch)
treea6dc106b1930d72596c3cd6e29a08a5f3dbea693
parent0f33be009b89d2268e94194dc4fd01a7851b6d51 (diff)
ftracetest: Initial commit for ftracetest
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. Link: http://lkml.kernel.org/p/20140922234250.23415.68758.stgit@kbuild-f20.novalocal Acked-by: Shuah Khan <shuahkh@osg.samsung.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--MAINTAINERS1
-rw-r--r--tools/testing/selftests/Makefile1
-rw-r--r--tools/testing/selftests/ftrace/Makefile7
-rw-r--r--tools/testing/selftests/ftrace/README45
-rwxr-xr-xtools/testing/selftests/ftrace/ftracetest159
-rw-r--r--tools/testing/selftests/ftrace/test.d/template4
6 files changed, 217 insertions, 0 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 670b3dcce2de..bb455d0ae12a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9310,6 +9310,7 @@ F: include/*/ftrace.h
9310F: include/linux/trace*.h 9310F: include/linux/trace*.h
9311F: include/trace/ 9311F: include/trace/
9312F: kernel/trace/ 9312F: kernel/trace/
9313F: tools/testing/selftests/ftrace/
9313 9314
9314TRIVIAL PATCHES 9315TRIVIAL PATCHES
9315M: Jiri Kosina <trivial@kernel.org> 9316M: Jiri Kosina <trivial@kernel.org>
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
index 36ff2e4c7b6f..45f145c6f843 100644
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -14,6 +14,7 @@ TARGETS += powerpc
14TARGETS += user 14TARGETS += user
15TARGETS += sysctl 15TARGETS += sysctl
16TARGETS += firmware 16TARGETS += firmware
17TARGETS += ftrace
17 18
18TARGETS_HOTPLUG = cpu-hotplug 19TARGETS_HOTPLUG = cpu-hotplug
19TARGETS_HOTPLUG += memory-hotplug 20TARGETS_HOTPLUG += memory-hotplug
diff --git a/tools/testing/selftests/ftrace/Makefile b/tools/testing/selftests/ftrace/Makefile
new file mode 100644
index 000000000000..76cc9f156267
--- /dev/null
+++ b/tools/testing/selftests/ftrace/Makefile
@@ -0,0 +1,7 @@
1all:
2
3run_tests:
4 @/bin/sh ./ftracetest || echo "ftrace selftests: [FAIL]"
5
6clean:
7 rm -rf logs/*
diff --git a/tools/testing/selftests/ftrace/README b/tools/testing/selftests/ftrace/README
new file mode 100644
index 000000000000..b8631f03e754
--- /dev/null
+++ b/tools/testing/selftests/ftrace/README
@@ -0,0 +1,45 @@
1Linux Ftrace Testcases
2
3This is a collection of testcases for ftrace tracing feature in the Linux
4kernel. Since ftrace exports interfaces via the debugfs, we just need
5shell scripts for testing. Feel free to add new test cases.
6
7Running the ftrace testcases
8============================
9
10At first, you need to be the root user to run this script.
11To run all testcases:
12
13 $ sudo ./ftracetest
14
15To run specific testcases:
16
17 # ./ftracetest test.d/basic3.tc
18
19Or you can also run testcases under given directory:
20
21 # ./ftracetest test.d/kprobe/
22
23Contributing new testcases
24==========================
25
26Copy test.d/template to your testcase (whose filename must have *.tc
27extension) and rewrite the test description line.
28
29 * The working directory of the script is <debugfs>/tracing/.
30
31 * Take care with side effects as the tests are run with root privilege.
32
33 * The tests should not run for a long period of time (more than 1 min.)
34 These are to be unit tests.
35
36 * You can add a directory for your testcases under test.d/ if needed.
37
38 * The test cases should run on dash (busybox shell) for testing on
39 minimal cross-build environments.
40
41TODO
42====
43
44 * Fancy colored output :)
45
diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests/ftrace/ftracetest
new file mode 100755
index 000000000000..4c6c2fad2cda
--- /dev/null
+++ b/tools/testing/selftests/ftrace/ftracetest
@@ -0,0 +1,159 @@
1#!/bin/sh
2
3# ftracetest - Ftrace test shell scripts
4#
5# Copyright (C) Hitachi Ltd., 2014
6# Written by Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
7#
8# Released under the terms of the GPL v2.
9
10usage() { # errno [message]
11[ "$2" ] && echo $2
12echo "Usage: ftracetest [options] [testcase(s)] [testcase-directory(s)]"
13echo " Options:"
14echo " -h|--help Show help message"
15echo " -k|--keep Keep passed test logs"
16echo " -d|--debug Debug mode (trace all shell commands)"
17exit $1
18}
19
20errexit() { # message
21 echo "Error: $1" 1>&2
22 exit 1
23}
24
25# Ensuring user privilege
26if [ `id -u` -ne 0 ]; then
27 errexit "this must be run by root user"
28fi
29
30# Utilities
31absdir() { # file_path
32 (cd `dirname $1`; pwd)
33}
34
35abspath() {
36 echo `absdir $1`/`basename $1`
37}
38
39find_testcases() { #directory
40 echo `find $1 -name \*.tc`
41}
42
43parse_opts() { # opts
44 local OPT_TEST_CASES=
45 local OPT_TEST_DIR=
46
47 while [ "$1" ]; do
48 case "$1" in
49 --help|-h)
50 usage 0
51 ;;
52 --keep|-k)
53 KEEP_LOG=1
54 shift 1
55 ;;
56 --debug|-d)
57 DEBUG=1
58 shift 1
59 ;;
60 *.tc)
61 if [ -f "$1" ]; then
62 OPT_TEST_CASES="$OPT_TEST_CASES `abspath $1`"
63 shift 1
64 else
65 usage 1 "$1 is not a testcase"
66 fi
67 ;;
68 *)
69 if [ -d "$1" ]; then
70 OPT_TEST_DIR=`abspath $1`
71 OPT_TEST_CASES="$OPT_TEST_CASES `find_testcases $OPT_TEST_DIR`"
72 shift 1
73 else
74 usage 1 "Invalid option ($1)"
75 fi
76 ;;
77 esac
78 done
79 if [ "$OPT_TEST_CASES" ]; then
80 TEST_CASES=$OPT_TEST_CASES
81 fi
82}
83
84# Parameters
85DEBUGFS_DIR=`grep debugfs /proc/mounts | cut -f2 -d' '`
86TRACING_DIR=$DEBUGFS_DIR/tracing
87TOP_DIR=`absdir $0`
88TEST_DIR=$TOP_DIR/test.d
89TEST_CASES=`find_testcases $TEST_DIR`
90LOG_DIR=$TOP_DIR/logs/`date +%Y%m%d-%H%M%S`/
91KEEP_LOG=0
92DEBUG=0
93# Parse command-line options
94parse_opts $*
95
96[ $DEBUG -ne 0 ] && set -x
97
98# Verify parameters
99if [ -z "$DEBUGFS_DIR" -o ! -d "$TRACING_DIR" ]; then
100 errexit "No ftrace directory found"
101fi
102
103# Preparing logs
104LOG_FILE=$LOG_DIR/ftracetest.log
105mkdir -p $LOG_DIR || errexit "Failed to make a log directory: $LOG_DIR"
106date > $LOG_FILE
107prlog() { # messages
108 echo "$@" | tee -a $LOG_FILE
109}
110catlog() { #file
111 cat $1 | tee -a $LOG_FILE
112}
113prlog "=== Ftrace unit tests ==="
114
115
116# Testcase management
117PASSED_CASES=
118FAILED_CASES=
119CASENO=0
120testcase() { # testfile
121 CASENO=$((CASENO+1))
122 prlog -n "[$CASENO]"`grep "^#[ \t]*description:" $1 | cut -f2 -d:`
123}
124failed() {
125 prlog " [FAIL]"
126 FAILED_CASES="$FAILED_CASES $CASENO"
127}
128passed() {
129 prlog " [PASS]"
130 PASSED_CASES="$PASSED_CASES $CASENO"
131}
132
133
134# Run one test case
135run_test() { # testfile
136 local testname=`basename $1`
137 local testlog=`mktemp --tmpdir=$LOG_DIR ${testname}-XXXXXX.log`
138 testcase $1
139 echo "execute: "$1 > $testlog
140 (cd $TRACING_DIR; set -x ; . $1) >> $testlog 2>&1
141 ret=$?
142 if [ $ret -ne 0 ]; then
143 failed
144 catlog $testlog
145 else
146 passed
147 [ $KEEP_LOG -eq 0 ] && rm $testlog
148 fi
149}
150
151# Main loop
152for t in $TEST_CASES; do
153 run_test $t
154done
155prlog ""
156prlog "# of passed: " `echo $PASSED_CASES | wc -w`
157prlog "# of failed: " `echo $FAILED_CASES | wc -w`
158
159test -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 000000000000..ce5f735b2e65
--- /dev/null
+++ b/tools/testing/selftests/ftrace/test.d/template
@@ -0,0 +1,4 @@
1#!/bin/sh
2# description: %HERE DESCRIBE WHAT THIS DOES%
3# you have to add ".tc" extention for your testcase file
4exit 0 # Return 0 if the test is passed, otherwise return !0